diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java index 30af77d..4de63bb 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java @@ -729,6 +729,15 @@ public void transition(RMAppImpl app, RMAppEvent event) { @Override public RMAppState transition(RMAppImpl app, RMAppEvent event) { + /* + * TODO (YARN-1823): Recover unmanaged AMs as well. + * Until then, set the final state as FAILED. + */ + if (app.getApplicationSubmissionContext().getUnmanagedAM()) { + new FinalTransition(RMAppState.FAILED).transition(app, event); + return RMAppState.FAILED; + } + for (RMAppAttempt attempt : app.getAppAttempts().values()) { // synchronously recover attempt to ensure any incoming external events // to be processed after the attempt processes the recover event. diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java index 164d622..7f58a89 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java @@ -361,15 +361,22 @@ protected RMApp testCreateAppSubmittedNoRecovery( return application; } - protected RMApp testCreateAppSubmittedRecovery( - ApplicationSubmissionContext submissionContext) throws IOException { + protected RMApp testCreateAppSubmittedRecovery(boolean isUnmanaged) + throws IOException { + ApplicationSubmissionContext submissionContext = + new ApplicationSubmissionContextPBImpl(); + submissionContext.setUnmanagedAM(isUnmanaged); RMApp application = createNewTestApp(submissionContext); // NEW => SUBMITTED event RMAppEventType.RECOVER RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.RECOVER); application.handle(event); assertStartTimeSet(application); - assertAppState(RMAppState.SUBMITTED, application); + if (isUnmanaged) { + assertAppState(RMAppState.FAILED, application); + } else { + assertAppState(RMAppState.SUBMITTED, application); + } return application; } @@ -491,7 +498,8 @@ public void testAppSuccessPath() throws IOException { @Test (timeout = 30000) public void testAppRecoverPath() throws IOException { LOG.info("--- START: testAppRecoverPath ---"); - testCreateAppSubmittedRecovery(null); + testCreateAppSubmittedRecovery(false); + testCreateAppSubmittedRecovery(true); } @Test (timeout = 30000)