You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sz...@apache.org on 2022/08/26 16:54:11 UTC

[ratis] branch revert-724-RATIS-1689 created (now cea549370)

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

szetszwo pushed a change to branch revert-724-RATIS-1689
in repository https://gitbox.apache.org/repos/asf/ratis.git


      at cea549370 Revert "RATIS-1689. Remove the use of the thirdparty Gauge. (#724)"

This branch includes the following new commits:

     new cea549370 Revert "RATIS-1689. Remove the use of the thirdparty Gauge. (#724)"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[ratis] 01/01: Revert "RATIS-1689. Remove the use of the thirdparty Gauge. (#724)"

Posted by sz...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

szetszwo pushed a commit to branch revert-724-RATIS-1689
in repository https://gitbox.apache.org/repos/asf/ratis.git

commit cea5493705cf6b53868bc74d9f99506db9d3d3ee
Author: Tsz-Wo Nicholas Sze <sz...@cloudera.com>
AuthorDate: Fri Aug 26 09:54:07 2022 -0700

    Revert "RATIS-1689. Remove the use of the thirdparty Gauge. (#724)"
    
    This reverts commit 0c647c60b353d4b33d1c79ce127bbbb9802b206b.
---
 .../ratis/grpc/metrics/GrpcServerMetrics.java      | 12 +++--
 .../ratis/grpc/server/TestGrpcServerMetrics.java   | 23 ++++++---
 .../apache/ratis/metrics/MetricRegistryInfo.java   |  5 +-
 .../org/apache/ratis/metrics/MetricsReporting.java |  8 ++--
 .../apache/ratis/metrics/RatisMetricRegistry.java  | 19 +++-----
 .../metrics/impl/RatisMetricRegistryImpl.java      | 35 ++++----------
 .../ratis/server/impl/StateMachineMetrics.java     |  6 ++-
 .../ratis/server/metrics/RaftLogMetricsBase.java   |  2 +-
 .../server/metrics/RaftServerMetricsImpl.java      | 30 ++++++++++--
 .../server/metrics/SegmentedRaftLogMetrics.java    | 23 +++++----
 .../raftlog/segmented/SegmentedRaftLogWorker.java  |  5 +-
 .../java/org/apache/ratis/LogAppenderTests.java    |  9 ++--
 .../test/java/org/apache/ratis/RaftBasicTests.java | 16 +++++--
 .../ratis/server/impl/LeaderElectionTests.java     |  6 +--
 .../ratis/server/impl/TestLogAppenderMetrics.java  |  6 +--
 .../ratis/server/impl/TestRetryCacheMetrics.java   |  6 +--
 .../server/metrics/ServerMetricsTestUtils.java     | 55 ----------------------
 .../server/metrics/TestLeaderElectionMetrics.java  |  6 +--
 .../ratis/TestRaftServerSlownessDetection.java     |  7 +--
 .../apache/ratis/grpc/TestRaftServerWithGrpc.java  |  8 ++++
 .../segmented/TestSegmentedRaftLogCache.java       |  6 +--
 21 files changed, 137 insertions(+), 156 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 dcc2d309f..0bc400d6b 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,7 +89,8 @@ public class GrpcServerMetrics extends RatisMetrics {
         follower)).inc();
   }
 
