diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java index 0e7dd8d..86a5a1f 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java @@ -220,6 +220,9 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo String TOTAL_REQUEST_COUNT = "totalRequestCount"; String TOTAL_REQUEST_COUNT_DESC = "Total number of requests this RegionServer has answered."; + String TOTAL_ROWS_REQUEST_COUNT = "totalRowsRequestCount"; + String TOTAL_ROWS_REQUEST_COUNT_DESC = + "Total number of region requests this RegionServer has answered, count by row-level action"; String READ_REQUEST_COUNT = "readRequestCount"; String READ_REQUEST_COUNT_DESC = "Number of read requests this region server has answered."; diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java index 0aa625c..6140cdc 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java @@ -457,4 +457,6 @@ public interface MetricsRegionServerWrapper { long getDeleteFamilyBloomHitCount(); long getTrailerHitCount(); + + long getTotalRowsRequestCount(); } diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java index 67764f8..6ec38e6 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java @@ -345,6 +345,8 @@ public class MetricsRegionServerSourceImpl .addGauge(Interns.info(AVERAGE_REGION_SIZE, AVERAGE_REGION_SIZE_DESC), rsWrap.getAverageRegionSize()) .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC), rsWrap.getTotalRequestCount()) + .addCounter(Interns.info(TOTAL_ROWS_REQUEST_COUNT, TOTAL_ROWS_REQUEST_COUNT_DESC), + rsWrap.getTotalRowsRequestCount()) .addCounter(Interns.info(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC), rsWrap.getReadRequestsCount()) .addCounter(Interns.info(FILTERED_READ_REQUEST_COUNT, FILTERED_READ_REQUEST_COUNT_DESC), 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 882044c..014e483 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 @@ -219,6 +219,11 @@ class MetricsRegionServerWrapperImpl } @Override + public long getTotalRowsRequestCount() { + return regionServer.rpcServices.requestRowsCount.sum(); + } + + @Override public int getSplitQueueSize() { if (this.regionServer.compactSplitThread == null) { return 0; 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 1028cb2..0532e68 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 @@ -259,8 +259,13 @@ public class RSRpcServices implements HBaseRPCErrorHandler, static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000; // Request counter. (Includes requests that are not serviced by regions.) + // Count only once for requests with multiple actions like multi/caching-scan/replayBatch final LongAdder requestCount = new LongAdder(); + // Request counter. (Excludes requests that are not serviced by regions.) + // Count rows for requests with multiple actions like multi/caching-scan/replayBatch + final LongAdder requestRowsCount = new LongAdder(); + // Request counter for rpc get final LongAdder rpcGetRequestCount = new LongAdder(); @@ -1098,7 +1103,8 @@ public class RSRpcServices implements HBaseRPCErrorHandler, it.remove(); } } - requestCount.add(mutations.size()); + requestCount.increment(); + requestRowsCount.add(mutations.size()); if (!region.getRegionInfo().isMetaTable()) { regionServer.cacheFlusher.reclaimMemStoreMemory(); } @@ -2410,6 +2416,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler, try { checkOpen(); requestCount.increment(); + requestRowsCount.increment(); rpcGetRequestCount.increment(); Region region = getRegion(request.getRegion()); @@ -2566,11 +2573,12 @@ public class RSRpcServices implements HBaseRPCErrorHandler, RegionScannersCloseCallBack closeCallBack = null; RpcCallContext context = RpcServer.getCurrentCall(); this.rpcMultiRequestCount.increment(); + this.requestCount.increment(); Map regionStats = new HashMap<>(request .getRegionActionCount()); ActivePolicyEnforcement spaceQuotaEnforcement = getSpaceQuotaManager().getActiveEnforcements(); for (RegionAction regionAction : request.getRegionActionList()) { - this.requestCount.add(regionAction.getActionCount()); + this.requestRowsCount.add(regionAction.getActionCount()); OperationQuota quota; Region region; regionActionResultBuilder.clear(); @@ -2702,6 +2710,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler, try { checkOpen(); requestCount.increment(); + requestRowsCount.increment(); rpcMutateRequestCount.increment(); Region region = getRegion(request.getRegion()); MutateResponse.Builder builder = MutateResponse.newBuilder(); @@ -3041,6 +3050,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler, // Collect values to be returned here moreRows = scanner.nextRaw(values, scannerContext); + requestRowsCount.increment(); if (!values.isEmpty()) { if (limitOfRows > 0) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java index 6e4828c..e902e8e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java @@ -101,6 +101,11 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe } @Override + public long getTotalRowsRequestCount() { + return getReadRequestsCount() + getWriteRequestsCount(); + } + + @Override public long getReadRequestsCount() { return 997; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java index 3a9d2ee..5e1b650 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java @@ -72,6 +72,10 @@ public class TestMetricsRegionServer { HELPER.assertGauge("memstoreSize", 1025, serverSource); HELPER.assertGauge("storeFileSize", 1900, serverSource); HELPER.assertCounter("totalRequestCount", 899, serverSource); + HELPER.assertCounter("totalRowsRequestCount", + HELPER.getCounter("readRequestCount", serverSource) + + HELPER.getCounter("writeRequestCount", serverSource), + serverSource); HELPER.assertCounter("readRequestCount", 997, serverSource); HELPER.assertCounter("filteredReadRequestCount", 1997, serverSource); HELPER.assertCounter("writeRequestCount", 707, serverSource);