From f6b57f65c86a37dccfce44991897eb17329a5805 Mon Sep 17 00:00:00 2001 From: maoling Date: Tue, 8 Oct 2019 15:55:44 +0800 Subject: [PATCH] ZOOKEEPER-3502:improve the server command: zabstate to have a better observation on the process of leader election --- .../zookeeper/server/admin/Commands.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java index 36529f797a0..d4de57af339 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java @@ -47,6 +47,7 @@ import org.apache.zookeeper.server.quorum.QuorumZooKeeperServer; import org.apache.zookeeper.server.quorum.ReadOnlyZooKeeperServer; import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier; +import org.apache.zookeeper.server.util.ZxidUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -796,10 +797,21 @@ public CommandResponse run(ZooKeeperServer zkServer, Map kwargs) QuorumVerifier qv = peer.getQuorumVerifier(); QuorumPeer.QuorumServer voter = qv.getVotingMembers().get(peer.getId()); - boolean voting = (voter != null - && voter.addr.equals(peer.getQuorumAddress()) - && voter.electionAddr.equals(peer.getElectionAddress())); + boolean voting = ( + voter != null + && voter.addr.equals(peer.getQuorumAddress()) + && voter.electionAddr.equals(peer.getElectionAddress()) + ); + response.put("myid", zkServer.getConf().getServerId()); + response.put("is_leader", zkServer instanceof LeaderZooKeeperServer); + response.put("quorum_address", peer.getQuorumAddress()); + response.put("election_address", peer.getElectionAddress()); + response.put("client_address", peer.getClientAddress()); response.put("voting", voting); + long lastProcessedZxid = zkServer.getZKDatabase().getDataTreeLastProcessedZxid(); + response.put("last_zxid", "0x" + ZxidUtils.zxidToString(lastProcessedZxid)); + response.put("zab_epoch", ZxidUtils.getEpochFromZxid(lastProcessedZxid)); + response.put("zab_counter", ZxidUtils.getCounterFromZxid(lastProcessedZxid)); response.put("zabstate", zabState.name().toLowerCase()); } else { response.put("voting", false);