Skip to content

Commit 426c3c1

Browse files
leyangyueshanstevenxi
andauthored
HBASE-25799 add clusterReadRequests and clusterWriteRequests jmx (#3188)
* HBASE-25799 add clusterReadRequests and clusterWriteRequests jmx Co-authored-by: stevenxi <[email protected]>
1 parent 335305e commit 426c3c1

File tree

10 files changed

+130
-7
lines changed

10 files changed

+130
-7
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/ServerMetrics.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ default String getVersion() {
5757
*/
5858
long getRequestCount();
5959

60+
/**
61+
* @return total Number of read requests from the start of the region server.
62+
*/
63+
long getReadRequestsCount();
64+
65+
/**
66+
* @return total Number of write requests from the start of the region server.
67+
*/
68+
long getWriteRequestsCount();
69+
6070
/**
6171
* @return the amount of used heap
6272
*/

hbase-client/src/main/java/org/apache/hadoop/hbase/ServerMetricsBuilder.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public static ServerMetrics toServerMetrics(ServerName serverName, int versionNu
7272
.setRequestCountPerSecond(serverLoadPB.getNumberOfRequests())
7373
.setRequestCount(serverLoadPB.getTotalNumberOfRequests())
7474
.setInfoServerPort(serverLoadPB.getInfoServerPort())
75+
.setReadRequestCount(serverLoadPB.getReadRequestsCount())
76+
.setWriteRequestCount(serverLoadPB.getWriteRequestsCount())
7577
.setMaxHeapSize(new Size(serverLoadPB.getMaxHeapMB(), Size.Unit.MEGABYTE))
7678
.setUsedHeapSize(new Size(serverLoadPB.getUsedHeapMB(), Size.Unit.MEGABYTE))
7779
.setCoprocessorNames(serverLoadPB.getCoprocessorsList().stream()
@@ -128,6 +130,8 @@ public static ServerMetricsBuilder newBuilder(ServerName sn) {
128130
private String version = "0.0.0";
129131
private long requestCountPerSecond;
130132
private long requestCount;
133+
private long readRequestCount;
134+
private long writeRequestCount;
131135
private Size usedHeapSize = Size.ZERO;
132136
private Size maxHeapSize = Size.ZERO;
133137
private int infoServerPort;
@@ -163,6 +167,17 @@ public ServerMetricsBuilder setRequestCount(long value) {
163167
return this;
164168
}
165169

170+
public ServerMetricsBuilder setReadRequestCount(long value) {
171+
this.readRequestCount = value;
172+
return this;
173+
}
174+
175+
public ServerMetricsBuilder setWriteRequestCount(long value) {
176+
this.writeRequestCount = value;
177+
return this;
178+
}
179+
180+
166181
public ServerMetricsBuilder setUsedHeapSize(Size value) {
167182
this.usedHeapSize = value;
168183
return this;
@@ -220,6 +235,8 @@ public ServerMetrics build() {
220235
version,
221236
requestCountPerSecond,
222237
requestCount,
238+
readRequestCount,
239+
writeRequestCount,
223240
usedHeapSize,
224241
maxHeapSize,
225242
infoServerPort,
@@ -238,6 +255,8 @@ private static class ServerMetricsImpl implements ServerMetrics {
238255
private final String version;
239256
private final long requestCountPerSecond;
240257
private final long requestCount;
258+
private final long readRequestsCount;
259+
private final long writeRequestsCount;
241260
private final Size usedHeapSize;
242261
private final Size maxHeapSize;
243262
private final int infoServerPort;
@@ -251,15 +270,18 @@ private static class ServerMetricsImpl implements ServerMetrics {
251270
private final Map<byte[], UserMetrics> userMetrics;
252271

253272
ServerMetricsImpl(ServerName serverName, int versionNumber, String version,
254-
long requestCountPerSecond, long requestCount, Size usedHeapSize, Size maxHeapSize,
273+
long requestCountPerSecond, long requestCount, long readRequestsCount,
274+
long writeRequestsCount, Size usedHeapSize, Size maxHeapSize,
255275
int infoServerPort, List<ReplicationLoadSource> sources, ReplicationLoadSink sink,
256-
Map<byte[], RegionMetrics> regionStatus, Set<String> coprocessorNames, long reportTimestamp,
257-
long lastReportTimestamp, Map<byte[], UserMetrics> userMetrics) {
276+
Map<byte[], RegionMetrics> regionStatus, Set<String> coprocessorNames,
277+
long reportTimestamp, long lastReportTimestamp, Map<byte[], UserMetrics> userMetrics) {
258278
this.serverName = Preconditions.checkNotNull(serverName);
259279
this.versionNumber = versionNumber;
260280
this.version = version;
261281
this.requestCountPerSecond = requestCountPerSecond;
262282
this.requestCount = requestCount;
283+
this.readRequestsCount = readRequestsCount;
284+
this.writeRequestsCount = writeRequestsCount;
263285
this.usedHeapSize = Preconditions.checkNotNull(usedHeapSize);
264286
this.maxHeapSize = Preconditions.checkNotNull(maxHeapSize);
265287
this.infoServerPort = infoServerPort;
@@ -296,6 +318,16 @@ public long getRequestCount() {
296318
return requestCount;
297319
}
298320

321+
@Override
322+
public long getReadRequestsCount() {
323+
return readRequestsCount;
324+
}
325+
326+
@Override
327+
public long getWriteRequestsCount() {
328+
return writeRequestsCount;
329+
}
330+
299331
@Override
300332
public Size getUsedHeapSize() {
301333
return usedHeapSize;

hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public interface MetricsMasterSource extends BaseSource {
6969
String OFFLINE_REGION_COUNT_NAME = "offlineRegionCount";
7070

7171
String CLUSTER_REQUESTS_NAME = "clusterRequests";
72+
String CLUSTER_READ_REQUESTS_NAME = "clusterReadRequests";
73+
String CLUSTER_WRITE_REQUESTS_NAME = "clusterWriteRequests";
7274
String MASTER_ACTIVE_TIME_DESC = "Master Active Time";
7375
String MASTER_START_TIME_DESC = "Master Start Time";
7476
String MASTER_FINISHED_INITIALIZATION_TIME_DESC =
@@ -98,6 +100,22 @@ public interface MetricsMasterSource extends BaseSource {
98100
*/
99101
void incRequests(final long inc);
100102

103+
/**
104+
* Increment the number of read requests the cluster has seen.
105+
*
106+
* @param inc Ammount to increment the total by.
107+
*/
108+
void incReadRequests(final long inc);
109+
110+
111+
/**
112+
* Increment the number of write requests the cluster has seen.
113+
*
114+
* @param inc Ammount to increment the total by.
115+
*/
116+
void incWriteRequests(final long inc);
117+
118+
101119
/**
102120
* @return {@link OperationMetrics} containing common metrics for server crash operation
103121
*/

hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public class MetricsMasterSourceImpl
3838

3939
private final MetricsMasterWrapper masterWrapper;
4040
private MutableFastCounter clusterRequestsCounter;
41+
private MutableFastCounter clusterReadRequestsCounter;
42+
private MutableFastCounter clusterWriteRequestsCounter;
4143

4244
private OperationMetrics serverCrashMetrics;
4345

@@ -63,6 +65,8 @@ public MetricsMasterSourceImpl(String metricsName,
6365
public void init() {
6466
super.init();
6567
clusterRequestsCounter = metricsRegistry.newCounter(CLUSTER_REQUESTS_NAME, "", 0L);
68+
clusterReadRequestsCounter = metricsRegistry.newCounter(CLUSTER_READ_REQUESTS_NAME, "", 0L);
69+
clusterWriteRequestsCounter = metricsRegistry.newCounter(CLUSTER_WRITE_REQUESTS_NAME, "", 0L);
6670

6771
/*
6872
* NOTE: Please refer to HBASE-9774 and HBASE-14282. Based on these two issues, HBase is
@@ -77,6 +81,16 @@ public void incRequests(final long inc) {
7781
this.clusterRequestsCounter.incr(inc);
7882
}
7983

84+
@Override
85+
public void incReadRequests(final long inc) {
86+
this.clusterReadRequestsCounter.incr(inc);
87+
}
88+
89+
@Override
90+
public void incWriteRequests(final long inc) {
91+
this.clusterWriteRequestsCounter.incr(inc);
92+
}
93+
8094
@Override
8195
public void getMetrics(MetricsCollector metricsCollector, boolean all) {
8296

hbase-protocol-shaded/src/main/protobuf/server/ClusterStatus.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,16 @@ message ServerLoad {
285285
* The metrics for each user on this region server
286286
*/
287287
repeated UserLoad userLoads = 12;
288+
289+
/**
290+
* The metrics for read requests count on this region server
291+
*/
292+
optional uint64 read_requests_count = 13;
293+
294+
/**
295+
* The metrics for write requests on this region server
296+
*/
297+
optional uint64 write_requests_count = 14;
288298
}
289299

290300
message LiveServerInfo {

hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,12 @@ public RegionServerReportResponse regionServerReport(RpcController controller,
599599
if (sl != null && master.metricsMaster != null) {
600600
// Up our metrics.
601601
master.metricsMaster.incrementRequests(
602-
sl.getTotalNumberOfRequests() - (oldLoad != null ? oldLoad.getRequestCount() : 0));
602+
sl.getTotalNumberOfRequests() -
603+
(oldLoad != null ? oldLoad.getRequestCount() : 0));
604+
master.metricsMaster.incrementReadRequests(sl.getReadRequestsCount() -
605+
(oldLoad != null ? oldLoad.getReadRequestsCount() : 0));
606+
master.metricsMaster.incrementWriteRequests(sl.getWriteRequestsCount() -
607+
(oldLoad != null ? oldLoad.getWriteRequestsCount() : 0));
603608
}
604609
} catch (IOException ioe) {
605610
throw new ServiceException(ioe);

hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMaster.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,20 @@ public void incrementRequests(final long inc) {
7575
masterSource.incRequests(inc);
7676
}
7777

78+
/**
79+
* @param inc How much to add to read requests.
80+
*/
81+
public void incrementReadRequests(final long inc) {
82+
masterSource.incReadRequests(inc);
83+
}
84+
85+
/**
86+
* @param inc How much to add to write requests.
87+
*/
88+
public void incrementWriteRequests(final long inc) {
89+
masterSource.incWriteRequests(inc);
90+
}
91+
7892
/**
7993
* Sets the number of space quotas defined.
8094
*

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,6 +1402,8 @@ private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, lon
14021402
serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());
14031403
serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));
14041404
serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));
1405+
serverLoad.setReadRequestsCount(this.metricsRegionServerImpl.getReadRequestsCount());
1406+
serverLoad.setWriteRequestsCount(this.metricsRegionServerImpl.getWriteRequestsCount());
14051407
Set<String> coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();
14061408
Builder coprocessorBuilder = Coprocessor.newBuilder();
14071409
for (String coprocessor : coprocessors) {

hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,20 +149,28 @@ public void testClusterRequests() throws Exception {
149149

150150
MetricsMasterSource masterSource = master.getMasterMetrics().getMetricsSource();
151151
ClusterStatusProtos.ServerLoad sl = ClusterStatusProtos.ServerLoad.newBuilder()
152-
.setTotalNumberOfRequests(expectedRequestNumber).build();
152+
.setTotalNumberOfRequests(expectedRequestNumber)
153+
.setReadRequestsCount(expectedRequestNumber)
154+
.setWriteRequestsCount(expectedRequestNumber).build();
153155
request.setLoad(sl);
154156

155157
master.getMasterRpcServices().regionServerReport(null, request.build());
156158
metricsHelper.assertCounter("cluster_requests", expectedRequestNumber, masterSource);
159+
metricsHelper.assertCounter("cluster_read_requests", expectedRequestNumber, masterSource);
160+
metricsHelper.assertCounter("cluster_write_requests", expectedRequestNumber, masterSource);
157161

158162
expectedRequestNumber = 15000;
159163

160-
sl = ClusterStatusProtos.ServerLoad.newBuilder().setTotalNumberOfRequests(expectedRequestNumber)
161-
.build();
164+
sl = ClusterStatusProtos.ServerLoad.newBuilder()
165+
.setTotalNumberOfRequests(expectedRequestNumber)
166+
.setReadRequestsCount(expectedRequestNumber)
167+
.setWriteRequestsCount(expectedRequestNumber).build();
162168
request.setLoad(sl);
163169

164170
master.getMasterRpcServices().regionServerReport(null, request.build());
165171
metricsHelper.assertCounter("cluster_requests", expectedRequestNumber, masterSource);
172+
metricsHelper.assertCounter("cluster_read_requests", expectedRequestNumber, masterSource);
173+
metricsHelper.assertCounter("cluster_write_requests", expectedRequestNumber, masterSource);
166174
}
167175

168176
@Test

hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionsRecoveryChore.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,16 @@ public long getRequestCount() {
315315
return 0;
316316
}
317317

318+
@Override
319+
public long getReadRequestsCount() {
320+
return 0;
321+
}
322+
323+
@Override
324+
public long getWriteRequestsCount() {
325+
return 0;
326+
}
327+
318328
@Override
319329
public Size getUsedHeapSize() {
320330
return null;

0 commit comments

Comments
 (0)