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