You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2022/03/04 22:04:09 UTC
[hbase] branch master updated: HBASE-26731 Add metrics for active and expired scanners (#4145)
This is an automated email from the ASF dual-hosted git repository.
apurtell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new be59eb7 HBASE-26731 Add metrics for active and expired scanners (#4145)
be59eb7 is described below
commit be59eb7e8d404b2523862424a5ed1ce1dbf7f2e1
Author: Bryan Beaudreault <bb...@hubspot.com>
AuthorDate: Fri Mar 4 17:03:32 2022 -0500
HBASE-26731 Add metrics for active and expired scanners (#4145)
Signed-off-by: Andrew Purtell <ap...@apache.org>
---
.../hbase/regionserver/MetricsRegionServerSource.java | 8 ++++++++
.../hbase/regionserver/MetricsRegionServerSourceImpl.java | 13 ++++++++++++-
.../hbase/regionserver/MetricsRegionServerWrapper.java | 2 ++
.../hadoop/hbase/regionserver/MetricsRegionServer.java | 4 ++++
.../hbase/regionserver/MetricsRegionServerWrapperImpl.java | 5 +++++
.../org/apache/hadoop/hbase/regionserver/RSRpcServices.java | 1 +
.../hbase/regionserver/MetricsRegionServerWrapperStub.java | 5 +++++
.../hadoop/hbase/regionserver/TestMetricsRegionServer.java | 8 ++++++++
8 files changed, 45 insertions(+), 1 deletion(-)
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 9d880d1..97896d4 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
@@ -226,6 +226,8 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo
*/
void updateCompactionOutputSize(boolean isMajor, long bytes);
+ void incrScannerLeaseExpired();
+
// Strings used for exporting to metrics system.
String REGION_COUNT = "regionCount";
String REGION_COUNT_DESC = "Number of regions";
@@ -598,4 +600,10 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo
String BYTE_BUFF_ALLOCATOR_TOTAL_BUFFER_COUNT_DESC = "Total buffer count in ByteBuffAllocator";
String BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT = "ByteBuffAllocatorUsedBufferCount";
String BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT_DESC = "Used buffer count in ByteBuffAllocator";
+
+ String ACTIVE_SCANNERS = "activeScanners";
+ String ACTIVE_SCANNERS_DESC = "Gauge of currently active scanners";
+
+ String SCANNER_LEASE_EXPIRED_COUNT = "scannerLeaseExpiredCount";
+ String SCANNER_LEASE_EXPIRED_COUNT_DESC = "Count of scanners which were expired due to scanner lease timeout";
}
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
index 7b02254..966d75a 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
@@ -91,6 +91,8 @@ public class MetricsRegionServerSourceImpl
private final MetricHistogram pausesWithGc;
private final MetricHistogram pausesWithoutGc;
+ private final MutableFastCounter scannerLeaseExpiredCount;
+
public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) {
this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap);
}
@@ -179,6 +181,8 @@ public class MetricsRegionServerSourceImpl
WARN_THRESHOLD_COUNT_DESC, 0L);
pausesWithGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITH_GC_KEY);
pausesWithoutGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITHOUT_GC_KEY);
+
+ scannerLeaseExpiredCount = getMetricsRegistry().newCounter(SCANNER_LEASE_EXPIRED_COUNT, SCANNER_LEASE_EXPIRED_COUNT_DESC, 0L);
}
@Override
@@ -322,6 +326,11 @@ public class MetricsRegionServerSourceImpl
}
}
+ @Override
+ public void incrScannerLeaseExpired() {
+ scannerLeaseExpiredCount.incr();
+ }
+
/**
* Yes this is a get function that doesn't return anything. Thanks Hadoop for breaking all
* expectations of java programmers. Instead of returning anything Hadoop metrics expects
@@ -586,7 +595,9 @@ public class MetricsRegionServerSourceImpl
rsWrap.getByteBuffAllocatorTotalBufferCount())
.addGauge(Interns.info(BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT,
BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT_DESC),
- rsWrap.getByteBuffAllocatorUsedBufferCount());
+ rsWrap.getByteBuffAllocatorUsedBufferCount())
+ .addGauge(Interns.info(ACTIVE_SCANNERS, ACTIVE_SCANNERS_DESC),
+ rsWrap.getActiveScanners());
}
@Override
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 32c73d6..b424cdb 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
@@ -569,4 +569,6 @@ public interface MetricsRegionServerWrapper {
long getByteBuffAllocatorTotalBufferCount();
long getByteBuffAllocatorUsedBufferCount();
+
+ int getActiveScanners();
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
index 07a90f6..0dc835f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
@@ -317,4 +317,8 @@ public class MetricsRegionServer {
serverWriteQueryMeter.mark();
}
}
+
+ public void incrScannerLeaseExpired() {
+ serverSource.incrScannerLeaseExpired();
+ }
}
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 8802715..517a4cb 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
@@ -672,6 +672,11 @@ class MetricsRegionServerWrapperImpl
return mobFileCacheHitRatio * 100;
}
+ @Override
+ public int getActiveScanners() {
+ return regionServer.getRpcServices().getScannersCount();
+ }
+
/**
* This is the runnable that will be executed on the executor every PERIOD number of seconds
* It will take metrics/numbers from all of the regions and use them to compute point in
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 5b57ac1..a23b22f 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
@@ -478,6 +478,7 @@ public class RSRpcServices extends HBaseRpcServicesBase<HRegionServer>
return;
}
LOG.info("Scanner lease {} expired {}", this.scannerName, rsh);
+ server.getMetrics().incrScannerLeaseExpired();
RegionScanner s = rsh.s;
HRegion region = null;
try {
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 ae9666d..a874cb1 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
@@ -144,6 +144,11 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe
}
@Override
+ public int getActiveScanners() {
+ return 0;
+ }
+
+ @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 3663f85..f2e4854 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
@@ -251,6 +251,14 @@ public class TestMetricsRegionServer {
}
@Test
+ public void testScannerMetrics() {
+ HELPER.assertCounter("scannerLeaseExpiredCount", 0, serverSource);
+ rsm.incrScannerLeaseExpired();
+ HELPER.assertCounter("scannerLeaseExpiredCount", 1, serverSource);
+ HELPER.assertGauge("activeScanners", 0, serverSource);
+ }
+
+ @Test
public void testTableQueryMeterSwitch() {
TableName tn1 = TableName.valueOf("table1");
Configuration conf = new Configuration(false);