diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java index 0914022..017e248 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java @@ -1658,6 +1658,15 @@ public RMAppAttemptState transition(RMAppAttemptImpl appAttempt, } } + // Ack NM to remove finished AM container, + // not waiting for new appattempt to pull am container complete msg + // new appattempt may launch fail and leaves too many completed container in NM + private void sendFinishedAMContainerToNM(NodeId nodeId, ContainerId containerId) { + List containerIdList = new ArrayList(); + containerIdList.add(containerId); + eventHandler.handle(new RMNodeFinishedContainersPulledByAMEvent(nodeId, + containerIdList)); + } // Ack NM to remove finished containers from context. private void sendFinishedContainersToNM() { @@ -1682,6 +1691,8 @@ private void sendFinishedContainersToNM() { private void sendAMContainerToNM(RMAppAttemptImpl appAttempt, RMAppAttemptContainerFinishedEvent containerFinishedEvent) { NodeId nodeId = containerFinishedEvent.getNodeId(); + appAttempt.sendFinishedAMContainerToNM(nodeId, + containerFinishedEvent.getContainerStatus().getContainerId()); finishedContainersSentToAM.putIfAbsent(nodeId, new ArrayList()); appAttempt.finishedContainersSentToAM.get(nodeId).add(