YARN-2856. Fixed RMAppImpl to handle ATTEMPT_KILLED event at ACCEPTED state on app recovery. Contributed by Rohith Sharmaks

(cherry picked from commit d005404ef7)

(cherry picked from commit beb184ac58)
(cherry picked from commit 325bb33988743d60cb333002f9da60314241632e)
This commit is contained in:
Jian He 2014-11-13 15:33:20 -08:00 committed by Vinod Kumar Vavilapalli
parent d6666e8d26
commit 81ba30211e
3 changed files with 29 additions and 0 deletions

View File

@ -12,6 +12,9 @@ Release 2.6.1 - UNRELEASED
BUG FIXES BUG FIXES
YARN-2856. Fixed RMAppImpl to handle ATTEMPT_KILLED event at ACCEPTED state
on app recovery. (Rohith Sharmaks via jianhe)
Release 2.6.0 - 2014-11-18 Release 2.6.0 - 2014-11-18
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -229,6 +229,9 @@ public class RMAppImpl implements RMApp, Recoverable {
new FinalSavingTransition(FINISHED_TRANSITION, RMAppState.FINISHED)) new FinalSavingTransition(FINISHED_TRANSITION, RMAppState.FINISHED))
.addTransition(RMAppState.ACCEPTED, RMAppState.KILLING, .addTransition(RMAppState.ACCEPTED, RMAppState.KILLING,
RMAppEventType.KILL, new KillAttemptTransition()) RMAppEventType.KILL, new KillAttemptTransition())
.addTransition(RMAppState.ACCEPTED, RMAppState.FINAL_SAVING,
RMAppEventType.ATTEMPT_KILLED,
new FinalSavingTransition(new AppKilledTransition(), RMAppState.KILLED))
.addTransition(RMAppState.ACCEPTED, RMAppState.ACCEPTED, .addTransition(RMAppState.ACCEPTED, RMAppState.ACCEPTED,
RMAppEventType.APP_RUNNING_ON_NODE, RMAppEventType.APP_RUNNING_ON_NODE,
new AppRunningOnNodeTransition()) new AppRunningOnNodeTransition())

View File

@ -715,6 +715,29 @@ public class TestRMAppTransitions {
verifyAppRemovedSchedulerEvent(RMAppState.KILLED); verifyAppRemovedSchedulerEvent(RMAppState.KILLED);
} }
@Test
public void testAppAcceptedAttemptKilled() throws IOException,
InterruptedException {
LOG.info("--- START: testAppAcceptedAttemptKilled ---");
RMApp application = testCreateAppAccepted(null);
// ACCEPTED => FINAL_SAVING event RMAppEventType.ATTEMPT_KILLED
// When application recovery happens for attempt is KILLED but app is
// RUNNING.
RMAppEvent event =
new RMAppEvent(application.getApplicationId(),
RMAppEventType.ATTEMPT_KILLED);
application.handle(event);
rmDispatcher.await();
assertAppState(RMAppState.FINAL_SAVING, application);
sendAppUpdateSavedEvent(application);
assertKilled(application);
assertAppFinalStateSaved(application);
verifyApplicationFinished(RMAppState.KILLED);
verifyAppRemovedSchedulerEvent(RMAppState.KILLED);
}
@Test @Test
public void testAppRunningKill() throws IOException { public void testAppRunningKill() throws IOException {
LOG.info("--- START: testAppRunningKill ---"); LOG.info("--- START: testAppRunningKill ---");