Skip to content

Commit 7f4fa51

Browse files
author
liwang
committed
Author: Li Wang <liwang@apple.com>
1 parent 66c4efe commit 7f4fa51

File tree

4 files changed

+378
-0
lines changed

4 files changed

+378
-0
lines changed

zookeeper-server/src/main/java/org/apache/zookeeper/server/FinalRequestProcessor.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,20 +213,23 @@ public void processRequest(Request request) {
213213
switch (request.type) {
214214
case OpCode.ping: {
215215
lastOp = "PING";
216+
incrementOpCount(ServerMetrics.getMetrics().PING_OP_COUNT);
216217
updateStats(request, lastOp, lastZxid);
217218

218219
responseSize = cnxn.sendResponse(new ReplyHeader(ClientCnxn.PING_XID, lastZxid, 0), null, "response");
219220
return;
220221
}
221222
case OpCode.createSession: {
222223
lastOp = "SESS";
224+
incrementOpCount(ServerMetrics.getMetrics().CREATE_SESSION_OP_COUNT);
223225
updateStats(request, lastOp, lastZxid);
224226

225227
zks.finishSessionInit(request.cnxn, true);
226228
return;
227229
}
228230
case OpCode.multi: {
229231
lastOp = "MULT";
232+
incrementOpCount(ServerMetrics.getMetrics().MULTI_OP_COUNT);
230233
rsp = new MultiResponse();
231234

232235
for (ProcessTxnResult subTxnResult : rc.multiResult) {
@@ -269,6 +272,7 @@ public void processRequest(Request request) {
269272
}
270273
case OpCode.multiRead: {
271274
lastOp = "MLTR";
275+
incrementOpCount(ServerMetrics.getMetrics().MULTI_READ_OP_COUNT);
272276
MultiOperationRecord multiReadRecord = request.readRequestRecord(MultiOperationRecord::new);
273277
rsp = new MultiResponse();
274278
OpResult subResult;
@@ -297,6 +301,7 @@ public void processRequest(Request request) {
297301
}
298302
case OpCode.create: {
299303
lastOp = "CREA";
304+
incrementOpCount(ServerMetrics.getMetrics().CREATE_OP_COUNT);
300305
rsp = new CreateResponse(rc.path);
301306
err = Code.get(rc.err);
302307
requestPathMetricsCollector.registerRequest(request.type, rc.path);
@@ -306,6 +311,7 @@ public void processRequest(Request request) {
306311
case OpCode.createTTL:
307312
case OpCode.createContainer: {
308313
lastOp = "CREA";
314+
incrementOpCount(ServerMetrics.getMetrics().CREATE_OP_COUNT);
309315
rsp = new Create2Response(rc.path, rc.stat);
310316
err = Code.get(rc.err);
311317
requestPathMetricsCollector.registerRequest(request.type, rc.path);
@@ -314,19 +320,22 @@ public void processRequest(Request request) {
314320
case OpCode.delete:
315321
case OpCode.deleteContainer: {
316322
lastOp = "DELE";
323+
incrementOpCount(ServerMetrics.getMetrics().DELETE_OP_COUNT);
317324
err = Code.get(rc.err);
318325
requestPathMetricsCollector.registerRequest(request.type, rc.path);
319326
break;
320327
}
321328
case OpCode.setData: {
322329
lastOp = "SETD";
330+
incrementOpCount(ServerMetrics.getMetrics().SET_DATA_OP_COUNT);
323331
rsp = new SetDataResponse(rc.stat);
324332
err = Code.get(rc.err);
325333
requestPathMetricsCollector.registerRequest(request.type, rc.path);
326334
break;
327335
}
328336
case OpCode.reconfig: {
329337
lastOp = "RECO";
338+
incrementOpCount(ServerMetrics.getMetrics().RECONFIG_OP_COUNT);
330339
rsp = new GetDataResponse(
331340
((QuorumZooKeeperServer) zks).self.getQuorumVerifier().toString().getBytes(UTF_8),
332341
rc.stat);
@@ -335,31 +344,36 @@ public void processRequest(Request request) {
335344
}
336345
case OpCode.setACL: {
337346
lastOp = "SETA";
347+
incrementOpCount(ServerMetrics.getMetrics().SET_ACL_OP_COUNT);
338348
rsp = new SetACLResponse(rc.stat);
339349
err = Code.get(rc.err);
340350
requestPathMetricsCollector.registerRequest(request.type, rc.path);
341351
break;
342352
}
343353
case OpCode.closeSession: {
344354
lastOp = "CLOS";
355+
incrementOpCount(ServerMetrics.getMetrics().CLOSE_SESSION_OP_COUNT);
345356
err = Code.get(rc.err);
346357
break;
347358
}
348359
case OpCode.sync: {
349360
lastOp = "SYNC";
361+
incrementOpCount(ServerMetrics.getMetrics().SYNC_OP_COUNT);
350362
SyncRequest syncRequest = request.readRequestRecord(SyncRequest::new);
351363
rsp = new SyncResponse(syncRequest.getPath());
352364
requestPathMetricsCollector.registerRequest(request.type, syncRequest.getPath());
353365
break;
354366
}
355367
case OpCode.check: {
356368
lastOp = "CHEC";
369+
incrementOpCount(ServerMetrics.getMetrics().CHECK_OP_COUNT);
357370
rsp = new SetDataResponse(rc.stat);
358371
err = Code.get(rc.err);
359372
break;
360373
}
361374
case OpCode.exists: {
362375
lastOp = "EXIS";
376+
incrementOpCount(ServerMetrics.getMetrics().EXISTS_OP_COUNT);
363377
ExistsRequest existsRequest = request.readRequestRecord(ExistsRequest::new);
364378
path = existsRequest.getPath();
365379
if (path.indexOf('\0') != -1) {
@@ -382,6 +396,7 @@ public void processRequest(Request request) {
382396
}
383397
case OpCode.getData: {
384398
lastOp = "GETD";
399+
incrementOpCount(ServerMetrics.getMetrics().GET_DATA_OP_COUNT);
385400
GetDataRequest getDataRequest = request.readRequestRecord(GetDataRequest::new);
386401
path = getDataRequest.getPath();
387402
rsp = handleGetDataRequest(getDataRequest, cnxn, request.authInfo);
@@ -390,6 +405,7 @@ public void processRequest(Request request) {
390405
}
391406
case OpCode.setWatches: {
392407
lastOp = "SETW";
408+
incrementOpCount(ServerMetrics.getMetrics().SET_WATCHES_OP_COUNT);
393409
SetWatches setWatches = request.readRequestRecord(SetWatches::new);
394410
long relativeZxid = setWatches.getRelativeZxid();
395411
zks.getZKDatabase()
@@ -405,6 +421,7 @@ public void processRequest(Request request) {
405421
}
406422
case OpCode.setWatches2: {
407423
lastOp = "STW2";
424+
incrementOpCount(ServerMetrics.getMetrics().SET_WATCHES_OP_COUNT);
408425
SetWatches2 setWatches = request.readRequestRecord(SetWatches2::new);
409426
long relativeZxid = setWatches.getRelativeZxid();
410427
zks.getZKDatabase().setWatches(relativeZxid,
@@ -418,13 +435,15 @@ public void processRequest(Request request) {
418435
}
419436
case OpCode.addWatch: {
420437
lastOp = "ADDW";
438+
incrementOpCount(ServerMetrics.getMetrics().ADD_WATCH_OP_COUNT);
421439
AddWatchRequest addWatcherRequest = request.readRequestRecord(AddWatchRequest::new);
422440
zks.getZKDatabase().addWatch(addWatcherRequest.getPath(), cnxn, addWatcherRequest.getMode());
423441
rsp = new ErrorResponse(0);
424442
break;
425443
}
426444
case OpCode.getACL: {
427445
lastOp = "GETA";
446+
incrementOpCount(ServerMetrics.getMetrics().GET_ACL_OP_COUNT);
428447
GetACLRequest getACLRequest = request.readRequestRecord(GetACLRequest::new);
429448
path = getACLRequest.getPath();
430449
DataNode n = zks.getZKDatabase().getNode(path);
@@ -467,6 +486,7 @@ public void processRequest(Request request) {
467486
}
468487
case OpCode.getChildren: {
469488
lastOp = "GETC";
489+
incrementOpCount(ServerMetrics.getMetrics().GET_CHILDREN_OP_COUNT);
470490
GetChildrenRequest getChildrenRequest = request.readRequestRecord(GetChildrenRequest::new);
471491
path = getChildrenRequest.getPath();
472492
rsp = handleGetChildrenRequest(getChildrenRequest, cnxn, request.authInfo);
@@ -475,6 +495,7 @@ public void processRequest(Request request) {
475495
}
476496
case OpCode.getAllChildrenNumber: {
477497
lastOp = "GETACN";
498+
incrementOpCount(ServerMetrics.getMetrics().GET_ALL_CHILDREN_NUMBER_OP_COUNT);
478499
GetAllChildrenNumberRequest getAllChildrenNumberRequest = request.readRequestRecord(GetAllChildrenNumberRequest::new);
479500
path = getAllChildrenNumberRequest.getPath();
480501
DataNode n = zks.getZKDatabase().getNode(path);
@@ -494,6 +515,7 @@ public void processRequest(Request request) {
494515
}
495516
case OpCode.getChildren2: {
496517
lastOp = "GETC";
518+
incrementOpCount(ServerMetrics.getMetrics().GET_CHILDREN_OP_COUNT);
497519
GetChildren2Request getChildren2Request = request.readRequestRecord(GetChildren2Request::new);
498520
Stat stat = new Stat();
499521
path = getChildren2Request.getPath();
@@ -515,6 +537,7 @@ public void processRequest(Request request) {
515537
}
516538
case OpCode.checkWatches: {
517539
lastOp = "CHKW";
540+
incrementOpCount(ServerMetrics.getMetrics().CHECK_WATCHES_OP_COUNT);
518541
CheckWatchesRequest checkWatches = request.readRequestRecord(CheckWatchesRequest::new);
519542
WatcherType type = WatcherType.fromInt(checkWatches.getType());
520543
path = checkWatches.getPath();
@@ -528,6 +551,7 @@ public void processRequest(Request request) {
528551
}
529552
case OpCode.removeWatches: {
530553
lastOp = "REMW";
554+
incrementOpCount(ServerMetrics.getMetrics().REMOVE_WATCHES_OP_COUNT);
531555
RemoveWatchesRequest removeWatches = request.readRequestRecord(RemoveWatchesRequest::new);
532556
WatcherType type = WatcherType.fromInt(removeWatches.getType());
533557
path = removeWatches.getPath();
@@ -541,11 +565,13 @@ public void processRequest(Request request) {
541565
}
542566
case OpCode.whoAmI: {
543567
lastOp = "HOMI";
568+
incrementOpCount(ServerMetrics.getMetrics().WHO_AM_I_OP_COUNT);
544569
rsp = new WhoAmIResponse(AuthUtil.getClientInfos(request.authInfo));
545570
break;
546571
}
547572
case OpCode.getEphemerals: {
548573
lastOp = "GETE";
574+
incrementOpCount(ServerMetrics.getMetrics().GET_EPHEMERALS_OP_COUNT);
549575
GetEphemeralsRequest getEphemerals = request.readRequestRecord(GetEphemeralsRequest::new);
550576
String prefixPath = getEphemerals.getPrefixPath();
551577
Set<String> allEphems = zks.getZKDatabase().getDataTree().getEphemerals(request.sessionId);
@@ -677,4 +703,9 @@ private void updateStats(Request request, String lastOp, long lastZxid) {
677703
request.cnxn.updateStatsForResponse(request.cxid, lastZxid, lastOp, request.createTime, currentTime);
678704
}
679705

706+
private void incrementOpCount(org.apache.zookeeper.metrics.Counter specificCounter) {
707+
ServerMetrics metrics = ServerMetrics.getMetrics();
708+
specificCounter.add(1);
709+
metrics.TOTAL_OP_COUNT.add(1);
710+
}
680711
}

zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,36 @@ private ServerMetrics(MetricsProvider metricsProvider) {
271271
QUOTA_EXCEEDED_ERROR_PER_NAMESPACE = metricsContext.getCounterSet(QuotaMetricsUtils.QUOTA_EXCEEDED_ERROR_PER_NAMESPACE);
272272

273273
TTL_NODE_DELETED_COUNT = metricsContext.getCounter("ttl_node_deleted_count");
274+
275+
/**
276+
* Operation count metrics
277+
*/
278+
TOTAL_OP_COUNT = metricsContext.getCounter("total_op_count");
279+
PING_OP_COUNT = metricsContext.getCounter("ping_op_count");
280+
CREATE_SESSION_OP_COUNT = metricsContext.getCounter("create_session_op_count");
281+
CLOSE_SESSION_OP_COUNT = metricsContext.getCounter("close_session_op_count");
282+
MULTI_OP_COUNT = metricsContext.getCounter("multi_op_count");
283+
CREATE_OP_COUNT = metricsContext.getCounter("create_op_count");
284+
DELETE_OP_COUNT = metricsContext.getCounter("delete_op_count");
285+
SET_DATA_OP_COUNT = metricsContext.getCounter("set_data_op_count");
286+
EXISTS_OP_COUNT = metricsContext.getCounter("exists_op_count");
287+
GET_DATA_OP_COUNT = metricsContext.getCounter("get_data_op_count");
288+
GET_CHILDREN_OP_COUNT = metricsContext.getCounter("get_children_op_count");
289+
SYNC_OP_COUNT = metricsContext.getCounter("sync_op_count");
290+
GET_ACL_OP_COUNT = metricsContext.getCounter("get_acl_op_count");
291+
SET_ACL_OP_COUNT = metricsContext.getCounter("set_acl_op_count");
292+
CHECK_OP_COUNT = metricsContext.getCounter("check_op_count");
293+
SET_WATCHES_OP_COUNT = metricsContext.getCounter("set_watches_op_count");
294+
MULTI_READ_OP_COUNT = metricsContext.getCounter("multi_read_op_count");
295+
RECONFIG_OP_COUNT = metricsContext.getCounter("reconfig_op_count");
296+
ADD_WATCH_OP_COUNT = metricsContext.getCounter("add_watch_op_count");
297+
CHECK_WATCHES_OP_COUNT = metricsContext.getCounter("check_watches_op_count");
298+
REMOVE_WATCHES_OP_COUNT = metricsContext.getCounter("remove_watches_op_count");
299+
WHO_AM_I_OP_COUNT = metricsContext.getCounter("who_am_i_op_count");
300+
GET_EPHEMERALS_OP_COUNT = metricsContext.getCounter("get_ephemerals_op_count");
301+
GET_ALL_CHILDREN_NUMBER_OP_COUNT = metricsContext.getCounter("get_all_children_number_op_count");
302+
SASL_OP_COUNT = metricsContext.getCounter("sasl_op_count");
303+
AUTH_OP_COUNT = metricsContext.getCounter("auth_op_count");
274304
}
275305

276306
/**
@@ -554,6 +584,36 @@ private ServerMetrics(MetricsProvider metricsProvider) {
554584
*/
555585
public final Counter TTL_NODE_DELETED_COUNT;
556586

587+
/**
588+
* Operation count metrics
589+
*/
590+
public final Counter TOTAL_OP_COUNT;
591+
public final Counter PING_OP_COUNT;
592+
public final Counter CREATE_SESSION_OP_COUNT;
593+
public final Counter CLOSE_SESSION_OP_COUNT;
594+
public final Counter MULTI_OP_COUNT;
595+
public final Counter CREATE_OP_COUNT;
596+
public final Counter DELETE_OP_COUNT;
597+
public final Counter SET_DATA_OP_COUNT;
598+
public final Counter EXISTS_OP_COUNT;
599+
public final Counter GET_DATA_OP_COUNT;
600+
public final Counter GET_CHILDREN_OP_COUNT;
601+
public final Counter SYNC_OP_COUNT;
602+
public final Counter GET_ACL_OP_COUNT;
603+
public final Counter SET_ACL_OP_COUNT;
604+
public final Counter CHECK_OP_COUNT;
605+
public final Counter SET_WATCHES_OP_COUNT;
606+
public final Counter MULTI_READ_OP_COUNT;
607+
public final Counter RECONFIG_OP_COUNT;
608+
public final Counter ADD_WATCH_OP_COUNT;
609+
public final Counter CHECK_WATCHES_OP_COUNT;
610+
public final Counter REMOVE_WATCHES_OP_COUNT;
611+
public final Counter WHO_AM_I_OP_COUNT;
612+
public final Counter GET_EPHEMERALS_OP_COUNT;
613+
public final Counter GET_ALL_CHILDREN_NUMBER_OP_COUNT;
614+
public final Counter SASL_OP_COUNT;
615+
public final Counter AUTH_OP_COUNT;
616+
557617
private final MetricsProvider metricsProvider;
558618

559619
public void resetAll() {

zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,6 +1697,7 @@ public void processPacket(ServerCnxn cnxn, RequestHeader h, RequestRecord reques
16971697

16981698
if (h.getType() == OpCode.auth) {
16991699
LOG.info("got auth packet {}", cnxn.getRemoteSocketAddress());
1700+
ServerMetrics.getMetrics().AUTH_OP_COUNT.add(1);
17001701
AuthPacket authPacket = request.readRecord(AuthPacket::new);
17011702
String scheme = authPacket.getScheme();
17021703
ServerAuthenticationProvider ap = ProviderRegistry.getServerProvider(scheme);
@@ -1737,6 +1738,7 @@ public void processPacket(ServerCnxn cnxn, RequestHeader h, RequestRecord reques
17371738
}
17381739
return;
17391740
} else if (h.getType() == OpCode.sasl) {
1741+
ServerMetrics.getMetrics().SASL_OP_COUNT.add(1);
17401742
processSasl(request, cnxn, h);
17411743
} else {
17421744
if (!authHelper.enforceAuthentication(cnxn, h.getXid())) {

0 commit comments

Comments
 (0)