Skip to content

Commit bccea0f

Browse files
committed
HBASE-27681 Refactor Table Latency Metrics
1 parent 66e46aa commit bccea0f

File tree

4 files changed

+68
-61
lines changed

4 files changed

+68
-61
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,8 @@ public void setRestoredRegion(boolean restoredRegion) {
374374
isRestoredRegion = restoredRegion;
375375
}
376376

377-
public Optional<MetricsTableRequests> getMetricsTableRequests() {
378-
return Optional.ofNullable(metricsTableRequests);
377+
public MetricsTableRequests getMetricsTableRequests() {
378+
return metricsTableRequests;
379379
}
380380

381381
// Handle table latency metrics

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

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,12 @@ public MetricsRegionServerWrapper getRegionServerWrapper() {
102102
}
103103

104104
public void updatePutBatch(HRegion region, long t) {
105-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
106-
.ifPresent(metrics -> metrics.updatePutBatch(t));
105+
region.getMetricsTableRequests().updatePutBatch(t);
107106
serverSource.updatePutBatch(t);
108107
}
109108

110109
public void updatePut(HRegion region, long t) {
111-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
112-
.ifPresent(metrics -> metrics.updatePut(t));
110+
region.getMetricsTableRequests().updatePut(t);
113111
if (t > slowMetricTime) {
114112
serverSource.incrSlowPut();
115113
}
@@ -118,8 +116,7 @@ public void updatePut(HRegion region, long t) {
118116
}
119117

120118
public void updateDelete(HRegion region, long t) {
121-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
122-
.ifPresent(metrics -> metrics.updateDelete(t));
119+
region.getMetricsTableRequests().updateDelete(t);
123120
if (t > slowMetricTime) {
124121
serverSource.incrSlowDelete();
125122
}
@@ -128,32 +125,27 @@ public void updateDelete(HRegion region, long t) {
128125
}
129126

130127
public void updateDeleteBatch(HRegion region, long t) {
131-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
132-
.ifPresent(metrics -> metrics.updateDeleteBatch(t));
128+
region.getMetricsTableRequests().updateDeleteBatch(t);
133129
serverSource.updateDeleteBatch(t);
134130
}
135131

136132
public void updateCheckAndDelete(HRegion region, long t) {
137-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
138-
.ifPresent(metrics -> metrics.updateCheckAndDelete(t));
133+
region.getMetricsTableRequests().updateCheckAndDelete(t);
139134
serverSource.updateCheckAndDelete(t);
140135
}
141136

142137
public void updateCheckAndPut(HRegion region, long t) {
143-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
144-
.ifPresent(metrics -> metrics.updateCheckAndPut(t));
138+
region.getMetricsTableRequests().updateCheckAndPut(t);
145139
serverSource.updateCheckAndPut(t);
146140
}
147141

148142
public void updateCheckAndMutate(HRegion region, long t) {
149-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
150-
.ifPresent(metrics -> metrics.updateCheckAndMutate(t));
143+
region.getMetricsTableRequests().updateCheckAndMutate(t);
151144
serverSource.updateCheckAndMutate(t);
152145
}
153146

154147
public void updateGet(HRegion region, long t) {
155-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
156-
.ifPresent(metrics -> metrics.updateGet(t));
148+
region.getMetricsTableRequests().updateGet(t);
157149
if (t > slowMetricTime) {
158150
serverSource.incrSlowGet();
159151
}
@@ -162,8 +154,7 @@ public void updateGet(HRegion region, long t) {
162154
}
163155

164156
public void updateIncrement(HRegion region, long t) {
165-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
166-
.ifPresent(metrics -> metrics.updateIncrement(t));
157+
region.getMetricsTableRequests().updateIncrement(t);
167158
if (t > slowMetricTime) {
168159
serverSource.incrSlowIncrement();
169160
}
@@ -172,8 +163,7 @@ public void updateIncrement(HRegion region, long t) {
172163
}
173164

174165
public void updateAppend(HRegion region, long t) {
175-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
176-
.ifPresent(metrics -> metrics.updateAppend(t));
166+
region.getMetricsTableRequests().updateAppend(t);
177167
if (t > slowMetricTime) {
178168
serverSource.incrSlowAppend();
179169
}
@@ -187,14 +177,12 @@ public void updateReplay(long t) {
187177
}
188178

189179
public void updateScanSize(HRegion region, long scanSize) {
190-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
191-
.ifPresent(metrics -> metrics.updateScanSize(scanSize));
180+
region.getMetricsTableRequests().updateScanSize(scanSize);
192181
serverSource.updateScanSize(scanSize);
193182
}
194183

195184
public void updateScanTime(HRegion region, long t) {
196-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
197-
.ifPresent(metrics -> metrics.updateScanTime(t));
185+
region.getMetricsTableRequests().updateScanTime(t);
198186
serverSource.updateScanTime(t);
199187
userAggregate.updateScanTime(t);
200188
}
@@ -260,24 +248,21 @@ public void incrementRegionSizeReportingChoreTime(long time) {
260248
}
261249

262250
public void updateReadQueryMeter(HRegion region, long count) {
263-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
264-
.ifPresent(metrics -> metrics.updateTableReadQueryMeter(count));
251+
region.getMetricsTableRequests().updateTableReadQueryMeter(count);
265252
if (serverReadQueryMeter != null) {
266253
serverReadQueryMeter.mark(count);
267254
}
268255
}
269256

270257
public void updateWriteQueryMeter(HRegion region, long count) {
271-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
272-
.ifPresent(metrics -> metrics.updateTableWriteQueryMeter(count));
258+
region.getMetricsTableRequests().updateTableWriteQueryMeter(count);
273259
if (serverWriteQueryMeter != null) {
274260
serverWriteQueryMeter.mark(count);
275261
}
276262
}
277263

278264
public void updateWriteQueryMeter(HRegion region) {
279-
Optional.ofNullable(region).flatMap(HRegion::getMetricsTableRequests)
280-
.ifPresent(metrics -> metrics.updateTableWriteQueryMeter());
265+
region.getMetricsTableRequests().updateTableWriteQueryMeter();
281266
if (serverWriteQueryMeter != null) {
282267
serverWriteQueryMeter.mark();
283268
}

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

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@
2020
import static org.junit.Assert.assertFalse;
2121
import static org.junit.Assert.assertNotNull;
2222
import static org.junit.Assert.assertTrue;
23+
import static org.mockito.Mockito.mock;
24+
import static org.mockito.Mockito.when;
2325

2426
import org.apache.hadoop.conf.Configuration;
2527
import org.apache.hadoop.hbase.CompatibilityFactory;
2628
import org.apache.hadoop.hbase.HBaseClassTestRule;
2729
import org.apache.hadoop.hbase.TableName;
30+
import org.apache.hadoop.hbase.regionserver.metrics.MetricsTableRequests;
2831
import org.apache.hadoop.hbase.test.MetricsAssertHelper;
2932
import org.apache.hadoop.hbase.testclassification.RegionServerTests;
3033
import org.apache.hadoop.hbase.testclassification.SmallTests;
@@ -146,35 +149,40 @@ public void testConstuctor() {
146149

147150
@Test
148151
public void testSlowCount() {
152+
HRegion region = mock(HRegion.class);
153+
MetricsTableRequests metricsTableRequests = mock(MetricsTableRequests.class);
154+
when(region.getMetricsTableRequests()).thenReturn(metricsTableRequests);
155+
when(metricsTableRequests.isEnableTableLatenciesMetrics()).thenReturn(false);
156+
when(metricsTableRequests.isEnabTableQueryMeterMetrics()).thenReturn(false);
149157
for (int i = 0; i < 12; i++) {
150-
rsm.updateAppend(null, 12);
151-
rsm.updateAppend(null, 1002);
158+
rsm.updateAppend(region, 12);
159+
rsm.updateAppend(region, 1002);
152160
}
153161
for (int i = 0; i < 13; i++) {
154-
rsm.updateDeleteBatch(null, 13);
155-
rsm.updateDeleteBatch(null, 1003);
162+
rsm.updateDeleteBatch(region, 13);
163+
rsm.updateDeleteBatch(region, 1003);
156164
}
157165
for (int i = 0; i < 14; i++) {
158-
rsm.updateGet(null, 14);
159-
rsm.updateGet(null, 1004);
166+
rsm.updateGet(region, 14);
167+
rsm.updateGet(region, 1004);
160168
}
161169
for (int i = 0; i < 15; i++) {
162-
rsm.updateIncrement(null, 15);
163-
rsm.updateIncrement(null, 1005);
170+
rsm.updateIncrement(region, 15);
171+
rsm.updateIncrement(region, 1005);
164172
}
165173
for (int i = 0; i < 16; i++) {
166-
rsm.updatePutBatch(null, 16);
167-
rsm.updatePutBatch(null, 1006);
174+
rsm.updatePutBatch(region, 16);
175+
rsm.updatePutBatch(region, 1006);
168176
}
169177

170178
for (int i = 0; i < 17; i++) {
171-
rsm.updatePut(null, 17);
172-
rsm.updateDelete(null, 17);
173-
rsm.updatePut(null, 1006);
174-
rsm.updateDelete(null, 1003);
175-
rsm.updateCheckAndDelete(null, 17);
176-
rsm.updateCheckAndPut(null, 17);
177-
rsm.updateCheckAndMutate(null, 17);
179+
rsm.updatePut(region, 17);
180+
rsm.updateDelete(region, 17);
181+
rsm.updatePut(region, 1006);
182+
rsm.updateDelete(region, 1003);
183+
rsm.updateCheckAndDelete(region, 17);
184+
rsm.updateCheckAndPut(region, 17);
185+
rsm.updateCheckAndMutate(region, 17);
178186
}
179187

180188
HELPER.assertCounter("appendNumOps", 24, serverSource);
@@ -276,23 +284,27 @@ public void testScannerMetrics() {
276284

277285
@Test
278286
public void testTableQueryMeterSwitch() {
279-
TableName tn1 = TableName.valueOf("table1");
287+
HRegion region = mock(HRegion.class);
288+
MetricsTableRequests metricsTableRequests = mock(MetricsTableRequests.class);
289+
when(region.getMetricsTableRequests()).thenReturn(metricsTableRequests);
290+
when(metricsTableRequests.isEnableTableLatenciesMetrics()).thenReturn(false);
291+
when(metricsTableRequests.isEnabTableQueryMeterMetrics()).thenReturn(false);
280292
Configuration conf = new Configuration(false);
281293
// disable
282-
rsm.updateReadQueryMeter(null, 500L);
294+
rsm.updateReadQueryMeter(region, 500L);
283295
assertFalse(HELPER.checkGaugeExists("ServerReadQueryPerSecond_count", serverSource));
284-
rsm.updateWriteQueryMeter(null, 500L);
296+
rsm.updateWriteQueryMeter(region, 500L);
285297
assertFalse(HELPER.checkGaugeExists("ServerWriteQueryPerSecond_count", serverSource));
286298

287299
// enable
288300
conf.setBoolean(MetricsRegionServer.RS_ENABLE_SERVER_QUERY_METER_METRICS_KEY, true);
289301
rsm = new MetricsRegionServer(wrapper, conf, null);
290302
serverSource = rsm.getMetricsSource();
291-
rsm.updateReadQueryMeter(null, 500L);
303+
rsm.updateReadQueryMeter(region, 500L);
292304
assertTrue(HELPER.checkGaugeExists("ServerWriteQueryPerSecond_count", serverSource));
293305
HELPER.assertGauge("ServerReadQueryPerSecond_count", 500L, serverSource);
294306
assertTrue(HELPER.checkGaugeExists("ServerWriteQueryPerSecond_count", serverSource));
295-
rsm.updateWriteQueryMeter(null, 500L);
307+
rsm.updateWriteQueryMeter(region, 500L);
296308
HELPER.assertGauge("ServerWriteQueryPerSecond_count", 500L, serverSource);
297309
}
298310
}

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

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,21 @@
1919

2020
import static org.junit.Assert.assertFalse;
2121
import static org.junit.Assert.assertTrue;
22+
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.when;
2224

2325
import java.security.PrivilegedAction;
2426
import org.apache.hadoop.conf.Configuration;
2527
import org.apache.hadoop.hbase.CompatibilityFactory;
2628
import org.apache.hadoop.hbase.HBaseClassTestRule;
2729
import org.apache.hadoop.hbase.HBaseConfiguration;
2830
import org.apache.hadoop.hbase.TableName;
31+
import org.apache.hadoop.hbase.regionserver.metrics.MetricsTableRequests;
2932
import org.apache.hadoop.hbase.security.User;
3033
import org.apache.hadoop.hbase.test.MetricsAssertHelper;
3134
import org.apache.hadoop.hbase.testclassification.LargeTests;
3235
import org.apache.hadoop.hbase.testclassification.RegionServerTests;
36+
import org.apache.hadoop.hbase.util.Bytes;
3337
import org.junit.Before;
3438
import org.junit.BeforeClass;
3539
import org.junit.ClassRule;
@@ -65,23 +69,24 @@ public void setUp() {
6569
}
6670

6771
private void doOperations() {
72+
HRegion region = mock(HRegion.class);
6873
for (int i = 0; i < 10; i++) {
69-
rsm.updateGet(null, 10);
74+
rsm.updateGet(region, 10);
7075
}
7176
for (int i = 0; i < 11; i++) {
72-
rsm.updateScanTime(null, 11);
77+
rsm.updateScanTime(region, 11);
7378
}
7479
for (int i = 0; i < 12; i++) {
75-
rsm.updatePut(null, 12);
80+
rsm.updatePut(region, 12);
7681
}
7782
for (int i = 0; i < 13; i++) {
78-
rsm.updateDelete(null, 13);
83+
rsm.updateDelete(region, 13);
7984
}
8085
for (int i = 0; i < 14; i++) {
81-
rsm.updateIncrement(null, 14);
86+
rsm.updateIncrement(region, 14);
8287
}
8388
for (int i = 0; i < 15; i++) {
84-
rsm.updateAppend(null, 15);
89+
rsm.updateAppend(region, 15);
8590
}
8691
for (int i = 0; i < 16; i++) {
8792
rsm.updateReplay(16);
@@ -150,7 +155,12 @@ public void testLossyCountingOfUserMetrics() {
150155
.doAs(new PrivilegedAction<Void>() {
151156
@Override
152157
public Void run() {
153-
rsm.updateGet(null, 10);
158+
HRegion region = mock(HRegion.class);
159+
MetricsTableRequests metricsTableRequests = mock(MetricsTableRequests.class);
160+
when(region.getMetricsTableRequests()).thenReturn(metricsTableRequests);
161+
when(metricsTableRequests.isEnableTableLatenciesMetrics()).thenReturn(false);
162+
when(metricsTableRequests.isEnabTableQueryMeterMetrics()).thenReturn(false);
163+
rsm.updateGet(region, 10);
154164
return null;
155165
}
156166
});

0 commit comments

Comments
 (0)