You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by lj...@apache.org on 2019/11/18 11:16:41 UTC
[incubator-ratis] branch master updated: RATIS-652. Add metrics
related to snapshot and log purge. Contributed by Aravindan Vijayan.
This is an automated email from the ASF dual-hosted git repository.
ljain 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 45e279f RATIS-652. Add metrics related to snapshot and log purge. Contributed by Aravindan Vijayan.
45e279f is described below
commit 45e279f438e81d6dbc92b55f8505b251cf7f52b4
Author: Lokesh Jain <lj...@apache.org>
AuthorDate: Mon Nov 18 16:46:21 2019 +0530
RATIS-652. Add metrics related to snapshot and log purge. Contributed by Aravindan Vijayan.
---
.../ratis/grpc/metrics/GrpcServerMetrics.java | 17 +++++++++-----
.../apache/ratis/grpc/server/GrpcLogAppender.java | 1 +
.../org/apache/ratis/server/impl/LogAppender.java | 2 ++
.../ratis/server/impl/RaftServerMetrics.java | 5 ++++
.../ratis/server/impl/StateMachineMetrics.java | 10 ++++++++
.../ratis/server/impl/StateMachineUpdater.java | 4 ++++
.../ratis/server/metrics/RaftLogMetrics.java | 6 ++++-
.../ratis/server/metrics/RatisMetricNames.java | 27 ++++++++++++++--------
.../raftlog/segmented/SegmentedRaftLogWorker.java | 4 +++-
.../ratis/statemachine/RaftSnapshotBaseTest.java | 24 +++++++++++++++++++
.../ratis/grpc/TestRaftSnapshotWithGrpc.java | 21 +++++++++++++++++
.../ratis/server/raftlog/TestRaftLogMetrics.java | 2 +-
.../raftlog/segmented/TestSegmentedRaftLog.java | 17 +++++++++++---
13 files changed, 118 insertions(+), 22 deletions(-)
diff --git a/ratis-grpc/src/main/java/org/apache/ratis/grpc/metrics/GrpcServerMetrics.java b/ratis-grpc/src/main/java/org/apache/ratis/grpc/metrics/GrpcServerMetrics.java
index fcbd053..77f4be9 100644
--- a/ratis-grpc/src/main/java/org/apache/ratis/grpc/metrics/GrpcServerMetrics.java
+++ b/ratis-grpc/src/main/java/org/apache/ratis/grpc/metrics/GrpcServerMetrics.java
@@ -34,15 +34,16 @@ public class GrpcServerMetrics {
private static final String RATIS_GRPC_METRICS_DESC = "Metrics for Ratis Grpc Log Appender";
public static final String RATIS_GRPC_METRICS_LOG_APPENDER_LATENCY =
- "grpc_log_appender_follower_%s_latency";
+ "%s_latency";
public static final String RATIS_GRPC_METRICS_LOG_APPENDER_SUCCESS =
- "grpc_log_appender_follower_%s_success_reply_count";
+ "%s_success_reply_count";
public static final String RATIS_GRPC_METRICS_LOG_APPENDER_NOT_LEADER =
- "grpc_log_appender_follower_%s_not_leader_reply_count";
+ "%s_not_leader_reply_count";
public static final String RATIS_GRPC_METRICS_LOG_APPENDER_INCONSISTENCY =
- "grpc_log_appender_follower_%s_inconsistency_reply_count";
- public static final String RATIS_GRPC_METRICS_REQUEST_RETRY_COUNT = "grpc_log_appender_num_retries";
- public static final String RATIS_GRPC_METRICS_REQUESTS_TOTAL = "grpc_log_appender_num_requests";
+ "%s_inconsistency_reply_count";
+ public static final String RATIS_GRPC_METRICS_REQUEST_RETRY_COUNT = "num_retries";
+ public static final String RATIS_GRPC_METRICS_REQUESTS_TOTAL = "num_requests";
+ public static final String RATIS_GRPC_INSTALL_SNAPSHOT_COUNT = "num_install_snapshot";
public GrpcServerMetrics(String serverId) {
MetricRegistryInfo info = new MetricRegistryInfo(serverId, RATIS_GRPC_METRICS_APP_NAME,
@@ -76,6 +77,10 @@ public class GrpcServerMetrics {
registry.counter(String.format(RATIS_GRPC_METRICS_LOG_APPENDER_INCONSISTENCY, follower)).inc();
}
+ public void onInstallSnapshot() {
+ registry.counter(RATIS_GRPC_INSTALL_SNAPSHOT_COUNT).inc();
+ }
+
@VisibleForTesting
public RatisMetricRegistry getRegistry() {
return registry;
diff --git a/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java b/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java
index 3d6581f..53578c7 100644
--- a/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java
+++ b/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcLogAppender.java
@@ -434,6 +434,7 @@ public class GrpcLogAppender extends LogAppender {
}
}
snapshotRequestObserver.onCompleted();
+ grpcServerMetrics.onInstallSnapshot();
} catch (Exception e) {
LOG.warn("{}: failed to install snapshot {}: {}", this, snapshot.getFiles(), e);
if (snapshotRequestObserver != null) {
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java
index c72c333..a57c002 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java
@@ -40,6 +40,7 @@ import java.nio.file.Path;
import java.util.*;
import static org.apache.ratis.server.impl.RaftServerConstants.DEFAULT_CALLID;
+import static org.apache.ratis.server.metrics.RatisMetricNames.LOG_APPENDER_INSTALL_SNAPSHOT_METRIC;
import static org.apache.ratis.util.LifeCycle.State.CLOSED;
import static org.apache.ratis.util.LifeCycle.State.CLOSING;
import static org.apache.ratis.util.LifeCycle.State.EXCEPTION;
@@ -427,6 +428,7 @@ public class LogAppender {
if (reply != null) {
follower.setSnapshotIndex(snapshot.getTermIndex().getIndex());
LOG.info("{}: installSnapshot {} successfully", this, snapshot);
+ server.getRaftServerMetrics().getCounter(LOG_APPENDER_INSTALL_SNAPSHOT_METRIC).inc();
}
return reply;
}
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerMetrics.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerMetrics.java
index 22020ec..c013406 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerMetrics.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerMetrics.java
@@ -33,6 +33,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
+import com.codahale.metrics.Counter;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Timer;
@@ -148,6 +149,10 @@ public final class RaftServerMetrics {
return registry.timer(timerName);
}
+ public Counter getCounter(String counterName) {
+ return registry.counter(counterName);
+ }
+
public Timer getClientRequestTimer(RaftClientRequest request) {
if (request.is(TypeCase.READ)) {
return getTimer(RAFT_CLIENT_READ_REQUEST);
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineMetrics.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineMetrics.java
index 1bde465..abeea14 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineMetrics.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineMetrics.java
@@ -18,6 +18,8 @@
package org.apache.ratis.server.impl;
+import static org.apache.ratis.server.metrics.RatisMetricNames.STATEMACHINE_TAKE_SNAPSHOT_TIMER;
+
import org.apache.ratis.metrics.RatisMetricRegistry;
import org.apache.ratis.server.metrics.RatisMetricNames;
import org.apache.ratis.server.metrics.RatisMetrics;
@@ -26,6 +28,8 @@ import org.apache.ratis.statemachine.StateMachine;
import java.util.function.LongSupplier;
+import com.codahale.metrics.Timer;
+
/**
* Metrics Registry for the State Machine Updater. One instance per group.
*/
@@ -54,4 +58,10 @@ public final class StateMachineMetrics {
registry.gauge(RatisMetricNames.STATEMACHINE_APPLY_COMPLETED_GAUGE,
() -> () -> getApplyCompleted.getAsLong());
}
+
+
+ public Timer getTakeSnapshotTimer() {
+ return registry.timer(STATEMACHINE_TAKE_SNAPSHOT_TIMER);
+ }
+
}
\ No newline at end of file
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java
index 2b49120..1f47447 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java
@@ -44,6 +44,8 @@ import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.stream.LongStream;
+import com.codahale.metrics.Timer;
+
/**
* This class tracks the log entries that have been committed in a quorum and
* applies them to the state machine. We let a separate thread do this work
@@ -251,7 +253,9 @@ class StateMachineUpdater implements Runnable {
private void takeSnapshot() {
final long i;
try {
+ Timer.Context takeSnapshotTimerContext = stateMachineMetrics.getTakeSnapshotTimer().time();
i = stateMachine.takeSnapshot();
+ takeSnapshotTimerContext.stop();
final long appliedIndex = getLastAppliedIndex();
if (i > appliedIndex) {
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetrics.java b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetrics.java
index 2066c11..a65817e 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetrics.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetrics.java
@@ -97,7 +97,7 @@ public class RaftLogMetrics {
}
public Timer getRaftLogTaskExecutionTimer(String taskName) {
- return getTimer(taskName + RAFT_LOG_TASK_EXECUTION_TIME);
+ return getTimer(String.format(RAFT_LOG_TASK_EXECUTION_TIME, taskName));
}
public Timer getRaftLogReadEntryTimer() {
@@ -108,4 +108,8 @@ public class RaftLogMetrics {
return getTimer(RAFT_LOG_LOAD_SEGMENT_LATENCY);
}
+ public Timer getRaftLogPurgeTimer() {
+ return getTimer(RAFT_LOG_PURGE_METRIC);
+ }
+
}
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 a768418..16ddf62 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
@@ -29,17 +29,20 @@ public final class RatisMetricNames {
public static final String LAST_LEADER_ELAPSED_TIME = "lastLeaderElapsedTime";
public static final String
- LEADER_METRIC_FOLLOWER_LAST_HEARTBEAT_ELAPSED_TIME_METRIC =
- "follower_%s_lastHeartbeatElapsedTime";
- public static final String LEADER_METRIC_PEER_COMMIT_INDEX =
- "%s_peerCommitIndex";
+ LEADER_METRIC_FOLLOWER_LAST_HEARTBEAT_ELAPSED_TIME_METRIC = "%s_lastHeartbeatElapsedTime";
+ public static final String LEADER_METRIC_PEER_COMMIT_INDEX = "%s_peerCommitIndex";
- public static final String STATEMACHINE_APPLIED_INDEX_GAUGE =
- "statemachineAppliedIndex";
- public static final String STATEMACHINE_APPLY_COMPLETED_GAUGE =
- "statemachineApplyCompletedIndex";
+ //////////////////////////////
+ // Raft State Machine Metrics
+ /////////////////////////////
- // Raft client read request metric timer.
+ public static final String STATEMACHINE_APPLIED_INDEX_GAUGE = "statemachineAppliedIndex";
+ public static final String STATEMACHINE_APPLY_COMPLETED_GAUGE = "statemachineApplyCompletedIndex";
+ public static final String STATEMACHINE_TAKE_SNAPSHOT_TIMER = "stateMachineTakeSnapshot";
+
+ //////////////////////////////
+ // Raft Client Metrics
+ /////////////////////////////
public static final String RAFT_CLIENT_READ_REQUEST = "clientReadRequest";
public static final String RAFT_CLIENT_STALE_READ_REQUEST = "clientStaleReadRequest";
@@ -93,11 +96,15 @@ public final class RatisMetricNames {
public static final String RAFT_LOG_TASK_ENQUEUE_DELAY = "queueingDelay";
// Time taken for a Raft log operation to complete execution.
- public static final String RAFT_LOG_TASK_EXECUTION_TIME = "ExecutionTime";
+ public static final String RAFT_LOG_TASK_EXECUTION_TIME = "%sExecutionTime";
// Number of entries appended to the raft log
public static final String RAFT_LOG_APPEND_ENTRY_COUNT = "appendEntryCount";
+ public static final String RAFT_LOG_PURGE_METRIC = "purgeLog";
+
+ public static final String LOG_APPENDER_INSTALL_SNAPSHOT_METRIC = "numInstallSnapshot";
+
//////////////////////////////
// Raft Log Read Path Metrics
/////////////////////////////
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java
index 268f6e9..1845912 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java
@@ -406,7 +406,7 @@ class SegmentedRaftLogWorker implements Runnable {
return addIOTask(new PurgeLog(ts, storage));
}
- private static final class PurgeLog extends Task {
+ private final class PurgeLog extends Task {
private final TruncationSegments segments;
private final RaftStorage storage;
@@ -418,11 +418,13 @@ class SegmentedRaftLogWorker implements Runnable {
@Override
void execute() throws IOException {
if (segments.toDelete != null) {
+ Timer.Context purgeLogContext = raftLogMetrics.getRaftLogPurgeTimer().time();
for (SegmentFileInfo fileInfo : segments.toDelete) {
File delFile = storage.getStorageDir()
.getClosedLogFile(fileInfo.startIndex, fileInfo.endIndex);
FileUtils.deleteFile(delFile);
}
+ purgeLogContext.stop();
}
}
diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
index 5dd494f..b1f7ef7 100644
--- a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
+++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
@@ -17,6 +17,9 @@
*/
package org.apache.ratis.statemachine;
+import static org.apache.ratis.server.metrics.RatisMetricNames.LOG_APPENDER_INSTALL_SNAPSHOT_METRIC;
+import static org.apache.ratis.server.metrics.RatisMetricNames.STATEMACHINE_TAKE_SNAPSHOT_TIMER;
+
import org.apache.log4j.Level;
import org.apache.ratis.BaseTest;
import org.apache.ratis.MiniRaftCluster;
@@ -24,11 +27,13 @@ import org.apache.ratis.RaftTestUtil;
import org.apache.ratis.RaftTestUtil.SimpleMessage;
import org.apache.ratis.client.RaftClient;
import org.apache.ratis.conf.RaftProperties;
+import org.apache.ratis.metrics.RatisMetricRegistry;
import org.apache.ratis.protocol.RaftClientReply;
import org.apache.ratis.protocol.RaftPeerId;
import org.apache.ratis.server.RaftServerConfigKeys;
import org.apache.ratis.server.impl.RaftServerImpl;
import org.apache.ratis.server.impl.RaftServerTestUtil;
+import org.apache.ratis.server.metrics.RatisMetrics;
import org.apache.ratis.server.raftlog.RaftLog;
import org.apache.ratis.server.storage.RaftStorageDirectory;
import org.apache.ratis.server.storage.RaftStorageDirectory.LogPathAndIndex;
@@ -50,6 +55,9 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Timer;
+
public abstract class RaftSnapshotBaseTest extends BaseTest {
{
Log4jUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
@@ -213,13 +221,29 @@ public abstract class RaftSnapshotBaseTest extends BaseTest {
// trigger setConfiguration
cluster.setConfiguration(change.allPeersInNewConf);
+ // Verify installSnapshot counter on leader before restart.
+ verifyInstallSnapshotMetric(cluster.getLeader());
RaftServerTestUtil.waitAndCheckNewConf(cluster, change.allPeersInNewConf, 0, null);
// restart the peer and check if it can correctly handle conf change
cluster.restartServer(cluster.getLeader().getId(), false);
assertLeaderContent(cluster);
+ verifyTakeSnapshotMetric(cluster.getLeader());
} finally {
cluster.shutdown();
}
}
+
+ protected void verifyInstallSnapshotMetric(RaftServerImpl leader) {
+ Counter installSnapshotCounter = leader.getRaftServerMetrics().getCounter(LOG_APPENDER_INSTALL_SNAPSHOT_METRIC);
+ Assert.assertNotNull(installSnapshotCounter);
+ Assert.assertTrue(installSnapshotCounter.getCount() >= 1);
+ }
+
+ private static void verifyTakeSnapshotMetric(RaftServerImpl leader) {
+ RatisMetricRegistry metricRegistry = RatisMetrics.getMetricRegistryForStateMachine(leader.getMemberId().toString());
+ Assert.assertNotNull(metricRegistry);
+ Timer timer = metricRegistry.timer(STATEMACHINE_TAKE_SNAPSHOT_TIMER);
+ Assert.assertTrue(timer.getCount() > 0);
+ }
}
diff --git a/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftSnapshotWithGrpc.java b/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftSnapshotWithGrpc.java
index a960478..c5ae2ee 100644
--- a/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftSnapshotWithGrpc.java
+++ b/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftSnapshotWithGrpc.java
@@ -17,12 +17,33 @@
*/
package org.apache.ratis.grpc;
+import java.util.Optional;
+
import org.apache.ratis.MiniRaftCluster;
+import org.apache.ratis.metrics.MetricRegistries;
+import org.apache.ratis.metrics.MetricRegistryInfo;
+import org.apache.ratis.metrics.RatisMetricRegistry;
+import org.apache.ratis.server.impl.RaftServerImpl;
import org.apache.ratis.statemachine.RaftSnapshotBaseTest;
+import org.junit.Assert;
+
+import com.codahale.metrics.Counter;
public class TestRaftSnapshotWithGrpc extends RaftSnapshotBaseTest {
@Override
public MiniRaftCluster.Factory<?> getFactory() {
return MiniRaftClusterWithGrpc.FACTORY;
}
+
+ @Override
+ protected void verifyInstallSnapshotMetric(RaftServerImpl leader) {
+ MetricRegistryInfo info = new MetricRegistryInfo(leader.getMemberId().toString(),
+ "ratis_grpc", "log_appender", "Metrics for Ratis Grpc Log Appender");
+ Optional<RatisMetricRegistry> metricRegistry = MetricRegistries.global().get(info);
+ Assert.assertTrue(metricRegistry.isPresent());
+ Counter installSnapshotCounter = metricRegistry.get().counter("num_install_snapshot");
+ Assert.assertNotNull(installSnapshotCounter);
+ Assert.assertTrue(installSnapshotCounter.getCount() >= 1);
+ }
+
}
diff --git a/ratis-test/src/test/java/org/apache/ratis/server/raftlog/TestRaftLogMetrics.java b/ratis-test/src/test/java/org/apache/ratis/server/raftlog/TestRaftLogMetrics.java
index 407d963..510c1ab 100644
--- a/ratis-test/src/test/java/org/apache/ratis/server/raftlog/TestRaftLogMetrics.java
+++ b/ratis-test/src/test/java/org/apache/ratis/server/raftlog/TestRaftLogMetrics.java
@@ -161,7 +161,7 @@ public class TestRaftLogMetrics extends BaseTest
Timer queueingDelayTimer = ratisMetricRegistry.timer(RAFT_LOG_TASK_ENQUEUE_DELAY);
Assert.assertTrue(queueingDelayTimer.getMeanRate() > 0);
- Timer executionTimer = ratisMetricRegistry.timer("writelog" + RAFT_LOG_TASK_EXECUTION_TIME);
+ Timer executionTimer = ratisMetricRegistry.timer(String.format(RAFT_LOG_TASK_EXECUTION_TIME, "writelog"));
Assert.assertTrue(executionTimer.getMeanRate() > 0);
Assert.assertNotNull(ratisMetricRegistry.get(RAFT_LOG_DATA_QUEUE_SIZE));
diff --git a/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLog.java b/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLog.java
index 3764adf..9bc27ff 100644
--- a/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLog.java
+++ b/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLog.java
@@ -32,7 +32,6 @@ import org.apache.ratis.server.impl.RetryCacheTestUtil;
import org.apache.ratis.server.impl.RetryCache;
import org.apache.ratis.server.impl.RaftServerImpl;
import org.apache.ratis.server.impl.ServerProtoUtils;
-import org.apache.ratis.server.metrics.RatisMetrics;
import org.apache.ratis.server.protocol.TermIndex;
import org.apache.ratis.proto.RaftProtos.LogEntryProto;
import org.apache.ratis.server.raftlog.RaftLog;
@@ -63,6 +62,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
+import static org.apache.ratis.server.metrics.RatisMetrics.getMetricRegistryForLogWorker;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doNothing;
@@ -198,8 +198,7 @@ public class TestSegmentedRaftLog extends BaseTest {
Assert.assertArrayEquals(entries, entriesFromLog);
Assert.assertEquals(entries[entries.length - 1], getLastEntry(raftLog));
- RatisMetricRegistry metricRegistryForLogWorker =
- RatisMetrics.getMetricRegistryForLogWorker(memberId.getPeerId().toString());
+ RatisMetricRegistry metricRegistryForLogWorker = getMetricRegistryForLogWorker(memberId.getPeerId().toString());
Timer raftLogSegmentLoadLatencyTimer = metricRegistryForLogWorker.timer("segmentLoadLatency");
Assert.assertTrue(raftLogSegmentLoadLatencyTimer.getMeanRate() > 0);
@@ -402,6 +401,18 @@ public class TestSegmentedRaftLog extends BaseTest {
}
@Test
+ public void testPurgeLogMetric() throws Exception {
+ int startTerm = 0;
+ int endTerm = 5;
+ int segmentSize = 200;
+ long endIndexOfClosedSegment = segmentSize * (endTerm - startTerm - 1) - 1;
+ long expectedIndex = segmentSize * (endTerm - startTerm - 2);
+ purgeAndVerify(startTerm, endTerm, segmentSize, 1, endIndexOfClosedSegment, expectedIndex);
+ RatisMetricRegistry metricRegistryForLogWorker = getMetricRegistryForLogWorker(memberId.getPeerId().toString());
+ Assert.assertTrue(metricRegistryForLogWorker.timer("purgeLog").getCount() > 0);
+ }
+
+ @Test
public void testPurgeOnClosedSegmentsWithPurgeGap() throws Exception {
int startTerm = 0;
int endTerm = 5;