diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java index b48b272..c67c40c 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java @@ -158,6 +158,7 @@ protected final RMContext rmContext; private RMAppAttempt appAttempt; + private boolean amContainerAssigned; public SchedulerApplicationAttempt(ApplicationAttemptId applicationAttemptId, String user, Queue queue, ActiveUsersManager activeUsersManager, @@ -587,9 +588,16 @@ private Container updateContainerAndNMToken(RMContainer rmContainer, } public boolean isWaitingForAMContainer() { - // The working knowledge is that masterContainer for AM is null as it - // itself is the master container. - return (!unmanagedAM && appAttempt.getMasterContainer() == null); + boolean waitingForContainer = !unmanagedAM && !amContainerAssigned; + + if (waitingForContainer) { + // The working knowledge is that masterContainer for AM is null as it + // itself is the master container. + amContainerAssigned = appAttempt.getMasterContainer() != null; + waitingForContainer = !amContainerAssigned; + } + + return waitingForContainer; } public synchronized void updateBlacklist(List blacklistAdditions, @@ -1001,4 +1009,4 @@ public String getDiagnosticMessage() { return diagnosticMessage; } } -} \ No newline at end of file +}