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..ee5df0e 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, 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 c8f28e2..3039a73 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 @@ -395,6 +395,26 @@ public void testStartContainerAfterAppFinished() { } } + @Test + public void testAppFinishedOnNew() { + // FINISH_APPLICATION may coms when APP is in NEW state. + WrappedApplication wa = null; + try { + wa = new WrappedApplication(1, 314159265358979L, "yak", 3); + assertEquals(ApplicationState.NEW, wa.app.getApplicationState()); + 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")