diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java index 48128c1..4ffc2b2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java @@ -96,11 +96,10 @@ final MetricsSystem metricsSystem; // Metrics publishing status - private long flushPeriodMs; - private boolean flushOnPeriod = false; // true if period elapsed - private boolean finished = false; // true if container finished - private boolean unregister = false; // unregister - private long unregisterDelayMs; + private final long flushPeriodMs; + private final long unregisterDelayMs; + private volatile boolean flushOnPeriod = false; // true if period elapsed + private volatile boolean finished = false; // true if container finished private Timer timer; // lazily initialized /** @@ -188,17 +187,11 @@ synchronized static void unregisterContainerMetrics(ContainerMetrics cm) { @Override public synchronized void getMetrics(MetricsCollector collector, boolean all) { //Container goes through registered -> finished -> unregistered. - if (unregister) { - return; - } - if (finished || flushOnPeriod) { registry.snapshot(collector.addRecord(registry.info()), all); } - if (finished) { - this.unregister = true; - } else if (flushOnPeriod) { + if (flushOnPeriod) { flushOnPeriod = false; scheduleTimerTaskIfRequired(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainerMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainerMetrics.java index 2beb927..72963c2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainerMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainerMetrics.java @@ -29,7 +29,6 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; @@ -71,11 +70,12 @@ public void testContainerMetricsFlow() throws InterruptedException { collector.clear(); metrics.getMetrics(collector, true); - assertEquals(ERR, 0, collector.getRecords().size()); + assertEquals(ERR, 1, collector.getRecords().size()); + collector.clear(); Thread.sleep(110); metrics.getMetrics(collector, true); - assertEquals(ERR, 0, collector.getRecords().size()); + assertEquals(ERR, 1, collector.getRecords().size()); } @Test @@ -128,7 +128,7 @@ public void testContainerMetricsLimit() throws InterruptedException { public void testContainerMetricsFinished() throws InterruptedException { MetricsSystemImpl system = new MetricsSystemImpl(); system.init("test"); - MetricsCollectorImpl collector = new MetricsCollectorImpl(); + ApplicationId appId = ApplicationId.newInstance(1234, 3); ApplicationAttemptId appAttemptId = ApplicationAttemptId.newInstance(appId, 4);