+ * 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.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 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;
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..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
@@ -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;
@@ -50,9 +54,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