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) ->