From c049467a7046af2eff32b36800648c04fd141430 Mon Sep 17 00:00:00 2001 From: Tsz-Wo Nicholas Sze Date: Fri, 26 Aug 2022 10:13:02 -0700 Subject: [PATCH] RATIS-1689. Remove the use of the thirdparty Gauge. --- .../ratis/grpc/metrics/GrpcServerMetrics.java | 12 +--- .../grpc/server/TestGrpcServerMetrics.java | 23 +++----- .../ratis/metrics/MetricRegistryInfo.java | 5 +- .../ratis/metrics/MetricsReporting.java | 8 +-- .../ratis/metrics/RatisMetricRegistry.java | 19 ++++--- .../metrics/impl/RatisMetricRegistryImpl.java | 33 ++++++++--- .../server/impl/StateMachineMetrics.java | 6 +- .../server/metrics/RaftLogMetricsBase.java | 2 +- .../server/metrics/RaftServerMetricsImpl.java | 30 ++-------- .../metrics/SegmentedRaftLogMetrics.java | 36 +++++------- .../segmented/SegmentedRaftLogCache.java | 12 ++-- .../segmented/SegmentedRaftLogWorker.java | 10 ++-- .../org/apache/ratis/LogAppenderTests.java | 9 +-- .../java/org/apache/ratis/RaftBasicTests.java | 16 ++---- .../server/impl/LeaderElectionTests.java | 6 +- .../server/impl/TestLogAppenderMetrics.java | 6 +- .../server/impl/TestRetryCacheMetrics.java | 6 +- .../metrics/ServerMetricsTestUtils.java | 55 +++++++++++++++++++ .../metrics/TestLeaderElectionMetrics.java | 6 +- .../TestRaftServerSlownessDetection.java | 7 +-- .../ratis/grpc/TestRaftServerWithGrpc.java | 8 --- .../segmented/TestSegmentedRaftLogCache.java | 6 +- 22 files changed, 167 insertions(+), 154 deletions(-) create mode 100644 ratis-server/src/test/java/org/apache/ratis/server/metrics/ServerMetricsTestUtils.java 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 0bc400d6bc..dcc2d309f4 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 @@ -17,14 +17,14 @@ */ package org.apache.ratis.grpc.metrics; -import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; import org.apache.ratis.metrics.MetricRegistryInfo; import org.apache.ratis.metrics.RatisMetricRegistry; import org.apache.ratis.metrics.RatisMetrics; -import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting; import org.apache.ratis.thirdparty.com.codahale.metrics.Timer; +import java.util.function.Supplier; + public class GrpcServerMetrics extends RatisMetrics { private static final String RATIS_GRPC_METRICS_APP_NAME = "ratis_grpc"; private static final String RATIS_GRPC_METRICS_COMP_NAME = "log_appender"; @@ -89,8 +89,7 @@ public void onRequestTimeout(String follower, boolean isHeartbeat) { follower)).inc(); } - public void addPendingRequestsCount(String follower, - Gauge pendinglogQueueSize) { + public void addPendingRequestsCount(String follower, Supplier pendinglogQueueSize) { registry.gauge(String.format(RATIS_GRPC_METRICS_LOG_APPENDER_PENDING_COUNT, follower), () -> pendinglogQueueSize); } @@ -101,9 +100,4 @@ public void onInstallSnapshot() { public static String getHeartbeatSuffix(boolean heartbeat) { return heartbeat ? "_heartbeat" : ""; } - - @VisibleForTesting - public RatisMetricRegistry getRegistry() { - return registry; - } } diff --git a/ratis-grpc/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java b/ratis-grpc/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java index 252a0dc2e0..7cd10bc5d5 100644 --- a/ratis-grpc/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java +++ b/ratis-grpc/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java @@ -27,16 +27,16 @@ import static org.apache.ratis.grpc.metrics.GrpcServerMetrics.RATIS_GRPC_METRICS_REQUEST_RETRY_COUNT; import static org.mockito.Mockito.when; -import java.util.SortedMap; import java.util.function.Consumer; -import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; +import org.apache.ratis.server.metrics.ServerMetricsTestUtils; import org.apache.ratis.grpc.metrics.GrpcServerMetrics; import org.apache.ratis.metrics.RatisMetricRegistry; import org.apache.ratis.proto.RaftProtos; import org.apache.ratis.protocol.RaftGroupId; import org.apache.ratis.protocol.RaftGroupMemberId; import org.apache.ratis.protocol.RaftPeerId; +import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -109,21 +109,12 @@ public void testGrpcLogPendingRequestCount() { GrpcLogAppender.RequestMap pendingRequest = Mockito.mock(GrpcLogAppender.RequestMap.class); when(pendingRequest.logRequestsSize()).thenReturn(0); grpcServerMetrics.addPendingRequestsCount(raftPeerId.toString(), - () -> pendingRequest.logRequestsSize()); - Assert.assertEquals(0, getGuageWithName( - String.format(RATIS_GRPC_METRICS_LOG_APPENDER_PENDING_COUNT, - raftPeerId.toString())).getValue()); + pendingRequest::logRequestsSize); + final String name = String.format(RATIS_GRPC_METRICS_LOG_APPENDER_PENDING_COUNT, raftPeerId); + final Gauge gauge = ServerMetricsTestUtils.getGaugeWithName(name, grpcServerMetrics::getRegistry); + Assert.assertEquals(0, gauge.getValue()); when(pendingRequest.logRequestsSize()).thenReturn(10); - Assert.assertEquals(10, getGuageWithName( - String.format(RATIS_GRPC_METRICS_LOG_APPENDER_PENDING_COUNT, - raftPeerId.toString())).getValue()); - } - - private Gauge getGuageWithName(String gaugeName) { - SortedMap gaugeMap = - grpcServerMetrics.getRegistry().getGauges((s, metric) -> - s.contains(gaugeName)); - return gaugeMap.get(gaugeMap.firstKey()); + Assert.assertEquals(10, gauge.getValue()); } @Test diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java b/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java index 5563b96d11..70efac6272 100644 --- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java +++ b/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -18,11 +18,10 @@ package org.apache.ratis.metrics; +import org.apache.ratis.thirdparty.com.codahale.metrics.MetricRegistry; import java.util.Objects; -import org.apache.ratis.thirdparty.com.codahale.metrics.*; - /** * * This class holds the name and description and JMX related context names for such group of diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricsReporting.java b/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricsReporting.java index df51420f07..efaa1a45d8 100644 --- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricsReporting.java +++ b/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricsReporting.java @@ -17,15 +17,15 @@ */ package org.apache.ratis.metrics; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; - -import org.apache.ratis.thirdparty.com.codahale.metrics.*; +import org.apache.ratis.thirdparty.com.codahale.metrics.ConsoleReporter; import org.apache.ratis.thirdparty.com.codahale.metrics.jmx.JmxReporter; import org.apache.ratis.util.TimeDuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; + public final class MetricsReporting { public static final Logger LOG = LoggerFactory.getLogger(MetricsReporting.class); diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java b/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java index 388f9f4e03..2d0887e340 100644 --- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java +++ b/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -17,12 +17,19 @@ */ package org.apache.ratis.metrics; -import java.util.SortedMap; - -import org.apache.ratis.thirdparty.com.codahale.metrics.*; +import org.apache.ratis.thirdparty.com.codahale.metrics.ConsoleReporter; +import org.apache.ratis.thirdparty.com.codahale.metrics.Counter; +import org.apache.ratis.thirdparty.com.codahale.metrics.Histogram; +import org.apache.ratis.thirdparty.com.codahale.metrics.Meter; +import org.apache.ratis.thirdparty.com.codahale.metrics.Metric; +import org.apache.ratis.thirdparty.com.codahale.metrics.MetricRegistry; +import org.apache.ratis.thirdparty.com.codahale.metrics.MetricSet; +import org.apache.ratis.thirdparty.com.codahale.metrics.Timer; import org.apache.ratis.thirdparty.com.codahale.metrics.jmx.JmxReporter; import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting; +import java.util.function.Supplier; + public interface RatisMetricRegistry { Timer timer(String name); @@ -30,12 +37,10 @@ public interface RatisMetricRegistry { boolean remove(String name); - Gauge gauge(String name, MetricRegistry.MetricSupplier supplier); + void gauge(String name, Supplier> gaugeSupplier); Timer timer(String name, MetricRegistry.MetricSupplier supplier); - SortedMap getGauges(MetricFilter filter); - Counter counter(String name, MetricRegistry.MetricSupplier supplier); Histogram histogram(String name); diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java b/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java index 1b33efb8d6..9b780d5976 100644 --- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java +++ b/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -17,20 +17,30 @@ */ package org.apache.ratis.metrics.impl; -import java.util.Map; -import java.util.SortedMap; - -import org.apache.ratis.thirdparty.com.codahale.metrics.*; import org.apache.ratis.metrics.MetricRegistryInfo; import org.apache.ratis.metrics.RatisMetricRegistry; +import org.apache.ratis.thirdparty.com.codahale.metrics.ConsoleReporter; +import org.apache.ratis.thirdparty.com.codahale.metrics.Counter; +import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; +import org.apache.ratis.thirdparty.com.codahale.metrics.Histogram; +import org.apache.ratis.thirdparty.com.codahale.metrics.Meter; +import org.apache.ratis.thirdparty.com.codahale.metrics.Metric; +import org.apache.ratis.thirdparty.com.codahale.metrics.MetricFilter; +import org.apache.ratis.thirdparty.com.codahale.metrics.MetricRegistry; +import org.apache.ratis.thirdparty.com.codahale.metrics.MetricSet; +import org.apache.ratis.thirdparty.com.codahale.metrics.Timer; import org.apache.ratis.thirdparty.com.codahale.metrics.jmx.JmxReporter; import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting; +import java.util.Map; +import java.util.SortedMap; +import java.util.function.Supplier; + /** * Custom implementation of {@link MetricRegistry}. */ public class RatisMetricRegistryImpl implements RatisMetricRegistry { - private MetricRegistry metricRegistry = new MetricRegistry(); + private final MetricRegistry metricRegistry = new MetricRegistry(); private final MetricRegistryInfo info; @@ -57,15 +67,20 @@ public boolean remove(String name) { return metricRegistry.remove(getMetricName(name)); } - @Override public Gauge gauge(String name, MetricRegistry.MetricSupplier supplier) { - return metricRegistry.gauge(getMetricName(name), supplier); + static Gauge toGauge(Supplier supplier) { + return supplier::get; + } + + @Override + public void gauge(String name, Supplier> gaugeSupplier) { + metricRegistry.gauge(getMetricName(name), () -> toGauge(gaugeSupplier.get())); } @Override public Timer timer(String name, MetricRegistry.MetricSupplier supplier) { return metricRegistry.timer(getMetricName(name), supplier); } - @Override public SortedMap getGauges(MetricFilter filter) { + public SortedMap getGauges(MetricFilter filter) { return metricRegistry.getGauges(filter); } 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 3466f3f67b..596cdaf5ac 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 @@ -56,10 +56,8 @@ public static StateMachineMetrics getStateMachineMetrics( private StateMachineMetrics(String serverId, LongSupplier getApplied, LongSupplier getApplyCompleted) { registry = getMetricRegistryForStateMachine(serverId); - registry.gauge(STATEMACHINE_APPLIED_INDEX_GAUGE, - () -> () -> getApplied.getAsLong()); - registry.gauge(STATEMACHINE_APPLY_COMPLETED_GAUGE, - () -> () -> getApplyCompleted.getAsLong()); + registry.gauge(STATEMACHINE_APPLIED_INDEX_GAUGE, () -> getApplied::getAsLong); + registry.gauge(STATEMACHINE_APPLY_COMPLETED_GAUGE, () -> getApplyCompleted::getAsLong); } private RatisMetricRegistry getMetricRegistryForStateMachine(String serverId) { diff --git a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetricsBase.java b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetricsBase.java index fc40082fb3..c21ae08a6d 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetricsBase.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftLogMetricsBase.java @@ -18,12 +18,12 @@ package org.apache.ratis.server.metrics; -import org.apache.ratis.thirdparty.com.codahale.metrics.*; import org.apache.ratis.metrics.MetricRegistryInfo; import org.apache.ratis.metrics.RatisMetricRegistry; import org.apache.ratis.metrics.RatisMetrics; import org.apache.ratis.protocol.RaftGroupMemberId; import org.apache.ratis.server.raftlog.LogEntryHeader; +import org.apache.ratis.thirdparty.com.codahale.metrics.Timer; public class RaftLogMetricsBase extends RatisMetrics implements RaftLogMetrics { public static final String RATIS_LOG_WORKER_METRICS_DESC = "Metrics for Log Worker"; diff --git a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftServerMetricsImpl.java b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftServerMetricsImpl.java index 210bf7d1eb..35e35c1cd0 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftServerMetricsImpl.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/metrics/RaftServerMetricsImpl.java @@ -22,12 +22,10 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.HashMap; import java.util.Map; -import java.util.SortedMap; import java.util.function.Function; import java.util.function.Supplier; import org.apache.ratis.thirdparty.com.codahale.metrics.Counter; -import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; import org.apache.ratis.thirdparty.com.codahale.metrics.Timer; import org.apache.ratis.metrics.MetricRegistryInfo; @@ -40,7 +38,6 @@ import org.apache.ratis.metrics.RatisMetrics; import org.apache.ratis.server.RetryCache; import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting; -import org.apache.ratis.util.Preconditions; /** * Metric Registry for Raft Group Server. One instance per leader/follower. @@ -88,7 +85,7 @@ public final class RaftServerMetricsImpl extends RatisMetrics implements RaftSer /** id -> key */ private static final Map PEER_COMMIT_INDEX_GAUGE_KEYS = new ConcurrentHashMap<>(); - private static String getPeerCommitIndexGaugeKey(RaftPeerId serverId) { + static String getPeerCommitIndexGaugeKey(RaftPeerId serverId) { return PEER_COMMIT_INDEX_GAUGE_KEYS.computeIfAbsent(serverId, key -> String.format(LEADER_METRIC_PEER_COMMIT_INDEX, key)); } @@ -152,26 +149,9 @@ public void addPeerCommitIndexGauge(RaftPeerId peerId) { .orElse(0L)); } - /** - * Get the commit index gauge for the given peer of the server - * @return Metric Gauge holding the value of commit index of the peer - */ @VisibleForTesting - public static Gauge getPeerCommitIndexGauge(RaftGroupMemberId serverId, RaftPeerId peerId) { - - final RaftServerMetricsImpl serverMetrics = METRICS.get(serverId); - if (serverMetrics == null) { - return null; - } - - final String followerCommitIndexKey = getPeerCommitIndexGaugeKey(peerId); - - SortedMap map = - serverMetrics.registry.getGauges((s, metric) -> - s.contains(followerCommitIndexKey)); - - Preconditions.assertTrue(map.size() <= 1); - return map.get(map.firstKey()); + static RaftServerMetricsImpl getImpl(RaftGroupMemberId serverId) { + return METRICS.get(serverId); } /** @@ -213,7 +193,7 @@ public void onRequestQueueLimitHit() { registry.counter(REQUEST_QUEUE_LIMIT_HIT_COUNTER).inc(); } - public void addNumPendingRequestsGauge(Gauge queueSize) { + public void addNumPendingRequestsGauge(Supplier queueSize) { registry.gauge(REQUEST_QUEUE_SIZE, () -> queueSize); } @@ -221,7 +201,7 @@ public boolean removeNumPendingRequestsGauge() { return registry.remove(REQUEST_QUEUE_SIZE); } - public void addNumPendingRequestsMegaByteSize(Gauge megabyteSize) { + public void addNumPendingRequestsMegaByteSize(Supplier megabyteSize) { registry.gauge(REQUEST_MEGA_BYTE_SIZE, () -> megabyteSize); } diff --git a/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java b/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java index 80ad0df580..2b7e33bb9b 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java @@ -18,12 +18,10 @@ package org.apache.ratis.server.metrics; -import org.apache.ratis.thirdparty.com.codahale.metrics.*; import org.apache.ratis.protocol.RaftGroupMemberId; -import org.apache.ratis.server.raftlog.segmented.SegmentedRaftLogCache; -import org.apache.ratis.util.DataQueue; +import org.apache.ratis.thirdparty.com.codahale.metrics.Timer; -import java.util.Queue; +import java.util.function.Supplier; public class SegmentedRaftLogMetrics extends RaftLogMetricsBase { ////////////////////////////// @@ -82,34 +80,28 @@ public SegmentedRaftLogMetrics(RaftGroupMemberId serverId) { super(serverId); } - public void addDataQueueSizeGauge(DataQueue queue) { - registry.gauge(RAFT_LOG_DATA_QUEUE_SIZE, () -> queue::getNumElements); + public void addDataQueueSizeGauge(Supplier numElements) { + registry.gauge(RAFT_LOG_DATA_QUEUE_SIZE, () -> numElements); } - public void addClosedSegmentsNum(SegmentedRaftLogCache cache) { - registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_NUM, () -> () -> { - return cache.getCachedSegmentNum(); - }); + public void addClosedSegmentsNum(Supplier cachedSegmentNum) { + registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_NUM, () -> cachedSegmentNum); } - public void addClosedSegmentsSizeInBytes(SegmentedRaftLogCache cache) { - registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_SIZE_IN_BYTES, () -> () -> { - return cache.getClosedSegmentsSizeInBytes(); - }); + public void addClosedSegmentsSizeInBytes(Supplier closedSegmentsSizeInBytes) { + registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_SIZE_IN_BYTES, () -> closedSegmentsSizeInBytes); } - public void addOpenSegmentSizeInBytes(SegmentedRaftLogCache cache) { - registry.gauge(RAFT_LOG_CACHE_OPEN_SEGMENT_SIZE_IN_BYTES, () -> () -> { - return cache.getOpenSegmentSizeInBytes(); - }); + public void addOpenSegmentSizeInBytes(Supplier openSegmentSizeInBytes) { + registry.gauge(RAFT_LOG_CACHE_OPEN_SEGMENT_SIZE_IN_BYTES, () -> openSegmentSizeInBytes); } - public void addLogWorkerQueueSizeGauge(Queue queue) { - registry.gauge(RAFT_LOG_WORKER_QUEUE_SIZE, () -> () -> queue.size()); + public void addLogWorkerQueueSizeGauge(Supplier queueSize) { + registry.gauge(RAFT_LOG_WORKER_QUEUE_SIZE, () -> queueSize); } - public void addFlushBatchSizeGauge(MetricRegistry.MetricSupplier supplier) { - registry.gauge(RAFT_LOG_SYNC_BATCH_SIZE, supplier); + public void addFlushBatchSizeGauge(Supplier flushBatchSize) { + registry.gauge(RAFT_LOG_SYNC_BATCH_SIZE, () -> flushBatchSize); } private Timer getTimer(String timerName) { diff --git a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java index 7608b30af1..6d0aedda4d 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogCache.java @@ -371,9 +371,9 @@ static SegmentFileInfo deleteOpenSegment(LogSegment openSegment, Runnable clearO this.closedSegments = new LogSegmentList(name); this.storage = storage; this.raftLogMetrics = raftLogMetrics; - this.raftLogMetrics.addClosedSegmentsNum(this); - this.raftLogMetrics.addClosedSegmentsSizeInBytes(this); - this.raftLogMetrics.addOpenSegmentSizeInBytes(this); + this.raftLogMetrics.addClosedSegmentsNum(this::getCachedSegmentNum); + this.raftLogMetrics.addClosedSegmentsSizeInBytes(this::getClosedSegmentsSizeInBytes); + this.raftLogMetrics.addOpenSegmentSizeInBytes(this::getOpenSegmentSizeInBytes); this.maxCachedSegments = RaftServerConfigKeys.Log.segmentCacheNumMax(properties); this.maxSegmentCacheSize = RaftServerConfigKeys.Log.segmentCacheSizeMax(properties).getSize(); } @@ -391,15 +391,15 @@ void loadSegment(LogSegmentPath pi, boolean keepEntryInCache, } } - public long getCachedSegmentNum() { + long getCachedSegmentNum() { return closedSegments.countCached(); } - public long getClosedSegmentsSizeInBytes() { + long getClosedSegmentsSizeInBytes() { return closedSegments.getTotalFileSize(); } - public long getOpenSegmentSizeInBytes() { + long getOpenSegmentSizeInBytes() { return openSegment == null ? 0 : openSegment.getTotalFileSize(); } 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 599772f126..bc186d0ea1 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 @@ -18,7 +18,6 @@ package org.apache.ratis.server.raftlog.segmented; import org.apache.ratis.thirdparty.com.codahale.metrics.Timer; -import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.ratis.conf.RaftProperties; import org.apache.ratis.proto.RaftProtos.StateMachineLogEntryProto; @@ -163,6 +162,7 @@ synchronized void updateIndex(long i) { private int pendingFlushNum = 0; /** the index of the last entry that has been written */ private long lastWrittenIndex; + private volatile int flushBatchSize = 0; /** the largest index of the entry that has been flushed */ private final RaftLogIndex flushIndex = new RaftLogIndex("flushIndex", 0); /** the index up to which cache can be evicted - max of snapshotIndex and @@ -174,7 +174,6 @@ synchronized void updateIndex(long i) { private final long segmentMaxSize; private final long preallocatedSize; private final RaftServer.Division server; - private int flushBatchSize; private final boolean asyncFlush; private final boolean unsafeFlush; @@ -203,16 +202,15 @@ synchronized void updateIndex(long i) { this.segmentMaxSize = RaftServerConfigKeys.Log.segmentSizeMax(properties).getSize(); this.preallocatedSize = RaftServerConfigKeys.Log.preallocatedSize(properties).getSize(); this.forceSyncNum = RaftServerConfigKeys.Log.forceSyncNum(properties); - this.flushBatchSize = 0; this.stateMachineDataPolicy = new StateMachineDataPolicy(properties, metricRegistry); this.workerThread = new Thread(this::run, name); // Server Id can be null in unit tests - metricRegistry.addDataQueueSizeGauge(queue); - metricRegistry.addLogWorkerQueueSizeGauge(writeTasks.q); - metricRegistry.addFlushBatchSizeGauge(() -> (Gauge) () -> flushBatchSize); + metricRegistry.addDataQueueSizeGauge(queue::getNumElements); + metricRegistry.addLogWorkerQueueSizeGauge(writeTasks.q::size); + metricRegistry.addFlushBatchSizeGauge(() -> flushBatchSize); this.logFlushTimer = metricRegistry.getFlushTimer(); this.raftLogSyncTimer = metricRegistry.getRaftLogSyncTimer(); this.raftLogQueueingTimer = metricRegistry.getRaftLogQueueTimer(); 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 b187dabaef..c9ef9b06b7 100644 --- a/ratis-server/src/test/java/org/apache/ratis/LogAppenderTests.java +++ b/ratis-server/src/test/java/org/apache/ratis/LogAppenderTests.java @@ -24,7 +24,7 @@ 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.metrics.impl.RatisMetricRegistryImpl; import org.apache.ratis.proto.RaftProtos.LogEntryProto; import org.apache.ratis.proto.RaftProtos.LogEntryProto.LogEntryBodyCase; import org.apache.ratis.protocol.RaftPeerId; @@ -141,8 +141,8 @@ public void testFollowerHeartbeatMetric() throws IOException, InterruptedExcepti throw e; } - final RatisMetricRegistry ratisMetricRegistry - = ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry(); + final RatisMetricRegistryImpl ratisMetricRegistry = (RatisMetricRegistryImpl) + ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry(); // Get all last_heartbeat_elapsed_time metric gauges. Should be equal to number of followers. SortedMap heartbeatElapsedTimeGauges = ratisMetricRegistry.getGauges((s, metric) -> @@ -160,7 +160,8 @@ public void testFollowerHeartbeatMetric() throws IOException, InterruptedExcepti // Try to get Heartbeat metrics for follower. final RaftServerMetricsImpl followerMetrics = (RaftServerMetricsImpl) followerServer.getRaftServerMetrics(); // Metric should not exist. It only exists in leader. - assertTrue(followerMetrics.getRegistry().getGauges((s, m) -> s.contains("lastHeartbeatElapsedTime")).isEmpty()); + final RatisMetricRegistryImpl followerMetricRegistry = (RatisMetricRegistryImpl)followerMetrics.getRegistry(); + assertTrue(followerMetricRegistry.getGauges((s, m) -> s.contains("lastHeartbeatElapsedTime")).isEmpty()); for (boolean heartbeat : new boolean[] { true, false }) { assertTrue(followerMetrics.getFollowerAppendEntryTimer(heartbeat).getMeanRate() > 0.0d); assertTrue(followerMetrics.getFollowerAppendEntryTimer(heartbeat).getCount() > 0L); 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 5f09c86d25..990369cb1e 100644 --- a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java +++ b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java @@ -36,7 +36,7 @@ import org.apache.ratis.server.impl.MiniRaftCluster; import org.apache.ratis.server.impl.RaftServerTestUtil; import org.apache.ratis.server.impl.RetryCacheTestUtil; -import org.apache.ratis.server.metrics.RaftServerMetricsImpl; +import org.apache.ratis.server.metrics.ServerMetricsTestUtils; import org.apache.ratis.server.raftlog.RaftLog; import org.apache.ratis.util.ExitUtils; import org.apache.ratis.util.JavaUtils; @@ -51,7 +51,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.SortedMap; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.CompletableFuture; @@ -489,14 +488,14 @@ private static void checkFollowerCommitLagsLeader(MiniRaftCluster cluster) { final List followers = cluster.getFollowers(); final RaftGroupMemberId leader = cluster.getLeader().getMemberId(); - Gauge leaderCommitGauge = RaftServerMetricsImpl.getPeerCommitIndexGauge(leader, leader.getPeerId()); + Gauge leaderCommitGauge = ServerMetricsTestUtils.getPeerCommitIndexGauge(leader, leader.getPeerId()); for (RaftServer.Division f : followers) { final RaftGroupMemberId follower = f.getMemberId(); - Gauge followerCommitGauge = RaftServerMetricsImpl.getPeerCommitIndexGauge(leader, follower.getPeerId()); + Gauge followerCommitGauge = ServerMetricsTestUtils.getPeerCommitIndexGauge(leader, follower.getPeerId()); Assert.assertTrue((Long)leaderCommitGauge.getValue() >= (Long)followerCommitGauge.getValue()); - Gauge followerMetric = RaftServerMetricsImpl.getPeerCommitIndexGauge(follower, follower.getPeerId()); + Gauge followerMetric = ServerMetricsTestUtils.getPeerCommitIndexGauge(follower, follower.getPeerId()); System.out.println(followerCommitGauge.getValue()); System.out.println(followerMetric.getValue()); Assert.assertTrue((Long)followerCommitGauge.getValue() <= (Long)followerMetric.getValue()); @@ -511,12 +510,7 @@ private static Gauge getStatemachineGaugeWithName(RaftServer.Division server, St Optional metricRegistry = MetricRegistries.global().get(info); Assert.assertTrue(metricRegistry.isPresent()); - RatisMetricRegistry ratisStateMachineMetricRegistry = metricRegistry.get(); - SortedMap gaugeMap = - ratisStateMachineMetricRegistry.getGauges((s, metric) -> - s.contains(gaugeName)); - - return gaugeMap.get(gaugeMap.firstKey()); + return ServerMetricsTestUtils.getGaugeWithName(gaugeName, metricRegistry::get); } } diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java index 6b5d04b244..8929fb8625 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java @@ -22,7 +22,7 @@ import org.apache.ratis.RaftTestUtil; import org.apache.ratis.client.RaftClient; import org.apache.ratis.conf.RaftProperties; -import org.apache.ratis.metrics.RatisMetricRegistry; +import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl; import org.apache.ratis.proto.RaftProtos; import org.apache.ratis.protocol.RaftClientReply; import org.apache.ratis.protocol.RaftGroupId; @@ -407,8 +407,8 @@ public void testLeaderElectionMetrics() throws IOException, InterruptedException cluster.start(); final RaftServer.Division leaderServer = waitForLeader(cluster); - final RatisMetricRegistry ratisMetricRegistry = LeaderElectionMetrics.getMetricRegistryForLeaderElection( - leaderServer.getMemberId()); + final RatisMetricRegistryImpl ratisMetricRegistry = (RatisMetricRegistryImpl) + LeaderElectionMetrics.getMetricRegistryForLeaderElection(leaderServer.getMemberId()); // Verify each metric individually. long numLeaderElections = ratisMetricRegistry.counter(LEADER_ELECTION_COUNT_METRIC).getCount(); diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/TestLogAppenderMetrics.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/TestLogAppenderMetrics.java index 07870f981f..5c78db42f6 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/impl/TestLogAppenderMetrics.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/TestLogAppenderMetrics.java @@ -21,7 +21,7 @@ import static org.apache.ratis.server.metrics.LogAppenderMetrics.FOLLOWER_NEXT_INDEX; import static org.apache.ratis.server.metrics.LogAppenderMetrics.FOLLOWER_RPC_RESP_TIME; -import org.apache.ratis.metrics.RatisMetricRegistry; +import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl; import org.apache.ratis.protocol.RaftGroupId; import org.apache.ratis.protocol.RaftGroupMemberId; import org.apache.ratis.protocol.RaftPeerId; @@ -35,7 +35,7 @@ public class TestLogAppenderMetrics { - private RatisMetricRegistry ratisMetricRegistry; + private RatisMetricRegistryImpl ratisMetricRegistry; private RaftPeerId raftPeerId; private MyFollowerInfo followerInfo; @@ -46,7 +46,7 @@ public void setup() { RaftGroupMemberId raftGroupMemberId = RaftGroupMemberId.valueOf(raftPeerId, raftGroupId); followerInfo = new MyFollowerInfo(100L); LogAppenderMetrics logAppenderMetrics = new LogAppenderMetrics(raftGroupMemberId); - ratisMetricRegistry = logAppenderMetrics.getRegistry(); + ratisMetricRegistry = (RatisMetricRegistryImpl) logAppenderMetrics.getRegistry(); logAppenderMetrics.addFollowerGauges(raftPeerId, followerInfo::getNextIndex, followerInfo::getMatchIndex, followerInfo::getLastRpcTime); } diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/TestRetryCacheMetrics.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/TestRetryCacheMetrics.java index 93d466b521..e5222d21b1 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/impl/TestRetryCacheMetrics.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/TestRetryCacheMetrics.java @@ -21,8 +21,8 @@ import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.*; import static org.junit.Assert.assertEquals; +import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl; import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; -import org.apache.ratis.metrics.RatisMetricRegistry; import org.apache.ratis.protocol.ClientInvocationId; import org.apache.ratis.protocol.ClientId; import org.apache.ratis.protocol.RaftGroupId; @@ -40,7 +40,7 @@ * Test for metrics of retry cache. */ public class TestRetryCacheMetrics { - private static RatisMetricRegistry ratisMetricRegistry; + private static RatisMetricRegistryImpl ratisMetricRegistry; private static RetryCacheImpl retryCache; @BeforeClass @@ -53,7 +53,7 @@ public static void setUp() { final RaftServerMetricsImpl raftServerMetrics = RaftServerMetricsImpl.computeIfAbsentRaftServerMetrics( raftGroupMemberId, () -> null, retryCache::getStatistics); - ratisMetricRegistry = raftServerMetrics.getRegistry(); + ratisMetricRegistry = (RatisMetricRegistryImpl) raftServerMetrics.getRegistry(); } @After diff --git a/ratis-server/src/test/java/org/apache/ratis/server/metrics/ServerMetricsTestUtils.java b/ratis-server/src/test/java/org/apache/ratis/server/metrics/ServerMetricsTestUtils.java new file mode 100644 index 0000000000..40ba31e162 --- /dev/null +++ b/ratis-server/src/test/java/org/apache/ratis/server/metrics/ServerMetricsTestUtils.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ratis.server.metrics; + +import org.apache.ratis.metrics.RatisMetricRegistry; +import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl; +import org.apache.ratis.protocol.RaftGroupMemberId; +import org.apache.ratis.protocol.RaftPeerId; +import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; +import org.apache.ratis.util.Preconditions; + +import java.util.SortedMap; +import java.util.function.Supplier; + +public interface ServerMetricsTestUtils { + static Gauge getGaugeWithName(String gaugeName, Supplier metrics) { + final SortedMap gaugeMap = ((RatisMetricRegistryImpl)metrics.get()).getGauges( + (s, metric) -> s.contains(gaugeName)); + return gaugeMap.get(gaugeMap.firstKey()); + } + + /** + * Get the commit index gauge for the given peer of the server + * @return Metric Gauge holding the value of commit index of the peer + */ + static Gauge getPeerCommitIndexGauge(RaftGroupMemberId serverId, RaftPeerId peerId) { + final RaftServerMetricsImpl serverMetrics = RaftServerMetricsImpl.getImpl(serverId); + if (serverMetrics == null) { + return null; + } + + final String followerCommitIndexKey = RaftServerMetricsImpl.getPeerCommitIndexGaugeKey(peerId); + + final SortedMap map = ((RatisMetricRegistryImpl)serverMetrics.getRegistry()) + .getGauges((s, metric) -> s.contains(followerCommitIndexKey)); + + Preconditions.assertTrue(map.size() <= 1); + return map.get(map.firstKey()); + } +} \ No newline at end of file diff --git a/ratis-server/src/test/java/org/apache/ratis/server/metrics/TestLeaderElectionMetrics.java b/ratis-server/src/test/java/org/apache/ratis/server/metrics/TestLeaderElectionMetrics.java index 392b4e45a5..a39612c57e 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/metrics/TestLeaderElectionMetrics.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/metrics/TestLeaderElectionMetrics.java @@ -23,9 +23,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl; import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; import org.apache.ratis.BaseTest; -import org.apache.ratis.metrics.RatisMetricRegistry; import org.apache.ratis.protocol.RaftGroupId; import org.apache.ratis.protocol.RaftGroupMemberId; import org.apache.ratis.protocol.RaftPeerId; @@ -40,7 +40,7 @@ public class TestLeaderElectionMetrics extends BaseTest { private static LeaderElectionMetrics leaderElectionMetrics; - private static RatisMetricRegistry ratisMetricRegistry; + private static RatisMetricRegistryImpl ratisMetricRegistry; @BeforeClass public static void setUp() { @@ -48,7 +48,7 @@ public static void setUp() { RaftPeerId raftPeerId = RaftPeerId.valueOf("TestId"); RaftGroupMemberId raftGroupMemberId = RaftGroupMemberId.valueOf(raftPeerId, raftGroupId); leaderElectionMetrics = LeaderElectionMetrics.getLeaderElectionMetrics(raftGroupMemberId, () -> 1000L); - ratisMetricRegistry = leaderElectionMetrics.getRegistry(); + ratisMetricRegistry = (RatisMetricRegistryImpl) leaderElectionMetrics.getRegistry(); } @Test 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 9b850e2756..db2a8df469 100644 --- a/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java +++ b/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java @@ -19,12 +19,11 @@ import org.apache.log4j.Level; import org.apache.ratis.conf.RaftProperties; -import org.apache.ratis.metrics.RatisMetricRegistry; +import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl; import org.apache.ratis.protocol.RaftPeerId; import org.apache.ratis.server.RaftServer; import org.apache.ratis.server.RaftServerConfigKeys; import org.apache.ratis.server.impl.MiniRaftCluster; -import org.apache.ratis.server.impl.RaftServerTestUtil; import org.apache.ratis.server.metrics.RaftServerMetricsImpl; import org.apache.ratis.server.simulation.MiniRaftClusterWithSimulatedRpc; import org.apache.ratis.proto.RaftProtos; @@ -91,8 +90,8 @@ public void testSlownessDetection() throws Exception { .slownessTimeout(cluster.getProperties()).toIntExact(TimeUnit.MILLISECONDS); RaftServer.Division failedFollower = cluster.getFollowers().get(0); - final RatisMetricRegistry ratisMetricRegistry - = ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry(); + final RatisMetricRegistryImpl ratisMetricRegistry + = (RatisMetricRegistryImpl) ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry(); SortedMap heartbeatElapsedTimeGauges = ratisMetricRegistry.getGauges((s, metric) -> s.contains("lastHeartbeatElapsedTime")); diff --git a/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftServerWithGrpc.java b/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftServerWithGrpc.java index fb5588e0a4..d44e38b878 100644 --- a/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftServerWithGrpc.java +++ b/ratis-test/src/test/java/org/apache/ratis/grpc/TestRaftServerWithGrpc.java @@ -22,12 +22,10 @@ import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.RAFT_CLIENT_WATCH_REQUEST; import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.RAFT_CLIENT_WRITE_REQUEST; import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.REQUEST_QUEUE_LIMIT_HIT_COUNTER; -import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.REQUEST_MEGA_BYTE_SIZE; import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.REQUEST_BYTE_SIZE_LIMIT_HIT_COUNTER; import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.RESOURCE_LIMIT_HIT_COUNTER; import org.apache.ratis.server.storage.RaftStorage; -import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge; import org.apache.log4j.Level; import org.apache.ratis.BaseTest; import org.apache.ratis.protocol.RaftGroup; @@ -251,12 +249,6 @@ void testRequestMetrics(MiniRaftClusterWithGrpc cluster) throws Exception { clients.add(client); client.async().send(new SimpleMessage("2nd Message")); - - final SortedMap gaugeMap = getRaftServerMetrics(cluster.getLeader()) - .getRegistry().getGauges((s, metric) -> s.contains( - REQUEST_MEGA_BYTE_SIZE)); - - for (int i = 0; i < 10; i++) { client = cluster.createClient(cluster.getLeader().getId(), RetryPolicies.noRetry()); clients.add(client); diff --git a/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLogCache.java b/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLogCache.java index 976e9d6e42..4f135628c1 100644 --- a/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLogCache.java +++ b/ratis-test/src/test/java/org/apache/ratis/server/raftlog/segmented/TestSegmentedRaftLogCache.java @@ -25,7 +25,7 @@ import org.apache.ratis.RaftTestUtil.SimpleOperation; import org.apache.ratis.conf.RaftProperties; -import org.apache.ratis.metrics.RatisMetricRegistry; +import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl; import org.apache.ratis.server.impl.RaftServerTestUtil; import org.apache.ratis.server.metrics.SegmentedRaftLogMetrics; import org.apache.ratis.server.protocol.TermIndex; @@ -44,12 +44,12 @@ public class TestSegmentedRaftLogCache { private SegmentedRaftLogCache cache; private SegmentedRaftLogMetrics raftLogMetrics; - private RatisMetricRegistry ratisMetricRegistry; + private RatisMetricRegistryImpl ratisMetricRegistry; @Before public void setup() { raftLogMetrics = new SegmentedRaftLogMetrics(RaftServerTestUtil.TEST_MEMBER_ID); - ratisMetricRegistry = raftLogMetrics.getRegistry(); + ratisMetricRegistry = (RatisMetricRegistryImpl) raftLogMetrics.getRegistry(); cache = new SegmentedRaftLogCache(null, null, prop, raftLogMetrics); }