diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java index b4dcf1f..061fd56 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java @@ -62,6 +62,7 @@ import org.apache.hadoop.yarn.server.api.records.NodeAction; import org.apache.hadoop.yarn.server.api.records.NodeHealthStatus; import org.apache.hadoop.yarn.server.api.records.NodeStatus; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationState; import org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container; import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics; @@ -354,7 +355,7 @@ private NodeStatus getNodeStatus(int responseId) throws IOException { ContainerId containerId = container.getContainerId(); ApplicationId applicationId = container.getContainerId() .getApplicationAttemptId().getApplicationId(); - if (!this.context.getApplications().containsKey(applicationId)) { + if (!isApplicationRunning(applicationId)) { context.getContainers().remove(containerId); continue; } @@ -389,7 +390,7 @@ private NodeStatus getNodeStatus(int responseId) throws IOException { ContainerId containerId = container.getContainerId(); ApplicationId applicationId = container.getContainerId() .getApplicationAttemptId().getApplicationId(); - if (!this.context.getApplications().containsKey(applicationId)) { + if (!isApplicationRunning(applicationId)) { context.getContainers().remove(containerId); continue; } @@ -408,6 +409,16 @@ private NodeStatus getNodeStatus(int responseId) throws IOException { return containerStatuses; } + private boolean isApplicationRunning(ApplicationId applicationId) { + if (!this.context.getApplications().containsKey(applicationId) + || this.context.getApplications().get( + applicationId).getApplicationState() != ApplicationState.RUNNING) { + return false; + } + + return true; + } + @Override public void addCompletedContainer(ContainerId containerId) { synchronized (recentlyStoppedContainers) {