You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ha...@apache.org on 2020/10/01 04:35:42 UTC
[zookeeper] branch master updated: ZOOKEEPER-3858: Add metrics to
track server unavailable time
This is an automated email from the ASF dual-hosted git repository.
hanm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/master by this push:
new e4c175f ZOOKEEPER-3858: Add metrics to track server unavailable time
e4c175f is described below
commit e4c175fba845d7b765afc0d36db2f5b7145dec5e
Author: Jie Huang <ji...@fb.com>
AuthorDate: Wed Sep 30 21:35:30 2020 -0700
ZOOKEEPER-3858: Add metrics to track server unavailable time
Author: Jie Huang <ji...@fb.com>
Reviewers: Michael Han <ha...@apache.org>
Closes #1378 from jhuan31/ZOOKEEPER-3858
---
.../java/org/apache/zookeeper/server/ServerMetrics.java | 6 ++++++
.../org/apache/zookeeper/server/quorum/QuorumPeer.java | 14 ++++++++++++++
2 files changed, 20 insertions(+)
diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java
index e95949a..99e9206 100644
--- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java
+++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java
@@ -134,6 +134,9 @@ public final class ServerMetrics {
SESSIONLESS_CONNECTIONS_EXPIRED = metricsContext.getCounter("sessionless_connections_expired");
STALE_SESSIONS_EXPIRED = metricsContext.getCounter("stale_sessions_expired");
+ UNAVAILABLE_TIME = metricsContext.getSummary("unavailable_time", DetailLevel.BASIC);
+ LEADER_UNAVAILABLE_TIME = metricsContext.getSummary("leader_unavailable_time", DetailLevel.BASIC);
+
/*
* Number of requests that are in the session queue.
*/
@@ -310,6 +313,9 @@ public final class ServerMetrics {
public final Counter SESSIONLESS_CONNECTIONS_EXPIRED;
public final Counter STALE_SESSIONS_EXPIRED;
+ public final Summary UNAVAILABLE_TIME;
+ public final Summary LEADER_UNAVAILABLE_TIME;
+
// Connection throttling related
public final Summary CONNECTION_TOKEN_DEFICIT;
public final Counter CONNECTION_REJECTED;
diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
index c0a3dec..e56c03d 100644
--- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
+++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
@@ -54,6 +54,7 @@ import org.apache.zookeeper.KeeperException.BadArgumentsException;
import org.apache.zookeeper.common.AtomicFileWritingIdiom;
import org.apache.zookeeper.common.AtomicFileWritingIdiom.WriterStatement;
import org.apache.zookeeper.common.QuorumX509Util;
+import org.apache.zookeeper.common.Time;
import org.apache.zookeeper.common.X509Exception;
import org.apache.zookeeper.jmx.MBeanRegistry;
import org.apache.zookeeper.jmx.ZKMBeanInfo;
@@ -530,6 +531,7 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider
*/
public long start_fle, end_fle; // fle = fast leader election
public static final String FLE_TIME_UNIT = "MS";
+ private long unavailableStartTime;
/*
* Default value of peer is participant
@@ -859,6 +861,14 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider
}
public void setZabState(ZabState zabState) {
+ if ((zabState == ZabState.BROADCAST) && (unavailableStartTime != 0)) {
+ long unavailableTime = Time.currentElapsedTime() - unavailableStartTime;
+ ServerMetrics.getMetrics().UNAVAILABLE_TIME.add(unavailableTime);
+ if (getPeerState() == ServerState.LEADING) {
+ ServerMetrics.getMetrics().LEADER_UNAVAILABLE_TIME.add(unavailableTime);
+ }
+ unavailableStartTime = 0;
+ }
this.zabState.set(zabState);
LOG.info("Peer state changed: {}", getDetailedPeerState());
}
@@ -1369,6 +1379,10 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider
* Main loop
*/
while (running) {
+ if (unavailableStartTime == 0) {
+ unavailableStartTime = Time.currentElapsedTime();
+ }
+
switch (getPeerState()) {
case LOOKING:
LOG.info("LOOKING");