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 d84e3d3..d0e90ed 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 @@ -1043,8 +1043,8 @@ public void transition(RMAppImpl app, RMAppEvent event) { if (app.finishTime == 0 ) { app.finishTime = System.currentTimeMillis(); } - app.handler.handle(new AppRemovedSchedulerEvent(app.applicationId, app - .getState())); + app.handler.handle(new AppRemovedSchedulerEvent(app.applicationId, + finalState)); app.handler.handle( new RMAppManagerEvent(app.applicationId, RMAppManagerEventType.APP_COMPLETED)); 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 509bceb..2797023 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 @@ -60,6 +60,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.event.RMAppAttemptUpdateSavedEvent; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.ContainerAllocationExpirer; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.AppRemovedSchedulerEvent; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.SchedulerEvent; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.SchedulerEventType; import org.apache.hadoop.yarn.server.resourcemanager.security.AMRMTokenSecretManager; @@ -87,6 +88,7 @@ private RMStateStore store; private RMApplicationHistoryWriter writer; private YarnScheduler scheduler; + private TestSchedulerEventDispatcher schedulerDispatcher; // ignore all the RM application attempt events private static final class TestApplicationAttemptEventDispatcher implements @@ -148,8 +150,11 @@ public void handle(RMAppManagerEvent event) { // handle all the scheduler events - same as in ResourceManager.java private static final class TestSchedulerEventDispatcher implements EventHandler { + public SchedulerEvent lastSchedulerEvent; + @Override public void handle(SchedulerEvent event) { + lastSchedulerEvent = event; } } @@ -201,8 +206,9 @@ public void setUp() throws Exception { rmDispatcher.register(RMAppManagerEventType.class, new TestApplicationManagerEventDispatcher()); + schedulerDispatcher = new TestSchedulerEventDispatcher(); rmDispatcher.register(SchedulerEventType.class, - new TestSchedulerEventDispatcher()); + schedulerDispatcher); rmDispatcher.init(conf); rmDispatcher.start(); @@ -502,6 +508,7 @@ public void testAppNewKill() throws IOException { assertKilled(application); assertAppFinalStateNotSaved(application); verifyApplicationFinished(RMAppState.KILLED); + verifyAppRemovedSchedulerEvent(RMAppState.KILLED); } @Test @@ -534,6 +541,7 @@ public void testAppNewSavingKill() throws IOException { sendAppUpdateSavedEvent(application); assertKilled(application); verifyApplicationFinished(RMAppState.KILLED); + verifyAppRemovedSchedulerEvent(RMAppState.KILLED); } @Test (timeout = 30000) @@ -583,6 +591,7 @@ public void testAppSubmittedKill() throws IOException, InterruptedException { assertKilled(application); assertAppFinalStateSaved(application); verifyApplicationFinished(RMAppState.KILLED); + verifyAppRemovedSchedulerEvent(RMAppState.KILLED); } @Test @@ -640,6 +649,7 @@ public void testAppAcceptedKill() throws IOException, InterruptedException { assertKilled(application); assertAppFinalStateSaved(application); verifyApplicationFinished(RMAppState.KILLED); + verifyAppRemovedSchedulerEvent(RMAppState.KILLED); } @Test @@ -663,6 +673,7 @@ public void testAppRunningKill() throws IOException { sendAppUpdateSavedEvent(application); assertKilled(application); verifyApplicationFinished(RMAppState.KILLED); + verifyAppRemovedSchedulerEvent(RMAppState.KILLED); } @Test @@ -868,4 +879,15 @@ private void verifyApplicationFinished(RMAppState state) { verify(writer).applicationFinished(any(RMApp.class), finalState.capture()); Assert.assertEquals(state, finalState.getValue()); } + + private void verifyAppRemovedSchedulerEvent(RMAppState finalState) { + Assert.assertEquals(SchedulerEventType.APP_REMOVED, + schedulerDispatcher.lastSchedulerEvent.getType()); + if(schedulerDispatcher.lastSchedulerEvent instanceof + AppRemovedSchedulerEvent) { + AppRemovedSchedulerEvent appRemovedEvent = + (AppRemovedSchedulerEvent)schedulerDispatcher.lastSchedulerEvent; + Assert.assertEquals(finalState, appRemovedEvent.getFinalState()); + } + } }