Skip to content

Commit be59eb7

Browse files
authored
HBASE-26731 Add metrics for active and expired scanners (#4145)
Signed-off-by: Andrew Purtell <apurtell@apache.org>
1 parent 7d2457e commit be59eb7

8 files changed

Lines changed: 45 additions & 1 deletion

File tree

hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo
226226
*/
227227
void updateCompactionOutputSize(boolean isMajor, long bytes);
228228

229+
void incrScannerLeaseExpired();
230+
229231
// Strings used for exporting to metrics system.
230232
String REGION_COUNT = "regionCount";
231233
String REGION_COUNT_DESC = "Number of regions";
@@ -598,4 +600,10 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo
598600
String BYTE_BUFF_ALLOCATOR_TOTAL_BUFFER_COUNT_DESC = "Total buffer count in ByteBuffAllocator";
599601
String BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT = "ByteBuffAllocatorUsedBufferCount";
600602
String BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT_DESC = "Used buffer count in ByteBuffAllocator";
603+
604+
String ACTIVE_SCANNERS = "activeScanners";
605+
String ACTIVE_SCANNERS_DESC = "Gauge of currently active scanners";
606+
607+
String SCANNER_LEASE_EXPIRED_COUNT = "scannerLeaseExpiredCount";
608+
String SCANNER_LEASE_EXPIRED_COUNT_DESC = "Count of scanners which were expired due to scanner lease timeout";
601609
}

hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ public class MetricsRegionServerSourceImpl
9191
private final MetricHistogram pausesWithGc;
9292
private final MetricHistogram pausesWithoutGc;
9393

94+
private final MutableFastCounter scannerLeaseExpiredCount;
95+
9496
public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) {
9597
this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap);
9698
}
@@ -179,6 +181,8 @@ public MetricsRegionServerSourceImpl(String metricsName,
179181
WARN_THRESHOLD_COUNT_DESC, 0L);
180182
pausesWithGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITH_GC_KEY);
181183
pausesWithoutGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITHOUT_GC_KEY);
184+
185+
scannerLeaseExpiredCount = getMetricsRegistry().newCounter(SCANNER_LEASE_EXPIRED_COUNT, SCANNER_LEASE_EXPIRED_COUNT_DESC, 0L);
182186
}
183187

184188
@Override
@@ -322,6 +326,11 @@ public void updateCompactionOutputSize(boolean isMajor, long bytes) {
322326
}
323327
}
324328

329+
@Override
330+
public void incrScannerLeaseExpired() {
331+
scannerLeaseExpiredCount.incr();
332+
}
333+
325334
/**
326335
* Yes this is a get function that doesn't return anything. Thanks Hadoop for breaking all
327336
* expectations of java programmers. Instead of returning anything Hadoop metrics expects
@@ -586,7 +595,9 @@ private MetricsRecordBuilder addGaugesToMetricsRecordBuilder(MetricsRecordBuilde
586595
rsWrap.getByteBuffAllocatorTotalBufferCount())
587596
.addGauge(Interns.info(BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT,
588597
BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT_DESC),
589-
rsWrap.getByteBuffAllocatorUsedBufferCount());
598+
rsWrap.getByteBuffAllocatorUsedBufferCount())
599+
.addGauge(Interns.info(ACTIVE_SCANNERS, ACTIVE_SCANNERS_DESC),
600+
rsWrap.getActiveScanners());
590601
}
591602

592603
@Override

hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,4 +569,6 @@ public interface MetricsRegionServerWrapper {
569569
long getByteBuffAllocatorTotalBufferCount();
570570

571571
long getByteBuffAllocatorUsedBufferCount();
572+
573+
int getActiveScanners();
572574
}

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,4 +317,8 @@ public void updateWriteQueryMeter(TableName tn) {
317317
serverWriteQueryMeter.mark();
318318
}
319319
}
320+
321+
public void incrScannerLeaseExpired() {
322+
serverSource.incrScannerLeaseExpired();
323+
}
320324
}

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,11 @@ public double getMobFileCacheHitPercent() {
672672
return mobFileCacheHitRatio * 100;
673673
}
674674

675+
@Override
676+
public int getActiveScanners() {
677+
return regionServer.getRpcServices().getScannersCount();
678+
}
679+
675680
/**
676681
* This is the runnable that will be executed on the executor every PERIOD number of seconds
677682
* It will take metrics/numbers from all of the regions and use them to compute point in

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ public void leaseExpired() {
478478
return;
479479
}
480480
LOG.info("Scanner lease {} expired {}", this.scannerName, rsh);
481+
server.getMetrics().incrScannerLeaseExpired();
481482
RegionScanner s = rsh.s;
482483
HRegion region = null;
483484
try {

hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ public long getByteBuffAllocatorUsedBufferCount() {
143143
return 0;
144144
}
145145

146+
@Override
147+
public int getActiveScanners() {
148+
return 0;
149+
}
150+
146151
@Override
147152
public long getReadRequestsCount() {
148153
return 997;

hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,14 @@ public void testPauseMonitor() {
250250
HELPER.assertCounter("pauseTimeWithGc_num_ops", 1, serverSource);
251251
}
252252

253+
@Test
254+
public void testScannerMetrics() {
255+
HELPER.assertCounter("scannerLeaseExpiredCount", 0, serverSource);
256+
rsm.incrScannerLeaseExpired();
257+
HELPER.assertCounter("scannerLeaseExpiredCount", 1, serverSource);
258+
HELPER.assertGauge("activeScanners", 0, serverSource);
259+
}
260+
253261
@Test
254262
public void testTableQueryMeterSwitch() {
255263
TableName tn1 = TableName.valueOf("table1");

0 commit comments

Comments
 (0)