-  public void addPendingRequestsCount(String follower, Supplier<Integer> pendinglogQueueSize) {
+  public void addPendingRequestsCount(String follower,
+      Gauge pendinglogQueueSize) {
     registry.gauge(String.format(RATIS_GRPC_METRICS_LOG_APPENDER_PENDING_COUNT, follower), () -> pendinglogQueueSize);
   }
 
@@ -100,4 +101,9 @@ public class GrpcServerMetrics extends RatisMetrics {
   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 7cd10bc5d..252a0dc2e 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
 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.server.metrics.ServerMetricsTestUtils;
+import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge;
 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,12 +109,21 @@ public class TestGrpcServerMetrics {
     GrpcLogAppender.RequestMap pendingRequest = Mockito.mock(GrpcLogAppender.RequestMap.class);
     when(pendingRequest.logRequestsSize()).thenReturn(0);
     grpcServerMetrics.addPendingRequestsCount(raftPeerId.toString(),
-        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());
+        () -> pendingRequest.logRequestsSize());
+    Assert.assertEquals(0, getGuageWithName(
+            String.format(RATIS_GRPC_METRICS_LOG_APPENDER_PENDING_COUNT,
+                raftPeerId.toString())).getValue());
     when(pendingRequest.logRequestsSize()).thenReturn(10);
-    Assert.assertEquals(10, gauge.getValue());
+    Assert.assertEquals(10, getGuageWithName(
+            String.format(RATIS_GRPC_METRICS_LOG_APPENDER_PENDING_COUNT,
+                raftPeerId.toString())).getValue());
+  }
+
+  private Gauge getGuageWithName(String gaugeName) {
+    SortedMap<String, Gauge> gaugeMap =
+        grpcServerMetrics.getRegistry().getGauges((s, metric) ->
+            s.contains(gaugeName));
+    return gaugeMap.get(gaugeMap.firstKey());
   }
 
   @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 70efac627..5563b96d1 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,10 +18,11 @@
 
 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 efaa1a45d..df51420f0 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 org.apache.ratis.thirdparty.com.codahale.metrics.ConsoleReporter;
+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.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 1745413be..388f9f4e0 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,19 +17,12 @@
  */
 package org.apache.ratis.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 java.util.SortedMap;
+
+import org.apache.ratis.thirdparty.com.codahale.metrics.*;
 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);
 
