You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by vi...@apache.org on 2020/10/30 05:33:39 UTC

[hudi] 09/14: [HUDI-1305] Added an API to shutdown and remove the metrics reporter. (#2132)

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

vinoth pushed a commit to branch rfc-15
in repository https://gitbox.apache.org/repos/asf/hudi.git

commit 86fdd659d899b74dab3cc1eb0965d90fc78ea554
Author: Prashant Wason <pw...@uber.com>
AuthorDate: Sun Oct 4 09:30:04 2020 -0700

    [HUDI-1305] Added an API to shutdown and remove the metrics reporter. (#2132)
    
    This helps in removing reporter once the test has complete. Prevents log pollution from un-necessary metric logs.
    
    - Added an API to shutdown the metrics reporter after tests.
---
 .../hudi/metrics/ConsoleMetricsReporter.java       |  3 +++
 .../main/java/org/apache/hudi/metrics/Metrics.java | 30 +++++++++++++++-------
 .../hudi/metrics/TestHoodieConsoleMetrics.java     |  6 +++++
 3 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/hudi-client/src/main/java/org/apache/hudi/metrics/ConsoleMetricsReporter.java b/hudi-client/src/main/java/org/apache/hudi/metrics/ConsoleMetricsReporter.java
index ca96109..b65c4ad 100644
--- a/hudi-client/src/main/java/org/apache/hudi/metrics/ConsoleMetricsReporter.java
+++ b/hudi-client/src/main/java/org/apache/hudi/metrics/ConsoleMetricsReporter.java
@@ -68,5 +68,8 @@ public class ConsoleMetricsReporter extends MetricsReporter {
 
   @Override
   public void stop() {
+    if (consoleReporter != null) {
+      consoleReporter.stop();
+    }
   }
 }
diff --git a/hudi-client/src/main/java/org/apache/hudi/metrics/Metrics.java b/hudi-client/src/main/java/org/apache/hudi/metrics/Metrics.java
index a9cf14e..c4107ce 100644
--- a/hudi-client/src/main/java/org/apache/hudi/metrics/Metrics.java
+++ b/hudi-client/src/main/java/org/apache/hudi/metrics/Metrics.java
@@ -52,18 +52,22 @@ public class Metrics {
     reporter.start();
 
     Runtime.getRuntime().addShutdownHook(new Thread(() -> {
-      try {
-        registerHoodieCommonMetrics();
-        reporter.report();
-        if (getReporter() != null) {
-          getReporter().close();
-        }
-      } catch (Exception e) {
-        LOG.warn("Error while closing reporter", e);
-      }
+      reportAndCloseReporter();
     }));
   }
 
+  private void reportAndCloseReporter() {
+    try {
+      registerHoodieCommonMetrics();
+      reporter.report();
+      if (getReporter() != null) {
+        getReporter().close();
+      }
+    } catch (Exception e) {
+      LOG.warn("Error while closing reporter", e);
+    }
+  }
+
   private void registerHoodieCommonMetrics() {
     registerGauges(Registry.getAllMetrics(true, true), Option.empty());
   }
@@ -85,6 +89,14 @@ public class Metrics {
     initialized = true;
   }
 
+  public static synchronized void shutdown() {
+    if (!initialized) {
+      return;
+    }
+    metrics.reportAndCloseReporter();
+    initialized = false;
+  }
+
   public static void registerGauges(Map<String, Long> metricsMap, Option<String> prefix) {
     String metricPrefix = prefix.isPresent() ? prefix.get() + "." : "";
     metricsMap.forEach((k, v) -> registerGauge(metricPrefix + k, v));
diff --git a/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieConsoleMetrics.java b/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieConsoleMetrics.java
index e644730..7424d0b 100644
--- a/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieConsoleMetrics.java
+++ b/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieConsoleMetrics.java
@@ -19,6 +19,7 @@
 package org.apache.hudi.metrics;
 
 import org.apache.hudi.config.HoodieWriteConfig;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -38,6 +39,11 @@ public class TestHoodieConsoleMetrics {
     new HoodieMetrics(config, "raw_table");
   }
 
+  @AfterEach
+  public void stop() {
+    Metrics.shutdown();
+  }
+
   @Test
   public void testRegisterGauge() {
     registerGauge("metric1", 123L);