YARN-7625. Expose NM node/containers resource utilization in JVM metrics. Contributed by Weiwei Yang
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/06f0eb2d Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/06f0eb2d Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/06f0eb2d Branch: refs/heads/HDFS-7240 Commit: 06f0eb2dce2a7a098f7844682ea6c232d0ddb0be Parents: 8bb83a8 Author: Jason Lowe <[email protected]> Authored: Tue Dec 12 12:56:26 2017 -0600 Committer: Jason Lowe <[email protected]> Committed: Tue Dec 12 12:56:26 2017 -0600 ---------------------------------------------------------------------- .../hadoop/yarn/server/nodemanager/Context.java | 3 + .../yarn/server/nodemanager/NodeManager.java | 19 +++++- .../nodemanager/NodeResourceMonitorImpl.java | 16 ++++- .../monitor/ContainersMonitorImpl.java | 13 +++++ .../nodemanager/metrics/NodeManagerMetrics.java | 61 ++++++++++++++++++++ .../nodemanager/TestNodeResourceMonitor.java | 34 ++++++++++- .../amrmproxy/BaseAMRMProxyTest.java | 6 ++ .../monitor/MockResourceCalculatorPlugin.java | 5 ++ .../monitor/TestContainersMonitor.java | 20 ++++++- 9 files changed, 170 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/Context.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/Context.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/Context.java index a1c474f..6774cf0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/Context.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/Context.java @@ -35,6 +35,7 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.Ap import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container; import org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.ResourcePluginManager; +import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics; import org.apache.hadoop.yarn.server.nodemanager.recovery.NMStateStoreService; import org.apache.hadoop.yarn.server.scheduler.OpportunisticContainerAllocator; import org.apache.hadoop.yarn.server.nodemanager.security.NMContainerTokenSecretManager; @@ -125,4 +126,6 @@ public interface Context { ContainerStateTransitionListener getContainerStateTransitionListener(); ResourcePluginManager getResourcePluginManager(); + + NodeManagerMetrics getNodeManagerMetrics(); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java index bddc7c3..179b01e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java @@ -205,7 +205,7 @@ public class NodeManager extends CompositeService } protected NodeResourceMonitor createNodeResourceMonitor() { - return new NodeResourceMonitorImpl(); + return new NodeResourceMonitorImpl(context); } protected ContainerManagerImpl createContainerManager(Context context, @@ -242,6 +242,7 @@ public class NodeManager extends CompositeService NMContext nmContext = new NMContext(containerTokenSecretManager, nmTokenSecretManager, dirsHandler, aclsManager, stateStore, isDistSchedulerEnabled, conf); + nmContext.setNodeManagerMetrics(metrics); DefaultContainerStateListener defaultListener = new DefaultContainerStateListener(); nmContext.setContainerStateTransitionListener(defaultListener); @@ -574,6 +575,8 @@ public class NodeManager extends CompositeService private Configuration conf = null; + private NodeManagerMetrics metrics = null; + protected final ConcurrentMap<ApplicationId, Application> applications = new ConcurrentHashMap<ApplicationId, Application>(); @@ -823,6 +826,20 @@ public class NodeManager extends CompositeService return resourcePluginManager; } + /** + * Returns the {@link NodeManagerMetrics} instance of this node. + * This might return a null if the instance was not set to the context. + * @return node manager metrics. + */ + @Override + public NodeManagerMetrics getNodeManagerMetrics() { + return metrics; + } + + public void setNodeManagerMetrics(NodeManagerMetrics nmMetrics) { + this.metrics = nmMetrics; + } + public void setResourcePluginManager( ResourcePluginManager resourcePluginManager) { this.resourcePluginManager = resourcePluginManager; http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeResourceMonitorImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeResourceMonitorImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeResourceMonitorImpl.java index 8b96ba5..d489835 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeResourceMonitorImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeResourceMonitorImpl.java @@ -22,6 +22,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.service.AbstractService; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.api.records.ResourceUtilization; +import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics; import org.apache.hadoop.yarn.util.ResourceCalculatorPlugin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,12 +49,14 @@ public class NodeResourceMonitorImpl extends AbstractService implements /** Current <em>resource utilization</em> of the node. */ private ResourceUtilization nodeUtilization; + private Context nmContext; + /** * Initialize the node resource monitor. */ - public NodeResourceMonitorImpl() { + public NodeResourceMonitorImpl(Context context) { super(NodeResourceMonitorImpl.class.getName()); - + this.nmContext = context; this.monitoringThread = new MonitoringThread(); } @@ -149,6 +152,15 @@ public class NodeResourceMonitorImpl extends AbstractService implements (int) (vmem >> 20), // B -> MB vcores); // Used Virtual Cores + // Publish the node utilization metrics to node manager + // metrics system. + NodeManagerMetrics nmMetrics = nmContext.getNodeManagerMetrics(); + if (nmMetrics != null) { + nmMetrics.setNodeUsedMemGB(nodeUtilization.getPhysicalMemory()); + nmMetrics.setNodeUsedVMemGB(nodeUtilization.getVirtualMemory()); + nmMetrics.setNodeCpuUtilization(nodeUtilization.getCPU()); + } + try { Thread.sleep(monitoringInterval); } catch (InterruptedException e) { http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java ---------------------------------------------------------------------- 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/ContainersMonitorImpl.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/ContainersMonitorImpl.java index 2b99cc7..48ec147 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/ContainersMonitorImpl.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/ContainersMonitorImpl.java @@ -20,6 +20,7 @@ package org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.classification.InterfaceAudience.Private; @@ -488,6 +489,18 @@ public class ContainersMonitorImpl extends AbstractService implements // Save the aggregated utilization of the containers setContainersUtilization(trackedContainersUtilization); + // Publish the container utilization metrics to node manager + // metrics system. + NodeManagerMetrics nmMetrics = context.getNodeManagerMetrics(); + if (nmMetrics != null) { + nmMetrics.setContainerUsedMemGB( + trackedContainersUtilization.getPhysicalMemory()); + nmMetrics.setContainerUsedVMemGB( + trackedContainersUtilization.getVirtualMemory()); + nmMetrics.setContainerCpuUtilization( + trackedContainersUtilization.getCPU()); + } + try { Thread.sleep(monitoringInterval); } catch (InterruptedException e) { http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java b/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..f0abfd4 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java @@ -24,6 +24,7 @@ import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.metrics2.lib.MutableCounterInt; import org.apache.hadoop.metrics2.lib.MutableGaugeInt; import org.apache.hadoop.metrics2.lib.MutableGaugeLong; +import org.apache.hadoop.metrics2.lib.MutableGaugeFloat; import org.apache.hadoop.metrics2.lib.MutableRate; import org.apache.hadoop.metrics2.source.JvmMetrics; import org.apache.hadoop.yarn.api.records.Resource; @@ -77,6 +78,18 @@ public class NodeManagerMetrics { MutableGaugeLong publicBytesDeleted; @Metric("# of bytes deleted from the private local cache") MutableGaugeLong privateBytesDeleted; + @Metric("Current used physical memory by all containers in GB") + MutableGaugeInt containerUsedMemGB; + @Metric("Current used virtual memory by all containers in GB") + MutableGaugeInt containerUsedVMemGB; + @Metric("Aggregated CPU utilization of all containers") + MutableGaugeFloat containerCpuUtilization; + @Metric("Current used memory by this node in GB") + MutableGaugeInt nodeUsedMemGB; + @Metric("Current used virtual memory by this node in GB") + MutableGaugeInt nodeUsedVMemGB; + @Metric("Current CPU utilization") + MutableGaugeFloat nodeCpuUtilization; // CHECKSTYLE:ON:VisibilityModifier @@ -316,4 +329,52 @@ public class NodeManagerMetrics { public long getPrivateBytesDeleted() { return this.privateBytesDeleted.value(); } + + public void setContainerUsedMemGB(long usedMem) { + this.containerUsedMemGB.set((int)Math.floor(usedMem/1024d)); + } + + public int getContainerUsedMemGB() { + return this.containerUsedMemGB.value(); + } + + public void setContainerUsedVMemGB(long usedVMem) { + this.containerUsedVMemGB.set((int)Math.floor(usedVMem/1024d)); + } + + public int getContainerUsedVMemGB() { + return this.containerUsedVMemGB.value(); + } + + public void setContainerCpuUtilization(float cpuUtilization) { + this.containerCpuUtilization.set(cpuUtilization); + } + + public float getContainerCpuUtilization() { + return this.containerCpuUtilization.value(); + } + + public void setNodeUsedMemGB(long totalUsedMemGB) { + this.nodeUsedMemGB.set((int)Math.floor(totalUsedMemGB/1024d)); + } + + public int getNodeUsedMemGB() { + return nodeUsedMemGB.value(); + } + + public void setNodeUsedVMemGB(long totalUsedVMemGB) { + this.nodeUsedVMemGB.set((int)Math.floor(totalUsedVMemGB/1024d)); + } + + public int getNodeUsedVMemGB() { + return nodeUsedVMemGB.value(); + } + + public float getNodeCpuUtilization() { + return nodeCpuUtilization.value(); + } + + public void setNodeCpuUtilization(float cpuUtilization) { + this.nodeCpuUtilization.set(cpuUtilization); + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeResourceMonitor.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeResourceMonitor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeResourceMonitor.java index 3c2c386..000e8ea 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeResourceMonitor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeResourceMonitor.java @@ -18,18 +18,46 @@ package org.apache.hadoop.yarn.server.nodemanager; +import java.io.IOException; + import org.apache.hadoop.fs.UnsupportedFileSystemException; -import org.apache.hadoop.yarn.server.nodemanager.containermanager.BaseContainerManagerTest; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.server.nodemanager.containermanager + .BaseContainerManagerTest; +import org.apache.hadoop.yarn.server.nodemanager.containermanager + .monitor.MockResourceCalculatorPlugin; +import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.timeout; public class TestNodeResourceMonitor extends BaseContainerManagerTest { public TestNodeResourceMonitor() throws UnsupportedFileSystemException { super(); } + @Before + public void setup() throws IOException { + // Enable node resource monitor with a mocked resource calculator. + conf.set( + YarnConfiguration.NM_MON_RESOURCE_CALCULATOR, + MockResourceCalculatorPlugin.class.getCanonicalName()); + super.setup(); + } + @Test - public void testNodeResourceMonitor() { - NodeResourceMonitor nrm = new NodeResourceMonitorImpl(); + public void testMetricsUpdate() throws Exception { + // This test doesn't verify the correction of those metrics + // updated by the monitor, it only verifies that the monitor + // do publish these info to node manager metrics system in + // each monitor interval. + Context spyContext = spy(context); + NodeResourceMonitor nrm = new NodeResourceMonitorImpl(spyContext); + nrm.init(conf); + nrm.start(); + Mockito.verify(spyContext, timeout(500).atLeastOnce()) + .getNodeManagerMetrics(); } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java index 0319dbe..18d1dce 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java @@ -55,6 +55,7 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManag import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.Application; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container; import org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.ResourcePluginManager; +import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics; import org.apache.hadoop.yarn.server.nodemanager.recovery.NMMemoryStateStoreService; import org.apache.hadoop.yarn.server.nodemanager.recovery.NMStateStoreService; import org.apache.hadoop.yarn.server.nodemanager.recovery.NMStateStoreService.RecoveredAMRMProxyState; @@ -802,5 +803,10 @@ public abstract class BaseAMRMProxyTest { public ResourcePluginManager getResourcePluginManager() { return null; } + + @Override + public NodeManagerMetrics getNodeManagerMetrics() { + return null; + } } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/MockResourceCalculatorPlugin.java ---------------------------------------------------------------------- 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/MockResourceCalculatorPlugin.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/MockResourceCalculatorPlugin.java index 0dc5c5b..64d117a 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/MockResourceCalculatorPlugin.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/MockResourceCalculatorPlugin.java @@ -70,4 +70,9 @@ public class MockResourceCalculatorPlugin extends ResourceCalculatorPlugin { public float getCpuUsagePercentage() { return 0; } + + @Override + public float getNumVCoresUsed() { + return 0; + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/06f0eb2d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitor.java ---------------------------------------------------------------------- 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/TestContainersMonitor.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/TestContainersMonitor.java index 6f7fadf..5f72a4c 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/TestContainersMonitor.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/TestContainersMonitor.java @@ -22,6 +22,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.timeout; import java.io.BufferedReader; import java.io.File; @@ -67,7 +69,6 @@ import org.apache.hadoop.yarn.server.nodemanager.Context; import org.apache.hadoop.yarn.server.nodemanager.containermanager.BaseContainerManagerTest; import org.apache.hadoop.yarn.server.nodemanager.executor.ContainerSignalContext; import org.apache.hadoop.yarn.server.utils.BuilderUtils; -import org.apache.hadoop.yarn.util.ConverterUtils; import org.apache.hadoop.yarn.util.LinuxResourceCalculatorPlugin; import org.apache.hadoop.yarn.util.ProcfsBasedProcessTree; import org.apache.hadoop.yarn.util.ResourceCalculatorPlugin; @@ -75,6 +76,7 @@ import org.apache.hadoop.yarn.util.TestProcfsBasedProcessTree; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import org.slf4j.LoggerFactory; public class TestContainersMonitor extends BaseContainerManagerTest { @@ -95,6 +97,22 @@ public class TestContainersMonitor extends BaseContainerManagerTest { super.setup(); } + @Test + public void testMetricsUpdate() throws Exception { + // This test doesn't verify the correction of those metrics + // updated by the monitor, it only verifies that the monitor + // do publish these info to node manager metrics system in + // each monitor interval. + Context spyContext = spy(context); + ContainersMonitorImpl cm = + new ContainersMonitorImpl(mock(ContainerExecutor.class), + mock(AsyncDispatcher.class), spyContext); + cm.init(getConfForCM(false, true, 1024, 2.1f)); + cm.start(); + Mockito.verify(spyContext, timeout(500).atLeastOnce()) + .getNodeManagerMetrics(); + } + /** * Test to verify the check for whether a process tree is over limit or not. * --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
