Repository: hadoop
Updated Branches:
  refs/heads/trunk 281d83604 -> 14b3c2695


HADOOP-14954. MetricsSystemImpl#init should increment refCount when already 
initialized. Contributed by John Zhuge.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/14b3c269
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/14b3c269
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/14b3c269

Branch: refs/heads/trunk
Commit: 14b3c2695b152285ed2919f2aa5a25e247c47871
Parents: 281d836
Author: John Zhuge <jzh...@cloudera.com>
Authored: Mon Oct 16 13:29:29 2017 -0700
Committer: John Zhuge <jzh...@apache.org>
Committed: Fri Oct 20 16:13:41 2017 -0700

----------------------------------------------------------------------
 .../hadoop/metrics2/impl/MetricsSystemImpl.java | 12 ++++-
 .../metrics2/impl/TestMetricsSystemImpl.java    | 46 ++++++++++++++++++++
 2 files changed, 57 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/14b3c269/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
index ee1672e..c507a77 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
@@ -140,6 +140,16 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
     this(null);
   }
 
+  @VisibleForTesting
+  boolean isMonitoring() {
+    return monitoring;
+  }
+
+  @VisibleForTesting
+  int getRefCount() {
+    return refCount;
+  }
+
   /**
    * Initialized the metrics system with a prefix.
    * @param prefix  the system will look for configs with the prefix
@@ -147,12 +157,12 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
    */
   @Override
   public synchronized MetricsSystem init(String prefix) {
+    ++refCount;
     if (monitoring && !DefaultMetricsSystem.inMiniClusterMode()) {
       LOG.warn(this.prefix +" metrics system already initialized!");
       return this;
     }
     this.prefix = checkNotNull(prefix, "prefix");
-    ++refCount;
     if (monitoring) {
       // in mini cluster mode
       LOG.info(this.prefix +" metrics system started (again)");

http://git-wip-us.apache.org/repos/asf/hadoop/blob/14b3c269/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java
 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java
index abd1b13..879de2d 100644
--- 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java
+++ 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java
@@ -26,6 +26,8 @@ import java.util.concurrent.atomic.*;
 
 import javax.annotation.Nullable;
 
+import org.hamcrest.CoreMatchers;
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -559,6 +561,50 @@ public class TestMetricsSystemImpl {
     ms.shutdown();
   }
 
+  @Test
+  public void testInitShutdown() {
+    boolean oldMode = DefaultMetricsSystem.inMiniClusterMode();
+    try {
+      DefaultMetricsSystem.setMiniClusterMode(true);
+      runInitShutdownTests();
+
+      DefaultMetricsSystem.setMiniClusterMode(false);
+      runInitShutdownTests();
+    } finally {
+      DefaultMetricsSystem.setMiniClusterMode(oldMode);
+    }
+  }
+
+  private void runInitShutdownTests() {
+    MetricsSystemImpl ms = new MetricsSystemImpl();
+    Assert.assertThat(ms.isMonitoring(), CoreMatchers.is(false));
+    Assert.assertThat(ms.getRefCount(), CoreMatchers.is(0));
+
+    ms.init("TestMetricsSystem1");
+    Assert.assertThat(ms.isMonitoring(), CoreMatchers.is(true));
+    Assert.assertThat(ms.getRefCount(), CoreMatchers.is(1));
+
+    ms.shutdown();
+    Assert.assertThat(ms.isMonitoring(), CoreMatchers.is(false));
+    Assert.assertThat(ms.getRefCount(), CoreMatchers.is(0));
+
+    ms.init("TestMetricsSystem2");
+    Assert.assertThat(ms.isMonitoring(), CoreMatchers.is(true));
+    Assert.assertThat(ms.getRefCount(), CoreMatchers.is(1));
+
+    ms.init("TestMetricsSystem3");
+    Assert.assertThat(ms.isMonitoring(), CoreMatchers.is(true));
+    Assert.assertThat(ms.getRefCount(), CoreMatchers.is(2));
+
+    ms.shutdown();
+    Assert.assertThat(ms.isMonitoring(), CoreMatchers.is(true));
+    Assert.assertThat(ms.getRefCount(), CoreMatchers.is(1));
+
+    ms.shutdown();
+    Assert.assertThat(ms.isMonitoring(), CoreMatchers.is(false));
+    Assert.assertThat(ms.getRefCount(), CoreMatchers.is(0));
+  }
+
   @Metrics(context="test")
   private static class TestSource {
     @Metric("C1 desc") MutableCounterLong c1;


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to