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/ContainersMonitorImpl.java 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 cd9d6af..f845fa9 100644 --- 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 +++ 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 @@ -546,14 +546,19 @@ private void initializeProcessTrees( Container container = context.getContainers().get(containerId); String[] ipAndHost = containerExecutor.getIpAndHost(container); - if (ipAndHost != null && ipAndHost[0] != null - && ipAndHost[1] != null) { + if ((container != null) && (ipAndHost != null) && + (ipAndHost[0] != null) && (ipAndHost[1] != null)) { container.setIpAndHost(ipAndHost); LOG.info(containerId + "'s ip = " + ipAndHost[0] - + ", and hostname = " + ipAndHost[1]); + + ", and hostname = " + ipAndHost[1]); + } else if (container != null) { + LOG.info("Can not get both ip and hostname: " + Arrays + .toString(ipAndHost)); } else { LOG.info("Can not get both ip and hostname: " + Arrays - .toString(ipAndHost)); + .toString(ipAndHost)); + LOG.warn(containerId + " is missing. Not setting ip and " + + "hostname"); } } } @@ -692,11 +697,15 @@ private void reportResourceUsage(ContainerId containerId, long currentPmemUsage, float cpuUsagePercentPerCore) { ContainerImpl container = (ContainerImpl) context.getContainers().get(containerId); - NMTimelinePublisher nmMetricsPublisher = - container.getNMTimelinePublisher(); - if (nmMetricsPublisher != null) { - nmMetricsPublisher.reportContainerResourceUsage(container, - currentPmemUsage, cpuUsagePercentPerCore); + if (container != null) { + NMTimelinePublisher nmMetricsPublisher = + container.getNMTimelinePublisher(); + if (nmMetricsPublisher != null) { + nmMetricsPublisher.reportContainerResourceUsage(container, + currentPmemUsage, cpuUsagePercentPerCore); + } + } else { + LOG.warn(containerId + " does not exist to report"); } } 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/TestContainersMonitorResourceChange.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitorResourceChange.java index d24f89d..f01afb8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitorResourceChange.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitorResourceChange.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentSkipListMap; import org.apache.hadoop.conf.Configuration; @@ -37,6 +38,7 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerEventType; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl; import org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl.ProcessTreeInfo; import org.apache.hadoop.yarn.server.nodemanager.executor.ContainerLivenessContext; import org.apache.hadoop.yarn.server.nodemanager.executor.ContainerSignalContext; @@ -64,6 +66,7 @@ private AsyncDispatcher dispatcher; private Context context; private MockContainerEventHandler containerEventHandler; + private ConcurrentMap containerMap; static final int WAIT_MS_PER_LOOP = 20; // 20 milli seconds @@ -131,7 +134,10 @@ public void setup() { executor = new MockExecutor(); dispatcher = new AsyncDispatcher(); context = Mockito.mock(Context.class); - Mockito.doReturn(new ConcurrentSkipListMap()) + containerMap = new ConcurrentSkipListMap<>(); + Container container = Mockito.mock(ContainerImpl.class); + containerMap.put(getContainerId(1), container); + Mockito.doReturn(containerMap) .when(context).getContainers(); conf = new Configuration(); conf.set( @@ -181,7 +187,7 @@ public void testContainersResourceChange() throws Exception { getContainerId(1)).getProcessTree(); mockTree.setRssMemorySize(2500L); // verify that this container is killed - Thread.sleep(200); + Thread.sleep(500); assertTrue(containerEventHandler .isContainerKilled(getContainerId(1))); // create container 2