YARN-3987. Send AM container completed msg to NM once AM finishes. Contributed by sandflee

(cherry picked from commit 0a030546e2)
This commit is contained in:
Jian He 2015-08-13 16:20:36 -07:00
parent 703fa1b141
commit b2e869f2a8
2 changed files with 17 additions and 0 deletions

View File

@ -717,6 +717,9 @@ Release 2.8.0 - UNRELEASED
YARN-4047. ClientRMService getApplications has high scheduler lock contention. YARN-4047. ClientRMService getApplications has high scheduler lock contention.
(Jason Lowe via jianhe) (Jason Lowe via jianhe)
YARN-3987. Send AM container completed msg to NM once AM finishes.
(sandflee via jianhe)
Release 2.7.2 - UNRELEASED Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -1658,6 +1658,16 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
} }
} }
// 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<ContainerId> containerIdList = new ArrayList<ContainerId>();
containerIdList.add(containerId);
eventHandler.handle(new RMNodeFinishedContainersPulledByAMEvent(
nodeId, containerIdList));
}
// Ack NM to remove finished containers from context. // Ack NM to remove finished containers from context.
private void sendFinishedContainersToNM() { private void sendFinishedContainersToNM() {
@ -1686,9 +1696,13 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
new ArrayList<ContainerStatus>()); new ArrayList<ContainerStatus>());
appAttempt.finishedContainersSentToAM.get(nodeId).add( appAttempt.finishedContainersSentToAM.get(nodeId).add(
containerFinishedEvent.getContainerStatus()); containerFinishedEvent.getContainerStatus());
if (!appAttempt.getSubmissionContext() if (!appAttempt.getSubmissionContext()
.getKeepContainersAcrossApplicationAttempts()) { .getKeepContainersAcrossApplicationAttempts()) {
appAttempt.sendFinishedContainersToNM(); appAttempt.sendFinishedContainersToNM();
} else {
appAttempt.sendFinishedAMContainerToNM(nodeId,
containerFinishedEvent.getContainerStatus().getContainerId());
} }
} }