@@ -37,10 +30,12 @@ public interface RatisMetricRegistry {
 
   boolean remove(String name);
 
-  <T> Supplier<T> gauge(String name, Supplier<Supplier<T>> gaugeSupplier);
+  Gauge gauge(String name, MetricRegistry.MetricSupplier<Gauge> supplier);
 
   Timer timer(String name, MetricRegistry.MetricSupplier<Timer> supplier);
 
+  SortedMap<String, Gauge> getGauges(MetricFilter filter);
+
   Counter counter(String name, MetricRegistry.MetricSupplier<Counter> 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 fe023eb29..1b33efb8d 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,30 +17,20 @@
  */
 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 final MetricRegistry metricRegistry = new MetricRegistry();
+  private MetricRegistry metricRegistry = new MetricRegistry();
 
   private final MetricRegistryInfo info;
 
@@ -67,22 +57,15 @@ public class RatisMetricRegistryImpl implements RatisMetricRegistry {
     return metricRegistry.remove(getMetricName(name));
   }
 
-  static <T> Gauge<T> toGauge(Supplier<T> supplier) {
-    return supplier::get;
-  }
-
-  @Override
-  public <T> Supplier<T> gauge(String name, Supplier<Supplier<T>> gaugeSupplier) {
-    final MetricRegistry.MetricSupplier<Gauge<T>> s = () -> toGauge(gaugeSupplier.get());
-    final Gauge<T> g = metricRegistry.gauge(getMetricName(name), s);
-    return g::getValue;
+  @Override public Gauge gauge(String name, MetricRegistry.MetricSupplier<Gauge> supplier) {
+    return metricRegistry.gauge(getMetricName(name), supplier);
   }
 
   @Override public Timer timer(String name, MetricRegistry.MetricSupplier<Timer> supplier) {
     return metricRegistry.timer(getMetricName(name), supplier);
   }
 
-  public SortedMap<String, Gauge> getGauges(MetricFilter filter) {
+  @Override public SortedMap<String, Gauge> 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 596cdaf5a..3466f3f67 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,8 +56,10 @@ public final class StateMachineMetrics extends RatisMetrics {
   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 c21ae08a6..fc40082fb 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 35e35c1cd..210bf7d1e 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,10 +22,12 @@ import java.util.Optional;
 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;
@@ -38,6 +40,7 @@ import org.apache.ratis.protocol.RaftPeerId;
 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.
@@ -85,7 +88,7 @@ public final class RaftServerMetricsImpl extends RatisMetrics implements RaftSer
   /** id -> key */
   private static final Map<RaftPeerId, String> PEER_COMMIT_INDEX_GAUGE_KEYS = new ConcurrentHashMap<>();
 
-  static String getPeerCommitIndexGaugeKey(RaftPeerId serverId) {
+  private static String getPeerCommitIndexGaugeKey(RaftPeerId serverId) {
     return PEER_COMMIT_INDEX_GAUGE_KEYS.computeIfAbsent(serverId,
         key -> String.format(LEADER_METRIC_PEER_COMMIT_INDEX, key));
   }
@@ -149,9 +152,26 @@ public final class RaftServerMetricsImpl extends RatisMetrics implements RaftSer
         .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
-  static RaftServerMetricsImpl getImpl(RaftGroupMemberId serverId) {
-    return METRICS.get(serverId);
+  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<String, Gauge> map =
+        serverMetrics.registry.getGauges((s, metric) ->
+            s.contains(followerCommitIndexKey));
+
+    Preconditions.assertTrue(map.size() <= 1);
+    return map.get(map.firstKey());
   }
 
   /**
@@ -193,7 +213,7 @@ public final class RaftServerMetricsImpl extends RatisMetrics implements RaftSer
     registry.counter(REQUEST_QUEUE_LIMIT_HIT_COUNTER).inc();
   }
 
-  public void addNumPendingRequestsGauge(Supplier<Integer> queueSize) {
+  public void addNumPendingRequestsGauge(Gauge queueSize) {
     registry.gauge(REQUEST_QUEUE_SIZE, () -> queueSize);
   }
 
@@ -201,7 +221,7 @@ public final class RaftServerMetricsImpl extends RatisMetrics implements RaftSer
     return registry.remove(REQUEST_QUEUE_SIZE);
   }
 
-  public void addNumPendingRequestsMegaByteSize(Supplier<Integer> megabyteSize) {
+  public void addNumPendingRequestsMegaByteSize(Gauge 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 69526cbc6..80ad0df58 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,13 +18,12 @@
 
 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.thirdparty.com.codahale.metrics.Timer;
 import org.apache.ratis.util.DataQueue;
 
 import java.util.Queue;
-import java.util.function.Supplier;
 
 public class SegmentedRaftLogMetrics extends RaftLogMetricsBase {
   //////////////////////////////
@@ -83,27 +82,33 @@ public class SegmentedRaftLogMetrics extends RaftLogMetricsBase {
     super(serverId);
   }
 
-  public void addDataQueueSizeGauge(DataQueue<?> queue) {
+  public void addDataQueueSizeGauge(DataQueue queue) {
     registry.gauge(RAFT_LOG_DATA_QUEUE_SIZE, () -> queue::getNumElements);
   }
 
   public void addClosedSegmentsNum(SegmentedRaftLogCache cache) {
-    registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_NUM, () -> cache::getCachedSegmentNum);
+    registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_NUM, () -> () -> {
+      return cache.getCachedSegmentNum();
+    });
   }
 
   public void addClosedSegmentsSizeInBytes(SegmentedRaftLogCache cache) {
-    registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_SIZE_IN_BYTES, () -> cache::getClosedSegmentsSizeInBytes);
+    registry.gauge(RAFT_LOG_CACHE_CLOSED_SEGMENTS_SIZE_IN_BYTES, () -> () -> {
+      return cache.getClosedSegmentsSizeInBytes();
+    });
   }
 
   public void addOpenSegmentSizeInBytes(SegmentedRaftLogCache cache) {
-    registry.gauge(RAFT_LOG_CACHE_OPEN_SEGMENT_SIZE_IN_BYTES, () -> cache::getOpenSegmentSizeInBytes);
+    registry.gauge(RAFT_LOG_CACHE_OPEN_SEGMENT_SIZE_IN_BYTES, () -> () -> {
+      return cache.getOpenSegmentSizeInBytes();
+    });
   }
 
-  public void addLogWorkerQueueSizeGauge(Queue<?> queue) {
-    registry.gauge(RAFT_LOG_WORKER_QUEUE_SIZE, () -> queue::size);
+  public void addLogWorkerQueueSizeGauge(Queue queue) {
+    registry.gauge(RAFT_LOG_WORKER_QUEUE_SIZE, () -> () -> queue.size());
   }
 
-  public void addFlushBatchSizeGauge(Supplier<Supplier<Integer>> supplier) {
+  public void addFlushBatchSizeGauge(MetricRegistry.MetricSupplier<Gauge> supplier) {
     registry.gauge(RAFT_LOG_SYNC_BATCH_SIZE, supplier);
   }
 
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 8053f44b7..599772f12 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,6 +18,7 @@
 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;
@@ -173,7 +174,7 @@ class SegmentedRaftLogWorker {
   private final long segmentMaxSize;
   private final long preallocatedSize;
   private final RaftServer.Division server;
-  private volatile int flushBatchSize;
+  private int flushBatchSize;
 
   private final boolean asyncFlush;
   private final boolean unsafeFlush;
@@ -211,7 +212,7 @@ class SegmentedRaftLogWorker {
     // Server Id can be null in unit tests
     metricRegistry.addDataQueueSizeGauge(queue);
     metricRegistry.addLogWorkerQueueSizeGauge(writeTasks.q);
-    metricRegistry.addFlushBatchSizeGauge(() -> () -> flushBatchSize);
+    metricRegistry.addFlushBatchSizeGauge(() -> (Gauge<Integer>) () -> 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 c9ef9b06b..b187dabae 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.log4j.Level;
 import org.apache.ratis.RaftTestUtil.SimpleMessage;
 import org.apache.ratis.client.RaftClient;
 import org.apache.ratis.conf.RaftProperties;
-import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl;
+import org.apache.ratis.metrics.RatisMetricRegistry;
 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 abstract class LogAppenderTests<CLUSTER extends MiniRaftCluster>
       throw e;
     }
 
-    final RatisMetricRegistryImpl ratisMetricRegistry = (RatisMetricRegistryImpl)
-        ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry();
+    final RatisMetricRegistry ratisMetricRegistry
+        = ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry();
 
     // Get all last_heartbeat_elapsed_time metric gauges. Should be equal to number of followers.
     SortedMap<String, Gauge> heartbeatElapsedTimeGauges = ratisMetricRegistry.getGauges((s, metric) ->
@@ -160,8 +160,7 @@ public abstract class LogAppenderTests<CLUSTER extends MiniRaftCluster>
       // Try to get Heartbeat metrics for follower.
       final RaftServerMetricsImpl followerMetrics = (RaftServerMetricsImpl) followerServer.getRaftServerMetrics();
       // Metric should not exist. It only exists in leader.
-      final RatisMetricRegistryImpl followerMetricRegistry = (RatisMetricRegistryImpl)followerMetrics.getRegistry();
-      assertTrue(followerMetricRegistry.getGauges((s, m) -> s.contains("lastHeartbeatElapsedTime")).isEmpty());
+      assertTrue(followerMetrics.getRegistry().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 1413d6b91..5f09c86d2 100644
--- a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
+++ b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ratis;
 
-import org.apache.ratis.server.metrics.ServerMetricsTestUtils;
 import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge;
 import org.apache.log4j.Level;
 import org.apache.ratis.RaftTestUtil.SimpleMessage;
@@ -37,6 +36,7 @@ import org.apache.ratis.server.impl.BlockRequestHandlingInjection;
 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.raftlog.RaftLog;
 import org.apache.ratis.util.ExitUtils;
 import org.apache.ratis.util.JavaUtils;
@@ -51,6 +51,7 @@ import java.io.IOException;
 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;
@@ -488,14 +489,14 @@ public abstract class RaftBasicTests<CLUSTER extends MiniRaftCluster>
     final List<RaftServer.Division> followers = cluster.getFollowers();
     final RaftGroupMemberId leader = cluster.getLeader().getMemberId();
 
-    Gauge leaderCommitGauge = ServerMetricsTestUtils.getPeerCommitIndexGauge(leader, leader.getPeerId());
+    Gauge leaderCommitGauge = RaftServerMetricsImpl.getPeerCommitIndexGauge(leader, leader.getPeerId());
 
     for (RaftServer.Division f : followers) {
       final RaftGroupMemberId follower = f.getMemberId();
-      Gauge followerCommitGauge = ServerMetricsTestUtils.getPeerCommitIndexGauge(leader, follower.getPeerId());
+      Gauge followerCommitGauge = RaftServerMetricsImpl.getPeerCommitIndexGauge(leader, follower.getPeerId());
       Assert.assertTrue((Long)leaderCommitGauge.getValue() >=
           (Long)followerCommitGauge.getValue());
-      Gauge followerMetric = ServerMetricsTestUtils.getPeerCommitIndexGauge(follower, follower.getPeerId());
+      Gauge followerMetric = RaftServerMetricsImpl.getPeerCommitIndexGauge(follower, follower.getPeerId());
       System.out.println(followerCommitGauge.getValue());
       System.out.println(followerMetric.getValue());
       Assert.assertTrue((Long)followerCommitGauge.getValue()  <= (Long)followerMetric.getValue());
@@ -510,7 +511,12 @@ public abstract class RaftBasicTests<CLUSTER extends MiniRaftCluster>
 
     Optional<RatisMetricRegistry> metricRegistry = MetricRegistries.global().get(info);
     Assert.assertTrue(metricRegistry.isPresent());
+    RatisMetricRegistry ratisStateMachineMetricRegistry = metricRegistry.get();
 
-    return ServerMetricsTestUtils.getGaugeWithName(gaugeName, metricRegistry::get);
+    SortedMap<String, Gauge> gaugeMap =
+        ratisStateMachineMetricRegistry.getGauges((s, metric) ->
+            s.contains(gaugeName));
+
+    return gaugeMap.get(gaugeMap.firstKey());
   }
 }
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 8929fb862..6b5d04b24 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.BaseTest;
 import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.client.RaftClient;
 import org.apache.ratis.conf.RaftProperties;
-import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl;
+import org.apache.ratis.metrics.RatisMetricRegistry;
 import org.apache.ratis.proto.RaftProtos;
 import org.apache.ratis.protocol.RaftClientReply;
 import org.apache.ratis.protocol.RaftGroupId;
@@ -407,8 +407,8 @@ public abstract class LeaderElectionTests<CLUSTER extends MiniRaftCluster>
     cluster.start();
     final RaftServer.Division leaderServer = waitForLeader(cluster);
 
-    final RatisMetricRegistryImpl ratisMetricRegistry = (RatisMetricRegistryImpl)
-        LeaderElectionMetrics.getMetricRegistryForLeaderElection(leaderServer.getMemberId());
+    final RatisMetricRegistry ratisMetricRegistry = 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 5c78db42f..07870f981 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_MATCH_
 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.impl.RatisMetricRegistryImpl;
+import org.apache.ratis.metrics.RatisMetricRegistry;
 import org.apache.ratis.protocol.RaftGroupId;
 import org.apache.ratis.protocol.RaftGroupMemberId;
 import org.apache.ratis.protocol.RaftPeerId;
@@ -35,7 +35,7 @@ import org.apache.ratis.thirdparty.com.codahale.metrics.Gauge;
 
 public class TestLogAppenderMetrics {
 
-  private RatisMetricRegistryImpl ratisMetricRegistry;
+  private RatisMetricRegistry ratisMetricRegistry;
   private RaftPeerId raftPeerId;
   private MyFollowerInfo followerInfo;
 
@@ -46,7 +46,7 @@ public class TestLogAppenderMetrics {
     RaftGroupMemberId raftGroupMemberId = RaftGroupMemberId.valueOf(raftPeerId, raftGroupId);
     followerInfo = new MyFollowerInfo(100L);
     LogAppenderMetrics logAppenderMetrics = new LogAppenderMetrics(raftGroupMemberId);
-    ratisMetricRegistry = (RatisMetricRegistryImpl) logAppenderMetrics.getRegistry();
+    ratisMetricRegistry = 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 e5222d21b..93d466b52 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 @@ package org.apache.ratis.server.impl;
 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 @@ import java.util.Map;
  * Test for metrics of retry cache.
  */
 public class TestRetryCacheMetrics {
-    private static RatisMetricRegistryImpl ratisMetricRegistry;
+    private static RatisMetricRegistry ratisMetricRegistry;
     private static RetryCacheImpl retryCache;
 
     @BeforeClass
@@ -53,7 +53,7 @@ public class TestRetryCacheMetrics {
 
       final RaftServerMetricsImpl raftServerMetrics = RaftServerMetricsImpl.computeIfAbsentRaftServerMetrics(
           raftGroupMemberId, () -> null, retryCache::getStatistics);
-      ratisMetricRegistry = (RatisMetricRegistryImpl) raftServerMetrics.getRegistry();
+      ratisMetricRegistry = 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
deleted file mode 100644
index 40ba31e16..000000000
--- a/ratis-server/src/test/java/org/apache/ratis/server/metrics/ServerMetricsTestUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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<RatisMetricRegistry> metrics) {
-    final SortedMap<String, Gauge> 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<String, Gauge> 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 a39612c57..392b4e45a 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.apache.ratis.server.metrics.LeaderElectionMetrics.LEADER_ELECT
 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 @@ import java.util.SortedMap;
 public class TestLeaderElectionMetrics extends BaseTest {
 
   private static LeaderElectionMetrics leaderElectionMetrics;
-  private static RatisMetricRegistryImpl ratisMetricRegistry;
+  private static RatisMetricRegistry ratisMetricRegistry;
 
   @BeforeClass
   public static void setUp() {
@@ -48,7 +48,7 @@ public class TestLeaderElectionMetrics extends BaseTest {
     RaftPeerId raftPeerId = RaftPeerId.valueOf("TestId");
     RaftGroupMemberId raftGroupMemberId = RaftGroupMemberId.valueOf(raftPeerId, raftGroupId);
     leaderElectionMetrics = LeaderElectionMetrics.getLeaderElectionMetrics(raftGroupMemberId, () -> 1000L);
-    ratisMetricRegistry = (RatisMetricRegistryImpl) leaderElectionMetrics.getRegistry();
+    ratisMetricRegistry = 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 db2a8df46..9b850e275 100644
--- a/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java
+++ b/ratis-test/src/test/java/org/apache/ratis/TestRaftServerSlownessDetection.java
@@ -19,11 +19,12 @@ package org.apache.ratis;
 
 import org.apache.log4j.Level;
 import org.apache.ratis.conf.RaftProperties;
-import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl;
+import org.apache.ratis.metrics.RatisMetricRegistry;
 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;
@@ -90,8 +91,8 @@ public class TestRaftServerSlownessDetection extends BaseTest {
         .slownessTimeout(cluster.getProperties()).toIntExact(TimeUnit.MILLISECONDS);
     RaftServer.Division failedFollower = cluster.getFollowers().get(0);
 
-    final RatisMetricRegistryImpl ratisMetricRegistry
-        = (RatisMetricRegistryImpl) ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry();
+    final RatisMetricRegistry ratisMetricRegistry
+        = ((RaftServerMetricsImpl)leaderServer.getRaftServerMetrics()).getRegistry();
     SortedMap<String, Gauge> 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 71cc78381..bcf70f169 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,9 +22,11 @@ import static org.apache.ratis.server.metrics.RaftServerMetricsImpl.RAFT_CLIENT_
 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.thirdparty.com.codahale.metrics.Gauge;
 import org.apache.log4j.Level;
 import org.apache.ratis.BaseTest;
 import org.apache.ratis.protocol.RaftGroup;
@@ -247,6 +249,12 @@ public class TestRaftServerWithGrpc extends BaseTest implements MiniRaftClusterW
       clients.add(client);
       client.async().send(new SimpleMessage("2nd Message"));
 
+
+      final SortedMap<String, Gauge> 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 4f135628c..976e9d6e4 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 java.util.stream.IntStream;
 
 import org.apache.ratis.RaftTestUtil.SimpleOperation;
 import org.apache.ratis.conf.RaftProperties;
-import org.apache.ratis.metrics.impl.RatisMetricRegistryImpl;
+import org.apache.ratis.metrics.RatisMetricRegistry;
 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 RatisMetricRegistryImpl ratisMetricRegistry;
+  private RatisMetricRegistry ratisMetricRegistry;
 
   @Before
   public void setup() {
     raftLogMetrics = new SegmentedRaftLogMetrics(RaftServerTestUtil.TEST_MEMBER_ID);
-    ratisMetricRegistry = (RatisMetricRegistryImpl) raftLogMetrics.getRegistry();
+    ratisMetricRegistry = raftLogMetrics.getRegistry();
     cache = new SegmentedRaftLogCache(null, null, prop, raftLogMetrics);
   }