ratis-grpc
org.apache.ratis
diff --git a/ratis-metrics-api/pom.xml b/ratis-metrics-api/pom.xml
new file mode 100644
index 0000000000..bb22fc5b16
--- /dev/null
+++ b/ratis-metrics-api/pom.xml
@@ -0,0 +1,38 @@
+
+
+
+ 4.0.0
+
+ ratis
+ org.apache.ratis
+ 3.0.0-SNAPSHOT
+
+
+ ratis-metrics-api
+ Apache Ratis Metrics API
+
+
+
+ ratis-common
+ org.apache.ratis
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/LongCounter.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/LongCounter.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/LongCounter.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/LongCounter.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistries.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistries.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistries.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistries.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryFactory.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistryFactory.java
similarity index 99%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryFactory.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistryFactory.java
index 8f45deb2b6..deb15f3445 100644
--- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryFactory.java
+++ b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistryFactory.java
@@ -1,5 +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
@@ -16,8 +15,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
package org.apache.ratis.metrics;
/**
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java
similarity index 69%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java
index 70efac6272..8cf30a97f6 100644
--- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java
+++ b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistryInfo.java
@@ -18,23 +18,25 @@
package org.apache.ratis.metrics;
-import org.apache.ratis.thirdparty.com.codahale.metrics.MetricRegistry;
+import org.apache.ratis.util.JavaUtils;
+import org.apache.ratis.util.MemoizedSupplier;
import java.util.Objects;
+import java.util.function.Supplier;
/**
- *
- * This class holds the name and description and JMX related context names for such group of
- * metrics.
+ * This class holds the name, description and JMX related context names for such group of metrics.
+ *
+ * This class is immutable.
*/
public class MetricRegistryInfo {
-
private final String prefix;
private final String metricsDescription;
private final String metricsComponentName;
- private final String fullName;
private final String applicationName;
+ private final Supplier hash = MemoizedSupplier.valueOf(this::computeHash);
+
/**
* @param prefix className or component name this metric registry collects metric for
* @param applicationName application Name needs to be in small case as it is used for hadoop2metrics
@@ -48,7 +50,6 @@ public MetricRegistryInfo(String prefix, String applicationName, String metricsC
this.applicationName = applicationName;
this.metricsComponentName = metricsComponentName;
this.metricsDescription = metricsDescription;
- this.fullName = MetricRegistry.name(applicationName, metricsComponentName, prefix);
}
public String getApplicationName() {
@@ -79,21 +80,33 @@ public String getPrefix() {
@Override
public boolean equals(Object obj) {
- if (obj instanceof MetricRegistryInfo) {
- return this.hashCode() == obj.hashCode();
- } else {
+ if (this == obj) {
+ return true;
+ } else if (!(obj instanceof MetricRegistryInfo)) {
return false;
}
+ final MetricRegistryInfo that = (MetricRegistryInfo) obj;
+ return Objects.equals(prefix, that.prefix)
+ && Objects.equals(metricsDescription, that.metricsDescription)
+ && Objects.equals(metricsComponentName, that.metricsComponentName)
+ && Objects.equals(applicationName, that.applicationName);
}
@Override
public int hashCode() {
- return Objects.hash(prefix, metricsDescription, metricsComponentName);
+ return hash.get();
}
- public String getName() {
- return fullName;
+ private Integer computeHash() {
+ return Objects.hash(prefix, metricsDescription, metricsComponentName);
}
-
+ @Override
+ public String toString() {
+ return JavaUtils.getClassSimpleName(getClass())
+ + ": applicationName=" + getApplicationName()
+ + ", metricsComponentName=" + getMetricsComponentName()
+ + ", prefix=" + getPrefix()
+ + ", metricsDescription=" + getMetricsDescription();
+ }
}
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/RatisMetricRegistry.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetrics.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/RatisMetrics.java
similarity index 93%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetrics.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/RatisMetrics.java
index 7481394ee8..32bcf52e3c 100644
--- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/RatisMetrics.java
+++ b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/RatisMetrics.java
@@ -59,9 +59,7 @@ protected static > Map newTimerMap(
protected static RatisMetricRegistry create(MetricRegistryInfo info) {
Optional metricRegistry = MetricRegistries.global().get(info);
return metricRegistry.orElseGet(() -> {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Creating Metrics Registry : {}", info.getName());
- }
+ LOG.debug("Creating {}", info);
return MetricRegistries.global().create(info);
});
}
@@ -74,9 +72,7 @@ protected RatisMetrics(RatisMetricRegistry registry) {
public void unregister() {
MetricRegistryInfo info = registry.getMetricRegistryInfo();
- if (LOG.isDebugEnabled()) {
- LOG.debug("Unregistering Metrics Registry : {}", info.getName());
- }
+ LOG.debug("Unregistering {}", info);
Optional metricRegistry = MetricRegistries.global().get(info);
if (metricRegistry.isPresent()) {
MetricRegistries.global().remove(info);
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/Timekeeper.java b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/Timekeeper.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/Timekeeper.java
rename to ratis-metrics-api/src/main/java/org/apache/ratis/metrics/Timekeeper.java
diff --git a/ratis-metrics/pom.xml b/ratis-metrics-default/pom.xml
similarity index 88%
rename from ratis-metrics/pom.xml
rename to ratis-metrics-default/pom.xml
index 96e8716521..178f892761 100644
--- a/ratis-metrics/pom.xml
+++ b/ratis-metrics-default/pom.xml
@@ -21,10 +21,14 @@
3.0.0-SNAPSHOT
- ratis-metrics
- Apache Ratis Metrics
+ ratis-metrics-default
+ Apache Ratis Metrics Default Implementation
+
+ ratis-metrics-api
+ org.apache.ratis
+
ratis-proto
org.apache.ratis
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/DefaultTimekeeperImpl.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/DefaultTimekeeperImpl.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/DefaultTimekeeperImpl.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/DefaultTimekeeperImpl.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/JvmMetrics.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/JvmMetrics.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/JvmMetrics.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/JvmMetrics.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/MetricRegistryFactoryImpl.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistryFactoryImpl.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/MetricRegistryFactoryImpl.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistryFactoryImpl.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/MetricsReporting.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricsReporting.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/MetricsReporting.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricsReporting.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java
similarity index 94%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java
index 0de6bc02d7..4e8e58d474 100644
--- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java
+++ b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/RatisMetricRegistryImpl.java
@@ -32,6 +32,7 @@
import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting;
import java.util.Map;
+import java.util.Objects;
import java.util.SortedMap;
import java.util.function.Supplier;
@@ -49,13 +50,14 @@ static RatisMetricRegistryImpl cast(RatisMetricRegistry registry) {
private final MetricRegistry metricRegistry = new MetricRegistry();
private final MetricRegistryInfo info;
+ private final String namePrefix;
private JmxReporter jmxReporter;
private ConsoleReporter consoleReporter;
public RatisMetricRegistryImpl(MetricRegistryInfo info) {
- super();
- this.info = info;
+ this.info = Objects.requireNonNull(info, "info == null");
+ this.namePrefix = MetricRegistry.name(info.getApplicationName(), info.getMetricsComponentName(), info.getPrefix());
}
@Override
@@ -111,7 +113,7 @@ public Metric get(String shortName) {
}
private String getMetricName(String shortName) {
- return MetricRegistry.name(info.getName(), shortName);
+ return MetricRegistry.name(namePrefix, shortName);
}
private T register(String name, T metric) throws IllegalArgumentException {
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisObjectNameFactory.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/RatisObjectNameFactory.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RatisObjectNameFactory.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/RatisObjectNameFactory.java
diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RefCountingMap.java b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/RefCountingMap.java
similarity index 100%
rename from ratis-metrics/src/main/java/org/apache/ratis/metrics/impl/RefCountingMap.java
rename to ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/RefCountingMap.java
diff --git a/ratis-metrics/src/main/resources/META-INF/services/org.apache.ratis.metrics.MetricRegistries b/ratis-metrics-default/src/main/resources/META-INF/services/org.apache.ratis.metrics.MetricRegistries
similarity index 100%
rename from ratis-metrics/src/main/resources/META-INF/services/org.apache.ratis.metrics.MetricRegistries
rename to ratis-metrics-default/src/main/resources/META-INF/services/org.apache.ratis.metrics.MetricRegistries
diff --git a/ratis-metrics/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java b/ratis-metrics-default/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
similarity index 99%
rename from ratis-metrics/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
rename to ratis-metrics-default/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
index 8429ded139..cbfa6810c6 100644
--- a/ratis-metrics/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
+++ b/ratis-metrics-default/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.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
diff --git a/ratis-metrics/src/test/java/org/apache/ratis/metrics/impl/TestRefCountingMap.java b/ratis-metrics-default/src/test/java/org/apache/ratis/metrics/impl/TestRefCountingMap.java
similarity index 100%
rename from ratis-metrics/src/test/java/org/apache/ratis/metrics/impl/TestRefCountingMap.java
rename to ratis-metrics-default/src/test/java/org/apache/ratis/metrics/impl/TestRefCountingMap.java
diff --git a/ratis-metrics/src/test/resources/hadoop-metrics2.properties b/ratis-metrics/src/test/resources/hadoop-metrics2.properties
deleted file mode 100644
index fdec0fad22..0000000000
--- a/ratis-metrics/src/test/resources/hadoop-metrics2.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env bash
-#
-# 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.
-
-#There are two options with file names:
-# 1. hadoop-metrics2-[prefix].properties
-# 2. hadoop-metrics2.properties
-# Either will be loaded by the metrics system (but not both).
-#
-# NOTE: The metrics system is only initialized once per JVM (but does ref-counting, so we can't
-# shutdown and restart), so we only load the first prefix that we find. Generally, this will be
-# ratis_log_service_metadata/ratis_log_service/ratis (unless someone else registers first,
-# but for many clients, there should only be one).
-#
-# Usually, you would use hadoop-metrics2-phoenix.properties, but we use the generic
-# hadoop-metrics2.properties to ensure it these are loaded regardless of where we are running,
-# assuming there isn't another config on the classpath.
-
-#
-# When specifying sinks, the syntax to use is:
-# [prefix].[source|sink].[instance].[options]
-# See javadoc of package-info.java for org.apache.hadoop.metrics2 for detail
-
-ratis_test.source.start_mbeans=true
-ratis.sink.sink0.class=org.apache.ratis.metrics.TestHadoop2MetricsSink
-#ratis_test.sink.ganglia.servers=localhost:8649
-#*.sink.graphite.class=org.apache.hadoop.metrics2.sink.GraphiteSink
-#ratis_test.sink.graphite.server_host=localhost
-#ratis_test.sink.graphite.server_port=2003
-# Frequency, in seconds, of sampling from the sources
-*.period=1
diff --git a/ratis-server/pom.xml b/ratis-server/pom.xml
index c145137f04..c1a433e139 100644
--- a/ratis-server/pom.xml
+++ b/ratis-server/pom.xml
@@ -82,15 +82,15 @@
org.apache.ratis
- ratis-metrics
+ ratis-metrics-api
org.apache.ratis
- ratis-metrics
- test-jar
+ ratis-metrics-default
test
+
com.github.spotbugs
spotbugs-annotations
diff --git a/ratis-test/pom.xml b/ratis-test/pom.xml
index ce05786a92..fcc751049c 100644
--- a/ratis-test/pom.xml
+++ b/ratis-test/pom.xml
@@ -54,6 +54,12 @@
test-jar
+
+ ratis-metrics-default
+ org.apache.ratis
+ test
+
+
ratis-netty
org.apache.ratis
diff --git a/ratis-grpc/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java b/ratis-test/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java
similarity index 100%
rename from ratis-grpc/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java
rename to ratis-test/src/test/java/org/apache/ratis/grpc/server/TestGrpcServerMetrics.java