diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java index a59bb5c..9d2ecea 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java @@ -86,7 +86,7 @@ private long availableMB; private long allocatedOpportunisticMB; - public NodeManagerMetrics(JvmMetrics jvmMetrics) { + private NodeManagerMetrics(JvmMetrics jvmMetrics) { this.jvmMetrics = jvmMetrics; } @@ -94,8 +94,8 @@ public static NodeManagerMetrics create() { return create(DefaultMetricsSystem.instance()); } - static NodeManagerMetrics create(MetricsSystem ms) { - JvmMetrics jm = JvmMetrics.create("NodeManager", null, ms); + private static NodeManagerMetrics create(MetricsSystem ms) { + JvmMetrics jm = JvmMetrics.initSingleton("NodeManager", null); return ms.register(new NodeManagerMetrics(jm)); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java index a08ee82..4b78791 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java @@ -19,19 +19,41 @@ import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.metrics2.MetricsRecordBuilder; +import org.apache.hadoop.metrics2.source.JvmMetrics; import static org.apache.hadoop.test.MetricsAsserts.*; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.util.Records; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; public class TestNodeManagerMetrics { static final int GiB = 1024; // MiB - @Test public void testNames() { + private NodeManagerMetrics metrics; + + @Before + public void setup() { DefaultMetricsSystem.initialize("NodeManager"); - NodeManagerMetrics metrics = NodeManagerMetrics.create(); + metrics = NodeManagerMetrics.create(); + } + + @After + public void tearDown() { + DefaultMetricsSystem.shutdown(); + } + + @Test + public void testReferenceOfSingletonJvmMetrics() { + // calling JvmMetrics.initSingleton() will cause JvmMetrics to be + // registered again with the DefaultMetricsSystem if the singleton + // JvmMetrics instance is not initialized by NodeManagerMetrics. + JvmMetrics.initSingleton("NodeManagerModule", null); + } + + @Test public void testNames() { Resource total = Records.newRecord(Resource.class); total.setMemorySize(8*GiB); total.setVirtualCores(16);