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

dragonyliu pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/branch-2 by this push:
     new dbb4ffa3 RATIS-1391. Update library dropwizard.metrics version to 4.x 
(#632)
dbb4ffa3 is described below

commit dbb4ffa3b1cbabb48fb3c9cb5689b5ec60e857ee
Author: ZhangHongYin <[email protected]>
AuthorDate: Tue Jun 7 03:50:30 2022 +0800

    RATIS-1391. Update library dropwizard.metrics version to 4.x (#632)
    
    
    (cherry picked from commit ec82b04df5a997fda14adfaf4f1a6548ad9a0081)
---
 pom.xml                                            | 11 ++++-
 ratis-metrics/pom.xml                              |  4 ++
 .../org/apache/ratis/metrics/MetricsReporting.java |  6 +--
 .../apache/ratis/metrics/RatisMetricRegistry.java  |  2 +-
 .../ratis/metrics/RatisObjectNameFactory.java      | 50 ++++++++++++++++++++++
 .../metrics/impl/RatisMetricRegistryImpl.java      |  2 +-
 .../server/metrics/TestLeaderElectionMetrics.java  | 14 ++++--
 7 files changed, 78 insertions(+), 11 deletions(-)

diff --git a/pom.xml b/pom.xml
index d19d47ca..5a95b001 100644
--- a/pom.xml
+++ b/pom.xml
@@ -217,7 +217,8 @@
     <testsThreadCount>4</testsThreadCount>
 
     <!--metrics-->
-    <dropwizard.version>3.2.5</dropwizard.version>
+    <dropwizard.version>4.2.9</dropwizard.version>
+    <dropwizard.ganglia.version>3.2.6</dropwizard.ganglia.version>
   </properties>
 
   <dependencyManagement>
@@ -417,10 +418,16 @@
 
       <dependency>
         <groupId>io.dropwizard.metrics</groupId>
-        <artifactId>metrics-ganglia</artifactId>
+        <artifactId>metrics-jmx</artifactId>
         <version>${dropwizard.version}</version>
       </dependency>
 
+      <dependency>
+        <groupId>io.dropwizard.metrics</groupId>
+        <artifactId>metrics-ganglia</artifactId>
+        <version>${dropwizard.ganglia.version}</version>
+      </dependency>
+
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
diff --git a/ratis-metrics/pom.xml b/ratis-metrics/pom.xml
index 8742c7be..d3ef27b7 100644
--- a/ratis-metrics/pom.xml
+++ b/ratis-metrics/pom.xml
@@ -65,6 +65,10 @@
       <artifactId>metrics-jvm</artifactId>
       <optional>true</optional>
     </dependency>
+    <dependency>
+      <groupId>io.dropwizard.metrics</groupId>
+      <artifactId>metrics-jmx</artifactId>
+    </dependency>
     <dependency>
       <groupId>io.dropwizard.metrics</groupId>
       <artifactId>metrics-ganglia</artifactId>
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 e45cefa9..1aee82f1 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
@@ -21,8 +21,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 
 import com.codahale.metrics.ConsoleReporter;
-import com.codahale.metrics.JmxReporter;
-import com.codahale.metrics.JmxReporter.Builder;
+import com.codahale.metrics.jmx.JmxReporter;
 import org.apache.ratis.util.TimeDuration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,9 +52,10 @@ public final class MetricsReporting {
 
   public static Consumer<RatisMetricRegistry> jmxReporter() {
     return registry -> {
-      Builder builder =
+      JmxReporter.Builder builder =
           JmxReporter.forRegistry(registry.getDropWizardMetricRegistry());
       builder.inDomain(registry.getMetricRegistryInfo().getApplicationName());
+      builder.createsObjectNamesWith(new RatisObjectNameFactory());
       JmxReporter reporter = builder.build();
       reporter.start();
 
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 03f419c5..d4ee1738 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
@@ -23,13 +23,13 @@ import com.codahale.metrics.ConsoleReporter;
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.Gauge;
 import com.codahale.metrics.Histogram;
-import com.codahale.metrics.JmxReporter;
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.Metric;
 import com.codahale.metrics.MetricFilter;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.MetricSet;
 import com.codahale.metrics.Timer;
+import com.codahale.metrics.jmx.JmxReporter;
 import 
org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting;
 
 public interface RatisMetricRegistry {
diff --git 
a/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisObjectNameFactory.java
 
b/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisObjectNameFactory.java
new file mode 100644
index 00000000..7dda6c85
--- /dev/null
+++ 
b/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisObjectNameFactory.java
@@ -0,0 +1,50 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.metrics;
+
+import com.codahale.metrics.jmx.JmxReporter;
+import com.codahale.metrics.jmx.ObjectNameFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+public class RatisObjectNameFactory implements ObjectNameFactory {
+
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(JmxReporter.class);
+
+  @Override
+  public ObjectName createName(String type, String domain, String name) {
+    try {
+      ObjectName objectName = new ObjectName(domain, "name", name);
+      if (objectName.isPattern()) {
+        objectName = new ObjectName(domain, "name", ObjectName.quote(name));
+      }
+      return objectName;
+    } catch (MalformedObjectNameException e) {
+      try {
+        return new ObjectName(domain, "name", ObjectName.quote(name));
+      } catch (MalformedObjectNameException e1) {
+        LOGGER.warn("Unable to register {} {}", type, name, e1);
+        throw new RuntimeException(e1);
+      }
+    }
+  }
+}
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 3f213ba2..4e427313 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
@@ -24,7 +24,6 @@ import com.codahale.metrics.ConsoleReporter;
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.Gauge;
 import com.codahale.metrics.Histogram;
-import com.codahale.metrics.JmxReporter;
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.Metric;
 import com.codahale.metrics.MetricFilter;
@@ -32,6 +31,7 @@ import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.MetricRegistry.MetricSupplier;
 import com.codahale.metrics.MetricSet;
 import com.codahale.metrics.Timer;
+import com.codahale.metrics.jmx.JmxReporter;
 import org.apache.ratis.metrics.MetricRegistryInfo;
 import org.apache.ratis.metrics.RatisMetricRegistry;
 import 
org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting;
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 62707845..af000f3a 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,6 +23,8 @@ import static 
org.apache.ratis.server.metrics.LeaderElectionMetrics.LEADER_ELECT
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import 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;
@@ -30,10 +32,12 @@ import org.apache.ratis.protocol.RaftPeerId;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import java.util.SortedMap;
+
 /**
  * Test for LeaderElectionMetrics.
  */
-public class TestLeaderElectionMetrics {
+public class TestLeaderElectionMetrics extends BaseTest {
 
   private static LeaderElectionMetrics leaderElectionMetrics;
   private static RatisMetricRegistry ratisMetricRegistry;
@@ -50,9 +54,11 @@ public class TestLeaderElectionMetrics {
   @Test
   public void testOnLeaderElectionCompletion() throws Exception {
     leaderElectionMetrics.onNewLeaderElectionCompletion();
-    Long leaderElectionLatency = (Long) ratisMetricRegistry.getGauges((s, 
metric) ->
-        
s.contains(LAST_LEADER_ELECTION_ELAPSED_TIME)).values().iterator().next().getValue();
-    assertTrue(leaderElectionLatency > 0L);
+    final SortedMap<String, Gauge> gauges = ratisMetricRegistry.getGauges(
+        (s, metric) -> s.contains(LAST_LEADER_ELECTION_ELAPSED_TIME));
+    LOG.info("{} gauges: {}", LAST_LEADER_ELECTION_ELAPSED_TIME, gauges);
+    final Long leaderElectionLatency = 
(Long)gauges.values().iterator().next().getValue();
+    assertTrue("leaderElectionLatency = " + leaderElectionLatency, 
leaderElectionLatency > 0L);
   }
 
   @Test

Reply via email to