YARN-7663. RMAppImpl:Invalid event: START at KILLED. Contributed by lujie
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/ebff4dec Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/ebff4dec Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/ebff4dec Branch: refs/heads/YARN-6592 Commit: ebff4decfe86571d203859928e28e6855862737b Parents: b26e30a Author: Jason Lowe <[email protected]> Authored: Tue Jan 9 09:52:59 2018 -0600 Committer: Jason Lowe <[email protected]> Committed: Tue Jan 9 09:52:59 2018 -0600 ---------------------------------------------------------------------- .../server/resourcemanager/rmapp/RMAppImpl.java | 14 ++++++-- .../rmapp/TestRMAppTransitions.java | 35 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/ebff4dec/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java b/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 714f0e1..61936bb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java @@ -400,7 +400,7 @@ public class RMAppImpl implements RMApp, Recoverable { EnumSet.of(RMAppEventType.APP_ACCEPTED, RMAppEventType.APP_REJECTED, RMAppEventType.KILL, RMAppEventType.ATTEMPT_FINISHED, RMAppEventType.ATTEMPT_FAILED, - RMAppEventType.NODE_UPDATE)) + RMAppEventType.NODE_UPDATE, RMAppEventType.START)) .installTopology(); @@ -894,7 +894,7 @@ public class RMAppImpl implements RMApp, Recoverable { } catch (InvalidStateTransitionException e) { LOG.error("App: " + appID + " can't handle this event at current state", e); - /* TODO fail the application on the failed transition */ + onInvalidStateTransition(event.getType(), oldState); } // Log at INFO if we're not recovering or not in a terminal state. @@ -2048,4 +2048,14 @@ public class RMAppImpl implements RMApp, Recoverable { public Map<String, String> getApplicationSchedulingEnvs() { return this.applicationSchedulingEnvs; } + + /** + * catch the InvalidStateTransition. + * @param state + * @param rmAppEventType + */ + protected void onInvalidStateTransition(RMAppEventType rmAppEventType, + RMAppState state){ + /* TODO fail the application on the failed transition */ + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/ebff4dec/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java b/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 344f8bb7..920bd4f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java @@ -1151,6 +1151,41 @@ public class TestRMAppTransitions { verifyRMAppFieldsForFinalTransitions(application); } + @Test (timeout = 30000) + public void testAppStartAfterKilled() throws IOException { + LOG.info("--- START: testAppStartAfterKilled ---"); + + ApplicationId applicationId = MockApps.newAppID(appId++); + RMApp application = new RMAppImpl(applicationId, rmContext, conf, null, + null, null, new ApplicationSubmissionContextPBImpl(), null, null, + System.currentTimeMillis(), "YARN", null, null) { + @Override + protected void onInvalidStateTransition(RMAppEventType rmAppEventType, + RMAppState state) { + Assert.assertTrue("RMAppImpl: can't handle " + rmAppEventType + + " at state " + state, false); + } + }; + + // NEW => KILLED event RMAppEventType.KILL + UserGroupInformation fooUser = UserGroupInformation.createUserForTesting( + "testAppStartAfterKilled", new String[] {"foo_group"}); + RMAppEvent event = new RMAppKillByClientEvent( + applicationId, "Application killed by user.", + fooUser, Server.getRemoteIp()); + application.handle(event); + rmDispatcher.await(); + assertKilled(application); + + // KILLED => KILLED event RMAppEventType.START + event = new RMAppFailedAttemptEvent(application.getApplicationId(), + RMAppEventType.START, "", false); + application.handle(event); + rmDispatcher.await(); + assertTimesAtFinish(application); + assertAppState(RMAppState.KILLED, application); + } + @Test(timeout = 30000) public void testAppsRecoveringStates() throws Exception { RMState state = new RMState(); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
