Przeglądaj źródła

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

(cherry picked from commit 9cbd0cd2a9268ff2e8fed0af335e9c4f91c5f601)
Inigo Goiri 5 lat temu
rodzic
commit
5be3a1dc7b

+ 32 - 29
hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/resourcemanager/MockAMLauncher.java

@@ -82,36 +82,39 @@ public class MockAMLauncher extends ApplicationMasterLauncher
   @Override
   @SuppressWarnings("unchecked")
   public void handle(AMLauncherEvent event) {
-    if (AMLauncherEventType.LAUNCH == event.getType()) {
-      ApplicationId appId =
-          event.getAppAttempt().getAppAttemptId().getApplicationId();
-
-      // find AMSimulator
-      AMSimulator ams = appIdAMSim.get(appId);
-      if (ams != null) {
-        try {
-          Container amContainer = event.getAppAttempt().getMasterContainer();
-
-          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);
-        }
+    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));
+
+        ams.notifyAMContainerLaunched(
+            event.getAppAttempt().getMasterContainer());
+        LOG.info("Notify AM launcher launched:" + amContainer.getId());
+
+        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);
     }