From 81a213070e47ef5fc038caabc4eccc47e43e4793 Mon Sep 17 00:00:00 2001 From: Guanghao Zhang Date: Sun, 12 Nov 2017 16:15:22 +0800 Subject: [PATCH] HBASE-19366 Backport to branch-1 HBASE-19035 Miss metrics when coprocessor use region scanner to read data --- .../java/org/apache/hadoop/hbase/regionserver/HRegion.java | 13 ++++++++----- .../hbase/regionserver/MetricsRegionServerWrapperImpl.java | 2 +- .../org/apache/hadoop/hbase/regionserver/RSRpcServices.java | 10 ---------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index c68f813..cec585a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -297,8 +297,10 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi final Counter checkAndMutateChecksPassed = new Counter(); final Counter checkAndMutateChecksFailed = new Counter(); - //Number of requests + // Number of requests + // Count rows for scan final Counter readRequestsCount = new Counter(); + // Count rows for multi row mutations final Counter writeRequestsCount = new Counter(); // Number of requests blocked by memstore size. @@ -2728,7 +2730,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi // closest key is across all column families, since the data may be sparse checkRow(row, "getClosestRowBefore"); startRegionOperation(Operation.GET); - this.readRequestsCount.increment(); try { Result result = null; Get get = new Get(row); @@ -6045,7 +6046,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi "or a lengthy garbage collection"); } startRegionOperation(Operation.SCAN); - readRequestsCount.increment(); try { return nextRaw(outResults, scannerContext); } finally { @@ -6077,6 +6077,10 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi outResults.addAll(tmpList); } + if (!outResults.isEmpty()) { + readRequestsCount.increment(); + } + // If the size limit was reached it means a partial Result is being returned. Returning a // partial Result means that we should not reset the filters; filters should only be reset in // between rows @@ -7300,7 +7304,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi @Override public void mutateRowsWithLocks(Collection mutations, Collection rowsToLock, long nonceGroup, long nonce) throws IOException { - writeRequestsCount.add(mutations.size()); MultiRowMutationProcessor proc = new MultiRowMutationProcessor(mutations, rowsToLock); processRowsWithLocks(proc, -1, nonceGroup, nonce); } @@ -7406,7 +7409,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi processor, now, this, mutations, walEdit, timeout); if (!mutations.isEmpty()) { - + writeRequestsCount.add(mutations.size()); // 5. Call the preBatchMutate hook processor.preBatchMutate(this, walEdit); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java index 31cfbd1..9ba6cc0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java @@ -181,7 +181,7 @@ class MetricsRegionServerWrapperImpl @Override public long getTotalRowActionRequestCount() { - return regionServer.rpcServices.requestRowActionCount.get(); + return readRequestsCount + writeRequestsCount; } @Override diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index 597c665..5b948d7 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -238,10 +238,6 @@ public class RSRpcServices implements HBaseRPCErrorHandler, // Count only once for requests with multiple actions like multi/caching-scan/replayBatch final Counter requestCount = new Counter(); - // Request counter. (Excludes requests that are not serviced by regions.) - // Count rows for requests with multiple actions like multi/caching-scan/replayBatch - final Counter requestRowActionCount = new Counter(); - // Request counter for rpc get final Counter rpcGetRequestCount = new Counter(); @@ -993,7 +989,6 @@ public class RSRpcServices implements HBaseRPCErrorHandler, } } requestCount.increment(); - requestRowActionCount.add(mutations.size()); if (!region.getRegionInfo().isMetaTable()) { regionServer.cacheFlusher.reclaimMemStoreMemory(); } @@ -2199,7 +2194,6 @@ public class RSRpcServices implements HBaseRPCErrorHandler, try { checkOpen(); requestCount.increment(); - requestRowActionCount.increment(); rpcGetRequestCount.increment(); Region region = getRegion(request.getRegion()); @@ -2322,7 +2316,6 @@ public class RSRpcServices implements HBaseRPCErrorHandler, Map regionStats = new HashMap<>(request .getRegionActionCount()); for (RegionAction regionAction : request.getRegionActionList()) { - this.requestRowActionCount.add(regionAction.getActionCount()); OperationQuota quota; Region region; regionActionResultBuilder.clear(); @@ -2447,7 +2440,6 @@ public class RSRpcServices implements HBaseRPCErrorHandler, try { checkOpen(); requestCount.increment(); - requestRowActionCount.increment(); rpcMutateRequestCount.increment(); Region region = getRegion(request.getRegion()); MutateResponse.Builder builder = MutateResponse.newBuilder(); @@ -2884,8 +2876,6 @@ public class RSRpcServices implements HBaseRPCErrorHandler, builder.setScanMetrics(metricBuilder.build()); } } - region.updateReadRequestsCount(numOfResults); - requestRowActionCount.add(numOfResults); long end = EnvironmentEdgeManager.currentTime(); long responseCellSize = context != null ? context.getResponseCellSize() : 0; region.getMetrics().updateScanTime(end - before); -- 1.9.1