YARN-9301. Too many InvalidStateTransitionException with SLS. Contributed by Bilwa S T.

(cherry picked from commit 9cbd0cd2a9)
This commit is contained in:
Inigo Goiri 2020-05-12 08:20:03 -07:00 committed by Brahma Reddy Battula
parent a1bebfd85e
commit 5be3a1dc7b

View File

@ -82,36 +82,39 @@ private void setupAMRMToken(RMAppAttempt appAttempt) {
@Override
@SuppressWarnings("unchecked")
public void handle(AMLauncherEvent event) {
if (AMLauncherEventType.LAUNCH == event.getType()) {
ApplicationId appId =
event.getAppAttempt().getAppAttemptId().getApplicationId();
ApplicationId appId =
event.getAppAttempt().getAppAttemptId().getApplicationId();
// find AMSimulator
AMSimulator ams = appIdAMSim.get(appId);
if (ams == null) {
throw new YarnRuntimeException(
"Didn't find any AMSimulator for applicationId=" + appId);
}
Container amContainer = event.getAppAttempt().getMasterContainer();
switch (event.getType()) {
case LAUNCH:
try {
setupAMRMToken(event.getAppAttempt());
// Notify RMAppAttempt to change state
super.context.getDispatcher().getEventHandler().handle(
new RMAppAttemptEvent(event.getAppAttempt().getAppAttemptId(),
RMAppAttemptEventType.LAUNCHED));
// find AMSimulator
AMSimulator ams = appIdAMSim.get(appId);
if (ams != null) {
try {
Container amContainer = event.getAppAttempt().getMasterContainer();
ams.notifyAMContainerLaunched(
event.getAppAttempt().getMasterContainer());
LOG.info("Notify AM launcher launched:" + amContainer.getId());
setupAMRMToken(event.getAppAttempt());
// Notify RMAppAttempt to change state
super.context.getDispatcher().getEventHandler().handle(
new RMAppAttemptEvent(event.getAppAttempt().getAppAttemptId(),
RMAppAttemptEventType.LAUNCHED));
ams.notifyAMContainerLaunched(
event.getAppAttempt().getMasterContainer());
LOG.info("Notify AM launcher launched:" + amContainer.getId());
se.getNmMap().get(amContainer.getNodeId())
.addNewContainer(amContainer, 100000000L);
return;
} catch (Exception e) {
throw new YarnRuntimeException(e);
}
se.getNmMap().get(amContainer.getNodeId())
.addNewContainer(amContainer, -1);
return;
} catch (Exception e) {
throw new YarnRuntimeException(e);
}
case CLEANUP:
se.getNmMap().get(amContainer.getNodeId())
.cleanupContainer(amContainer.getId());
break;
default:
throw new YarnRuntimeException(
"Didn't find any AMSimulator for applicationId=" + appId);
}