This is an automated email from the ASF dual-hosted git repository.

shashikant pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new ef12b1f  RATIS-676. Add a metric in RaftServer to track the Log Commit 
Index. Contributed by Aravindan Vijayan.
ef12b1f is described below

commit ef12b1f2125bae534e07899395c8f14e94a648b5
Author: Shashikant Banerjee <[email protected]>
AuthorDate: Fri Oct 18 15:58:02 2019 +0530

    RATIS-676. Add a metric in RaftServer to track the Log Commit Index. 
Contributed by Aravindan Vijayan.
---
 .../apache/ratis/server/impl/FollowerState.java    |  3 +++
 .../org/apache/ratis/server/impl/LeaderState.java  | 16 ++++-----------
 ...ftLeaderMetrics.java => RaftServerMetrics.java} | 24 +++++++++++-----------
 .../ratis/server/metrics/RatisMetricNames.java     |  4 ++--
 .../apache/ratis/server/metrics/RatisMetrics.java  | 14 ++++++-------
 .../java/org/apache/ratis/LogAppenderTests.java    |  4 ++--
 .../test/java/org/apache/ratis/RaftBasicTests.java | 13 ++++++------
 .../ratis/TestRaftServerSlownessDetection.java     |  2 +-
 8 files changed, 37 insertions(+), 43 deletions(-)

diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/FollowerState.java 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/FollowerState.java
index d82af65..5f5bddb 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/FollowerState.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/FollowerState.java
@@ -57,10 +57,13 @@ class FollowerState extends Daemon {
   private volatile Timestamp lastRpcTime = Timestamp.currentTime();
   private volatile boolean isRunning = true;
   private final AtomicInteger outstandingOp = new AtomicInteger();
+  private final RaftServerMetrics raftServerMetrics;
 
   FollowerState(RaftServerImpl server) {
     this.name = server.getMemberId() + "-" + getClass().getSimpleName();
     this.server = server;
+    raftServerMetrics = RaftServerMetrics.getRaftServerMetrics(server);
+    raftServerMetrics.addPeerCommitIndexGauge(server.getPeer());
   }
 
   void updateLastRpcTime(UpdateType type) {
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java
index 67a3120..5886124 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java
@@ -200,7 +200,7 @@ public class LeaderState {
   private final int stagingCatchupGap;
   private final TimeDuration syncInterval;
   private final long placeHolderIndex;
-  private final RaftLeaderMetrics raftLeaderMetrics;
+  private final RaftServerMetrics raftServerMetrics;
 
   LeaderState(RaftServerImpl server, RaftProperties properties) {
     this.name = server.getMemberId() + "-" + getClass().getSimpleName();
@@ -223,7 +223,7 @@ public class LeaderState {
     placeHolderIndex = raftLog.getNextIndex();
 
     senders = new SenderList();
-    raftLeaderMetrics = RaftLeaderMetrics.getRaftLeaderMetrics(server);
+    raftServerMetrics = RaftServerMetrics.getRaftServerMetrics(server);
     addSenders(others, placeHolderIndex, true);
     voterLists = divideFollowers(conf);
   }
@@ -389,7 +389,7 @@ public class LeaderState {
     final List<LogAppender> newAppenders = newPeers.stream()
         .map(peer -> {
           LogAppender logAppender = server.newLogAppender(this, peer, t, 
nextIndex, attendVote);
-          raftLeaderMetrics
+          raftServerMetrics
               .addFollower(logAppender.getFollower().getPeer());
           return logAppender;
         }).collect(Collectors.toList());
@@ -798,18 +798,10 @@ public class LeaderState {
    * @param elapsedTime Elapsed time in Nanos.
    */
   void recordFollowerHeartbeatElapsedTime(RaftPeer follower, long elapsedTime) 
{
-    raftLeaderMetrics.recordFollowerHeartbeatElapsedTime(follower,
+    raftServerMetrics.recordFollowerHeartbeatElapsedTime(follower,
         elapsedTime);
   }
 
-  /**
-   * Return the metric registry for the Group Leader.
-   * @return the group leader metrics registry
-   */
-  RaftLeaderMetrics getRaftLeaderMetrics() {
-    return raftLeaderMetrics;
-  }
-
   @Override
   public String toString() {
     return name;
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftLeaderMetrics.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerMetrics.java
similarity index 86%
rename from 
ratis-server/src/main/java/org/apache/ratis/server/impl/RaftLeaderMetrics.java
rename to 
ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerMetrics.java
index 245aa39..df43990 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftLeaderMetrics.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerMetrics.java
@@ -35,26 +35,26 @@ import 
org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesti
 import org.apache.ratis.util.Preconditions;
 
 /**
- * Metric Registry for Raft Group Leader. One instance per leader.
+ * Metric Registry for Raft Group Server. One instance per leader/follower.
  */
-public final class RaftLeaderMetrics {
+public final class RaftServerMetrics {
 
   private RatisMetricRegistry registry = null;
   private Map<String, Long> followerLastHeartbeatElapsedTimeMap = new 
HashMap<>();
   private CommitInfoCache commitInfoCache;
 
-  private static Map<String, RaftLeaderMetrics> metricsMap = new HashMap<>();
+  private static Map<String, RaftServerMetrics> metricsMap = new HashMap<>();
 
-  public static RaftLeaderMetrics getRaftLeaderMetrics(
+  public static RaftServerMetrics getRaftServerMetrics(
       RaftServerImpl raftServer) {
-    RaftLeaderMetrics leaderMetrics = new RaftLeaderMetrics(raftServer);
-    metricsMap.put(raftServer.getMemberId().toString(), leaderMetrics);
+    RaftServerMetrics serverMetrics = new RaftServerMetrics(raftServer);
+    metricsMap.put(raftServer.getMemberId().toString(), serverMetrics);
 
-    return leaderMetrics;
+    return serverMetrics;
   }
 
-  private RaftLeaderMetrics(RaftServerImpl server) {
-    registry = RatisMetrics.getMetricRegistryForRaftLeader(
+  private RaftServerMetrics(RaftServerImpl server) {
+    registry = RatisMetrics.getMetricRegistryForRaftServer(
         server.getMemberId().toString());
     commitInfoCache = server.getCommitInfoCache();
     addPeerCommitIndexGauge(server.getPeer());
@@ -103,9 +103,9 @@ public final class RaftLeaderMetrics {
   public static Gauge getPeerCommitIndexGauge(RaftServerImpl server,
       RaftServerImpl peerServer) {
 
-    RaftLeaderMetrics leaderMetrics =
+    RaftServerMetrics serverMetrics =
         metricsMap.get(server.getMemberId().toString());
-    if (leaderMetrics == null) {
+    if (serverMetrics == null) {
       return null;
     }
 
@@ -114,7 +114,7 @@ public final class RaftLeaderMetrics {
         peerServer.getPeer().getId().toString());
 
     SortedMap<String, Gauge> map =
-        leaderMetrics.registry.getGauges((s, metric) ->
+        serverMetrics.registry.getGauges((s, metric) ->
             s.contains(followerCommitIndexKey));
 
     Preconditions.assertTrue(map.size() <= 1);
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetricNames.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetricNames.java
index 57f7d9a..c20b1c0 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetricNames.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetricNames.java
@@ -35,9 +35,9 @@ public final class RatisMetricNames {
       "%s_peerCommitIndex";
 
   public static final String STATEMACHINE_APPLIED_INDEX_GAUGE =
-      "statemachine_applied_index";
+      "statemachineAppliedIndex";
   public static final String STATEMACHINE_APPLY_COMPLETED_GAUGE =
-      "statemachine_apply_completed_index";
+      "statemachineApplyCompletedIndex";
 
   //////////////////////////////
   // Raft Log Write Path Metrics
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetrics.java 
b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetrics.java
index e2dc55f..8714260 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetrics.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RatisMetrics.java
@@ -25,14 +25,12 @@ import org.apache.ratis.metrics.MetricRegistryInfo;
 import org.apache.ratis.metrics.RatisMetricRegistry;
 
 public class RatisMetrics {
-  public static final String RATIS_LOG_WORKER_METRICS_DESC = "Ratis metrics";
-  public static final String RATIS_LOG_WORKER_METRICS = "ratis_log_worker";
   public static final String RATIS_APPLICATION_NAME_METRICS = "ratis_core";
+  public static final String RATIS_LOG_WORKER_METRICS_DESC = "Metrics for Log 
Worker";
+  public static final String RATIS_LOG_WORKER_METRICS = "log_worker";
   public static final String RATIS_LEADER_ELECTION_METRICS = "leader_election";
   public static final String RATIS_LEADER_ELECTION_METRICS_DESC = "Metrics for 
Ratis Leader Election.";
-  public static final String RATIS_LEADER_METRICS = "ratis_leader";
-  public static final String RATIS_LEADER_METRICS_DESC = "Metrics for Ratis 
Leader.";
-  public static final String RATIS_STATEMACHINE_METRICS = 
"ratis_state_machine";
+  public static final String RATIS_STATEMACHINE_METRICS = "state_machine";
   public static final String RATIS_STATEMACHINE_METRICS_DESC = "Metrics for 
State Machine Updater";
   public static final String RATIS_SERVER_METRICS = "server";
   public static final String RATIS_SERVER_METRICS_DESC = "Metrics for Raft 
server";
@@ -51,10 +49,10 @@ public class RatisMetrics {
         RATIS_LEADER_ELECTION_METRICS_DESC));
   }
 
-  public static RatisMetricRegistry getMetricRegistryForRaftLeader(String 
serverId) {
+  public static RatisMetricRegistry getMetricRegistryForRaftServer(String 
serverId) {
     return create(new MetricRegistryInfo(serverId,
-        RATIS_APPLICATION_NAME_METRICS, RATIS_LEADER_METRICS,
-        RATIS_LEADER_METRICS_DESC));
+        RATIS_APPLICATION_NAME_METRICS, RATIS_SERVER_METRICS,
+        RATIS_SERVER_METRICS_DESC));
   }
 
   public static RatisMetricRegistry getMetricRegistryForStateMachine(String 
serverId) {
diff --git a/ratis-server/src/test/java/org/apache/ratis/LogAppenderTests.java 
b/ratis-server/src/test/java/org/apache/ratis/LogAppenderTests.java
index 7bd7ae7..40f8dc0 100644
--- a/ratis-server/src/test/java/org/apache/ratis/LogAppenderTests.java
+++ b/ratis-server/src/test/java/org/apache/ratis/LogAppenderTests.java
@@ -142,7 +142,7 @@ public abstract class LogAppenderTests<CLUSTER extends 
MiniRaftCluster>
     }
 
     RatisMetricRegistry ratisMetricRegistry =
-        RatisMetrics.getMetricRegistryForRaftLeader(
+        RatisMetrics.getMetricRegistryForRaftServer(
             leaderServer.getMemberId().toString());
 
     // Get all last_heartbeat_elapsed_time metric gauges. Should be equal to 
number of followers.
@@ -160,7 +160,7 @@ public abstract class LogAppenderTests<CLUSTER extends 
MiniRaftCluster>
       assertTrue((long)metric.getValue() > 0);
       // Try to get Heartbeat metrics for follower.
       RatisMetricRegistry followerMetricsRegistry =
-          RatisMetrics.getMetricRegistryForRaftLeader(
+          RatisMetrics.getMetricRegistryForRaftServer(
               followerServer.getMemberId().toString());
       // Metric should not exist. It only exists in leader.
       assertTrue(followerMetricsRegistry.getGauges((s, m) -> 
s.contains("last_heartbeat_elapsed_time")).isEmpty());
diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java 
b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
index 316634d..a3cab64 100644
--- a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
+++ b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
@@ -475,18 +475,19 @@ public abstract class RaftBasicTests<CLUSTER extends 
MiniRaftCluster>
     List<RaftServerImpl> followers = cluster.getFollowers();
     RaftServerImpl leader = cluster.getLeader();
 
-    RatisMetricRegistry leaderMetricsRegistry =
-        RatisMetrics.getMetricRegistryForRaftLeader(
-            leader.getMemberId().toString());
-
-    Gauge leaderCommitGauge = RaftLeaderMetrics
+    Gauge leaderCommitGauge = RaftServerMetrics
         .getPeerCommitIndexGauge(leader, leader);
 
     for (RaftServerImpl follower : followers) {
-      Gauge followerCommitGauge = RaftLeaderMetrics
+      Gauge followerCommitGauge = RaftServerMetrics
           .getPeerCommitIndexGauge(leader, follower);
       Assert.assertTrue((Long)leaderCommitGauge.getValue() >=
           (Long)followerCommitGauge.getValue());
+      Gauge followerMetric = RaftServerMetrics
+          .getPeerCommitIndexGauge(follower, follower);
+      System.out.println(followerCommitGauge.getValue());
+      System.out.println(followerMetric.getValue());
+      Assert.assertTrue((Long)followerCommitGauge.getValue()  <= 
(Long)followerMetric.getValue());
     }
   }
 
diff --git 
a/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java
 
b/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java
index 1f0586c..f31a3af 100644
--- 
a/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java
+++ 
b/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java
@@ -90,7 +90,7 @@ public class TestRaftServerSlownessDetection extends BaseTest 
{
     RaftServerImpl failedFollower = cluster.getFollowers().get(0);
 
     RatisMetricRegistry ratisMetricRegistry =
-        RatisMetrics.getMetricRegistryForRaftLeader(
+        RatisMetrics.getMetricRegistryForRaftServer(
             leaderServer.getMemberId().toString());
     SortedMap<String, Gauge> heartbeatElapsedTimeGauges =
         ratisMetricRegistry.getGauges((s, metric) ->

Reply via email to