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