From d95ba38d88b59defa9a5830c8b38d765b88adeb7 Mon Sep 17 00:00:00 2001 From: stormbroken <181250184@smail.nju.edu.cn> Date: Fri, 15 Apr 2022 10:21:01 +0800 Subject: [PATCH 1/7] upgrade dropwizard-metric from 3.2.5 to 4.2.9(latest) and remain metrics-ganglia in 3.2.5(no 4.x) --- pom.xml | 11 +++++++++-- ratis-metrics/pom.xml | 5 +++++ .../org/apache/ratis/metrics/MetricsReporting.java | 5 ++--- .../org/apache/ratis/metrics/RatisMetricRegistry.java | 2 +- .../ratis/metrics/impl/RatisMetricRegistryImpl.java | 2 +- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 420416fa1c..ceff297b4c 100644 --- a/pom.xml +++ b/pom.xml @@ -217,7 +217,8 @@ 4 - 3.2.5 + 4.2.9 + 3.2.5 @@ -417,10 +418,16 @@ io.dropwizard.metrics - metrics-ganglia + metrics-jmx ${dropwizard.version} + + io.dropwizard.metrics + metrics-ganglia + ${dropwizard.ganglia.version} + + junit junit diff --git a/ratis-metrics/pom.xml b/ratis-metrics/pom.xml index 66354eac28..13b8c7ba31 100644 --- a/ratis-metrics/pom.xml +++ b/ratis-metrics/pom.xml @@ -65,6 +65,11 @@ metrics-jvm true + + io.dropwizard.metrics + metrics-jmx + true + io.dropwizard.metrics metrics-ganglia 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 e45cefa963..fabd43f769 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.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,7 +52,7 @@ public static Consumer stopConsoleReporter() { public static Consumer jmxReporter() { return registry -> { - Builder builder = + JmxReporter.Builder builder = JmxReporter.forRegistry(registry.getDropWizardMetricRegistry()); builder.inDomain(registry.getMetricRegistryInfo().getApplicationName()); JmxReporter reporter = builder.build(); 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 03f419c562..d4ee1738d4 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.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/impl/RatisMetricRegistryImpl.java b/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java index 3f213ba246..4e42731372 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.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.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; From 61bd888dd1450384106b0f6ef8aafe32cb4bc1c1 Mon Sep 17 00:00:00 2001 From: stormbroken <181250184@smail.nju.edu.cn> Date: Fri, 15 Apr 2022 11:40:18 +0800 Subject: [PATCH 2/7] remove optional --- ratis-metrics/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/ratis-metrics/pom.xml b/ratis-metrics/pom.xml index 13b8c7ba31..0ab840e530 100644 --- a/ratis-metrics/pom.xml +++ b/ratis-metrics/pom.xml @@ -68,7 +68,6 @@ io.dropwizard.metrics metrics-jmx - true io.dropwizard.metrics From 83e5e420af1f36e2bfdd003ed0b0311ecf4b698d Mon Sep 17 00:00:00 2001 From: stormbroken <181250184@smail.nju.edu.cn> Date: Fri, 15 Apr 2022 15:50:16 +0800 Subject: [PATCH 3/7] add RatisObjectNameFactory --- .../ratis/metrics/MetricsReporting.java | 1 + .../ratis/metrics/RatisObjectNameFactory.java | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisObjectNameFactory.java 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 fabd43f769..1aee82f1b5 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 @@ -55,6 +55,7 @@ public static Consumer jmxReporter() { 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/RatisObjectNameFactory.java b/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisObjectNameFactory.java new file mode 100644 index 0000000000..95459e025a --- /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 + *

+ * 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.metrics; + +import com.codahale.metrics.JmxReporter; +import com.codahale.metrics.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); + } + } + } +} From 2190b411b76717a87f10a626584b9fa06e3c1b8f Mon Sep 17 00:00:00 2001 From: stormbroken <181250184@smail.nju.edu.cn> Date: Fri, 15 Apr 2022 15:51:57 +0800 Subject: [PATCH 4/7] add RatisObjectNameFactory --- .../java/org/apache/ratis/metrics/RatisObjectNameFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index 95459e025a..7dda6c858d 100644 --- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisObjectNameFactory.java +++ b/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisObjectNameFactory.java @@ -18,8 +18,8 @@ package org.apache.ratis.metrics; -import com.codahale.metrics.JmxReporter; -import com.codahale.metrics.ObjectNameFactory; +import com.codahale.metrics.jmx.JmxReporter; +import com.codahale.metrics.jmx.ObjectNameFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; From 2d8d8b87a18684e122e54c080565a932d14eccd8 Mon Sep 17 00:00:00 2001 From: stormbroken <181250184@smail.nju.edu.cn> Date: Mon, 18 Apr 2022 20:15:15 +0800 Subject: [PATCH 5/7] upgrade ganglia level to 3.2.6 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ceff297b4c..4135c0fa1c 100644 --- a/pom.xml +++ b/pom.xml @@ -218,7 +218,7 @@ 4.2.9 - 3.2.5 + 3.2.6 From 8bee2e980c06523a79974000f761f87bb1d87ea7 Mon Sep 17 00:00:00 2001 From: stormbroken <181250184@smail.nju.edu.cn> Date: Fri, 22 Apr 2022 09:14:59 +0800 Subject: [PATCH 6/7] add log for test. --- .../server/metrics/TestLeaderElectionMetrics.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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 6270784526..90805cde20 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.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.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; @@ -49,10 +53,11 @@ public static void setUp() { @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 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 From a45e3b95a921f48589b5068b2fe9110ae1b2b756 Mon Sep 17 00:00:00 2001 From: stormbroken <181250184@smail.nju.edu.cn> Date: Fri, 22 Apr 2022 09:17:58 +0800 Subject: [PATCH 7/7] add log for test. --- .../apache/ratis/server/metrics/TestLeaderElectionMetrics.java | 1 + 1 file changed, 1 insertion(+) 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 90805cde20..af000f3a8e 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 @@ -53,6 +53,7 @@ public static void setUp() { @Test public void testOnLeaderElectionCompletion() throws Exception { + leaderElectionMetrics.onNewLeaderElectionCompletion(); final SortedMap gauges = ratisMetricRegistry.getGauges( (s, metric) -> s.contains(LAST_LEADER_ELECTION_ELAPSED_TIME)); LOG.info("{} gauges: {}", LAST_LEADER_ELECTION_ELAPSED_TIME, gauges);