diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationImpl.java index 39be7a7..65181f2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationImpl.java @@ -222,6 +222,11 @@ public ApplicationState getApplicationState() { .addTransition(ApplicationState.NEW, ApplicationState.NEW, ApplicationEventType.INIT_CONTAINER, new InitContainerTransition()) + .addTransition(ApplicationState.NEW, + EnumSet.of(ApplicationState.FINISHING_CONTAINERS_WAIT, + ApplicationState.APPLICATION_RESOURCES_CLEANINGUP), + ApplicationEventType.FINISH_APPLICATION, + new AppFinishTriggeredTransition()) // Transitions from INITING state .addTransition(ApplicationState.INITING, ApplicationState.INITING, @@ -271,6 +276,8 @@ public ApplicationState getApplicationState() { .addTransition(ApplicationState.FINISHING_CONTAINERS_WAIT, ApplicationState.FINISHING_CONTAINERS_WAIT, EnumSet.of( + ApplicationEventType.INIT_CONTAINER, + ApplicationEventType.INIT_APPLICATION, ApplicationEventType.APPLICATION_LOG_HANDLING_INITED, ApplicationEventType.APPLICATION_LOG_HANDLING_FAILED, ApplicationEventType.APPLICATION_INITED, @@ -287,6 +294,8 @@ public ApplicationState getApplicationState() { .addTransition(ApplicationState.APPLICATION_RESOURCES_CLEANINGUP, ApplicationState.APPLICATION_RESOURCES_CLEANINGUP, EnumSet.of( + ApplicationEventType.INIT_CONTAINER, + ApplicationEventType.INIT_APPLICATION, ApplicationEventType.APPLICATION_LOG_HANDLING_INITED, ApplicationEventType.APPLICATION_LOG_HANDLING_FAILED, ApplicationEventType.APPLICATION_LOG_HANDLING_FINISHED, @@ -302,6 +311,8 @@ public ApplicationState getApplicationState() { new AppLogsAggregatedTransition()) .addTransition(ApplicationState.FINISHED, ApplicationState.FINISHED, EnumSet.of( + ApplicationEventType.INIT_CONTAINER, + ApplicationEventType.INIT_APPLICATION, ApplicationEventType.APPLICATION_LOG_HANDLING_INITED, ApplicationEventType.FINISH_APPLICATION)) // create the topology tables diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/TestApplication.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/TestApplication.java index 65558e9..ec98bbb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/TestApplication.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/TestApplication.java @@ -392,7 +392,31 @@ public void testStartContainerAfterAppFinished() { wa.finished(); } } + + @SuppressWarnings("unchecked") + @Test + public void testAppFinishedOnNew() { + // FINISH_APPLICATION may coms when APP is in NEW state. + WrappedApplication wa = null; + try { + wa = new WrappedApplication(1, 314159265358979L, "yak", 1); + + assertEquals(ApplicationState.NEW, wa.app.getApplicationState()); + + reset(wa.localizerBus); + wa.appFinished(); + assertEquals(ApplicationState.APPLICATION_RESOURCES_CLEANINGUP, + wa.app.getApplicationState()); + + wa.appResourcesCleanedup(); + assertEquals(ApplicationState.FINISHED, wa.app.getApplicationState()); + } finally { + if (wa != null) + wa.finished(); + } + } + //TODO Re-work after Application transitions are changed. // @Test @SuppressWarnings("unchecked")