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

szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new 5912ce555 RATIS-1741. Add a removeReporterRegistration method. (#778)
5912ce555 is described below

commit 5912ce555904168ee87d7553e40c522031f96702
Author: Sumit Agrawal <[email protected]>
AuthorDate: Fri Nov 11 13:00:58 2022 +0530

    RATIS-1741. Add a removeReporterRegistration method. (#778)
---
 .../org/apache/ratis/metrics/MetricRegistries.java | 11 +++++++++
 .../ratis/metrics/impl/MetricRegistriesImpl.java   |  7 ++++++
 .../ratis/metrics/TestMetricRegistriesLoader.java  | 25 ++++++++++++++++++++
 .../dropwizard3/Dm3MetricRegistriesImpl.java       |  7 ++++++
 .../dropwizard3/TestLoadDm3MetricRegistries.java   | 27 ++++++++++++++++++++++
 5 files changed, 77 insertions(+)

diff --git 
a/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistries.java
 
b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistries.java
index 536cdbf56..3a11213bb 100644
--- 
a/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistries.java
+++ 
b/ratis-metrics-api/src/main/java/org/apache/ratis/metrics/MetricRegistries.java
@@ -93,10 +93,21 @@ public abstract class MetricRegistries {
    * Add hook to register reporter for the metricRegistry.
    *
    * @param reporterRegistration Consumer to create the reporter for the 
registry.
+   * @param stopReporter Consumer to stop the reporter for the registry.
    */
   public abstract void addReporterRegistration(Consumer<RatisMetricRegistry> 
reporterRegistration,
       Consumer<RatisMetricRegistry> stopReporter);
 
+  /**
+   * Remove hook of reporter for the metricRegistry.
+   *
+   * @param reporterRegistration Consumer to create the reporter for the 
registry.
+   * @param stopReporter Consumer to stop the reporter for the registry.
+   */
+  public void removeReporterRegistration(Consumer<RatisMetricRegistry> 
reporterRegistration,
+      Consumer<RatisMetricRegistry> stopReporter) {
+  }
+
   /**
    * Enable jmx reporter for the metricRegistry.
    */
diff --git 
a/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java
 
b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java
index e4822a968..c46995921 100644
--- 
a/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java
+++ 
b/ratis-metrics-default/src/main/java/org/apache/ratis/metrics/impl/MetricRegistriesImpl.java
@@ -113,6 +113,13 @@ public class MetricRegistriesImpl extends MetricRegistries 
{
     this.stopReporters.add(stopReporter);
   }
 
+  @Override
+  public void removeReporterRegistration(Consumer<RatisMetricRegistry> 
reporterRegistration,
+      Consumer<RatisMetricRegistry> stopReporter) {
+    this.reporterRegistrations.remove(reporterRegistration);
+    this.stopReporters.remove(stopReporter);
+  }
+
   @Override
   public void enableJmxReporter() {
     addReporterRegistration(
diff --git 
a/ratis-metrics-default/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
 
b/ratis-metrics-default/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
index d06dec8ff..0093fa759 100644
--- 
a/ratis-metrics-default/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
+++ 
b/ratis-metrics-default/src/test/java/org/apache/ratis/metrics/TestMetricRegistriesLoader.java
@@ -21,6 +21,8 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.mockito.Mockito.mock;
 
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
 import org.apache.ratis.metrics.impl.MetricRegistriesImpl;
 import org.junit.Assert;
 import org.junit.Test;
@@ -58,4 +60,27 @@ public class TestMetricRegistriesLoader {
     Assert.assertSame(MetricRegistriesImpl.class, r.getClass());
   }
 
+  @Test
+  public void testAddRemoveReporter() {
+    final AtomicLong cntr = new AtomicLong(0L);
+    final MetricRegistries r = MetricRegistries.global();
+    Consumer<RatisMetricRegistry> reporter = v-> cntr.incrementAndGet();
+    Consumer<RatisMetricRegistry> stopReporter = v-> cntr.incrementAndGet();
+    r.addReporterRegistration(reporter, stopReporter);
+    
+    // check if add and remove of metric do reporting counter increase
+    MetricRegistryInfo info = new MetricRegistryInfo("t1", "t1", "t1", "t1");
+    r.create(info);
+    Assert.assertTrue(cntr.get() == 1);
+    r.remove(info);
+    Assert.assertTrue(cntr.get() == 2);
+
+    // after removal, add and remove of metric must not do any increase
+    r.removeReporterRegistration(reporter, stopReporter);
+    r.create(info);
+    Assert.assertTrue(cntr.get() == 2);
+    r.remove(info);
+    Assert.assertTrue(cntr.get() == 2);
+  }
+
 }
diff --git 
a/ratis-metrics-dropwizard3/src/main/java/org/apache/ratis/metrics/dropwizard3/Dm3MetricRegistriesImpl.java
 
b/ratis-metrics-dropwizard3/src/main/java/org/apache/ratis/metrics/dropwizard3/Dm3MetricRegistriesImpl.java
index 7fe4b8daa..9829e6126 100644
--- 
a/ratis-metrics-dropwizard3/src/main/java/org/apache/ratis/metrics/dropwizard3/Dm3MetricRegistriesImpl.java
+++ 
b/ratis-metrics-dropwizard3/src/main/java/org/apache/ratis/metrics/dropwizard3/Dm3MetricRegistriesImpl.java
@@ -113,6 +113,13 @@ public class Dm3MetricRegistriesImpl extends 
MetricRegistries {
     this.stopReporters.add(stopReporter);
   }
 
+  @Override
+  public void removeReporterRegistration(Consumer<RatisMetricRegistry> 
reporterRegistration,
+      Consumer<RatisMetricRegistry> stopReporter) {
+    this.reporterRegistrations.remove(reporterRegistration);
+    this.stopReporters.remove(stopReporter);
+  }
+
   @Override
   public void enableJmxReporter() {
     addReporterRegistration(
diff --git 
a/ratis-metrics-dropwizard3/src/test/java/org/apache/ratis/metrics/dropwizard3/TestLoadDm3MetricRegistries.java
 
b/ratis-metrics-dropwizard3/src/test/java/org/apache/ratis/metrics/dropwizard3/TestLoadDm3MetricRegistries.java
index dce4e2b94..92a36f5c8 100644
--- 
a/ratis-metrics-dropwizard3/src/test/java/org/apache/ratis/metrics/dropwizard3/TestLoadDm3MetricRegistries.java
+++ 
b/ratis-metrics-dropwizard3/src/test/java/org/apache/ratis/metrics/dropwizard3/TestLoadDm3MetricRegistries.java
@@ -17,8 +17,12 @@
  */
 package org.apache.ratis.metrics.dropwizard3;
 
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
 import org.apache.ratis.metrics.MetricRegistries;
 import org.apache.ratis.metrics.MetricRegistriesLoader;
+import org.apache.ratis.metrics.MetricRegistryInfo;
+import org.apache.ratis.metrics.RatisMetricRegistry;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -31,4 +35,27 @@ public class TestLoadDm3MetricRegistries {
     final MetricRegistries r = MetricRegistriesLoader.load();
     Assert.assertSame(Dm3MetricRegistriesImpl.class, r.getClass());
   }
+
+  @Test
+  public void testAddRemoveReporter() {
+    final AtomicLong cntr = new AtomicLong(0L);
+    final MetricRegistries r = Dm3MetricRegistriesImpl.global();
+    Consumer<RatisMetricRegistry> reporter = v-> cntr.incrementAndGet();
+    Consumer<RatisMetricRegistry> stopReporter = v-> cntr.incrementAndGet();
+    r.addReporterRegistration(reporter, stopReporter);
+
+    // check if add and remove of metric do reporting counter increase
+    MetricRegistryInfo info = new MetricRegistryInfo("t1", "t1", "t1", "t1");
+    r.create(info);
+    Assert.assertTrue(cntr.get() == 1);
+    r.remove(info);
+    Assert.assertTrue(cntr.get() == 2);
+
+    // after removal, add and remove of metric must not do any increase
+    r.removeReporterRegistration(reporter, stopReporter);
+    r.create(info);
+    Assert.assertTrue(cntr.get() == 2);
+    r.remove(info);
+    Assert.assertTrue(cntr.get() == 2);
+  }
 }

Reply via email to