diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java index 48a75c0..fc644dd 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java @@ -925,13 +925,15 @@ private static void addDeprecatedKeys() { @Private public static final boolean DEFAULT_NM_CONTAINER_METRICS_ENABLE = true; - /** Container metrics flush period. -1 for flush on completion. */ + /** Container metrics flush period. -1 for flush on completion. + * 0 for always flush. + */ @Private public static final String NM_CONTAINER_METRICS_PERIOD_MS = NM_PREFIX + "container-metrics.period-ms"; @Private - public static final int DEFAULT_NM_CONTAINER_METRICS_PERIOD_MS = -1; - + public static final int DEFAULT_NM_CONTAINER_METRICS_PERIOD_MS = 0; + /** Prefix for all node manager disk health checker configs. */ private static final String NM_DISK_HEALTH_CHECK_PREFIX = "yarn.nodemanager.disk-health-checker."; diff --git 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 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 c364143..949d826 100644 --- 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 +++ 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 @@ -39,6 +39,8 @@ import static org.apache.hadoop.metrics2.lib.Interns.info; +import com.google.common.annotations.VisibleForTesting; + @InterfaceAudience.Private @Metrics(context="container") public class ContainerMetrics implements MetricsSource { @@ -250,6 +252,13 @@ public void run() { } }; timer.schedule(timerTask, flushPeriodMs); + } else if (flushPeriodMs == 0L) { + flushOnPeriod = true; } } + + @VisibleForTesting + boolean getFlushOnPeriod() { + return flushOnPeriod; + } } diff --git 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 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 bdf9994..b233ede 100644 --- 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 +++ 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 @@ -27,6 +27,7 @@ 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; import static org.mockito.Mockito.doReturn; @@ -117,4 +118,11 @@ public void testContainerMetricsLimit() throws InterruptedException { collector.clear(); } + + @Test + public void testContainerMetricsZeroFlushPeriod() { + ContainerId containerId = mock(ContainerId.class); + ContainerMetrics metrics = ContainerMetrics.forContainer(containerId, 0); + assertTrue(metrics.getFlushOnPeriod()); + } }