From 0ec6cda4b7b22099e6b5d1fef54f9fa80c94a5a9 Mon Sep 17 00:00:00 2001 From: Siddharth Seth Date: Mon, 27 Aug 2012 19:35:45 +0000 Subject: [PATCH] YARN-37. Change TestRMAppTransitions to use the DrainDispatcher. (Contributed by Mayank Bansal) git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1377803 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-yarn-project/CHANGES.txt | 3 + .../rmapp/TestRMAppTransitions.java | 85 +++++++++++++++---- 2 files changed, 70 insertions(+), 18 deletions(-) diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 734e0e1a7ce..4b5c2ca0dc4 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -42,6 +42,9 @@ Release 2.1.0-alpha - Unreleased YARN-22. Fix ContainerLogs to work if the log-dir is specified as a URI. (Mayank Bansal via sseth) + YARN-37. Change TestRMAppTransitions to use the DrainDispatcher. + (Mayank Bansal via sseth) + Release 0.23.3 - Unreleased INCOMPATIBLE CHANGES 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 c8182596db6..0f6093dec22 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 @@ -33,14 +33,15 @@ import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; import org.apache.hadoop.yarn.api.records.FinalApplicationStatus; import org.apache.hadoop.yarn.api.records.impl.pb.ApplicationSubmissionContextPBImpl; import org.apache.hadoop.yarn.conf.YarnConfiguration; -import org.apache.hadoop.yarn.event.AsyncDispatcher; +import org.apache.hadoop.yarn.event.DrainDispatcher; import org.apache.hadoop.yarn.event.EventHandler; import org.apache.hadoop.yarn.server.resourcemanager.ApplicationMasterService; +import org.apache.hadoop.yarn.server.resourcemanager.RMAppManagerEvent; +import org.apache.hadoop.yarn.server.resourcemanager.RMAppManagerEventType; import org.apache.hadoop.yarn.server.resourcemanager.RMContext; import org.apache.hadoop.yarn.server.resourcemanager.RMContextImpl; import org.apache.hadoop.yarn.server.resourcemanager.recovery.ApplicationsStore.ApplicationStore; import org.apache.hadoop.yarn.server.resourcemanager.recovery.MemStore; -import org.apache.hadoop.yarn.server.resourcemanager.resourcetracker.InlineDispatcher; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.AMLivelinessMonitor; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptEvent; @@ -48,6 +49,8 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptE import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState; 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.SchedulerEvent; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.SchedulerEventType; import org.apache.hadoop.yarn.server.resourcemanager.security.ApplicationTokenSecretManager; import org.apache.hadoop.yarn.server.resourcemanager.security.RMContainerTokenSecretManager; import org.junit.Before; @@ -60,7 +63,7 @@ public class TestRMAppTransitions { private RMContext rmContext; private static int maxRetries = 4; private static int appId = 1; -// private AsyncDispatcher rmDispatcher; + private DrainDispatcher rmDispatcher; // ignore all the RM application attempt events private static final class TestApplicationAttemptEventDispatcher implements @@ -110,12 +113,27 @@ public class TestRMAppTransitions { } } + // handle all the RM application manager events - same as in + // ResourceManager.java + private static final class TestApplicationManagerEventDispatcher implements + EventHandler { + @Override + public void handle(RMAppManagerEvent event) { + } + } + + // handle all the scheduler events - same as in ResourceManager.java + private static final class TestSchedulerEventDispatcher implements + EventHandler { + @Override + public void handle(SchedulerEvent event) { + } + } + @Before public void setUp() throws Exception { - AsyncDispatcher rmDispatcher = new AsyncDispatcher(); Configuration conf = new Configuration(); - rmDispatcher = new InlineDispatcher(); - + rmDispatcher = new DrainDispatcher(); ContainerAllocationExpirer containerAllocationExpirer = mock(ContainerAllocationExpirer.class); AMLivelinessMonitor amLivelinessMonitor = mock(AMLivelinessMonitor.class); @@ -131,6 +149,13 @@ public class TestRMAppTransitions { rmDispatcher.register(RMAppEventType.class, new TestApplicationEventDispatcher(rmContext)); + + rmDispatcher.register(RMAppManagerEventType.class, + new TestApplicationManagerEventDispatcher()); + + rmDispatcher.register(SchedulerEventType.class, + new TestSchedulerEventDispatcher()); + rmDispatcher.init(conf); rmDispatcher.start(); } @@ -225,9 +250,8 @@ public class TestRMAppTransitions { "Application killed by user.", diag.toString()); } - private static void assertAppAndAttemptKilled(RMApp application) { + private static void assertAppAndAttemptKilled(RMApp application) throws InterruptedException { assertKilled(application); - /* also check if the attempt is killed */ Assert.assertEquals( RMAppAttemptState.KILLED, application.getCurrentAppAttempt().getAppAttemptState() ); @@ -332,6 +356,7 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppFailedAttemptEvent( application.getApplicationId(), RMAppEventType.ATTEMPT_FAILED, ""); application.handle(event); + rmDispatcher.await(); RMAppAttempt appAttempt = application.getCurrentAppAttempt(); Assert.assertEquals(1, appAttempt.getAppAttemptId().getAttemptId()); assertFailed(application, @@ -353,6 +378,7 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); application.handle(event); + rmDispatcher.await(); assertKilled(application); } @@ -366,6 +392,7 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppRejectedEvent(application.getApplicationId(), rejectedText); application.handle(event); + rmDispatcher.await(); assertFailed(application, rejectedText); } @@ -379,18 +406,22 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppRejectedEvent(application.getApplicationId(), rejectedText); application.handle(event); + rmDispatcher.await(); assertFailed(application, rejectedText); } @Test - public void testAppSubmittedKill() throws IOException { + public void testAppSubmittedKill() throws IOException, InterruptedException { LOG.info("--- START: testAppSubmittedKill---"); - - RMApp application = testCreateAppAccepted(null); - // SUBMITTED => KILLED event RMAppEventType.KILL - RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); - this.rmContext.getRMApps().putIfAbsent(application.getApplicationId(), application); + RMApp application = testCreateAppSubmitted(null); + // SUBMITTED => KILLED event RMAppEventType.KILL + RMAppEvent event = new RMAppEvent(application.getApplicationId(), + RMAppEventType.KILL); + this.rmContext.getRMApps().putIfAbsent(application.getApplicationId(), + application); application.handle(event); + rmDispatcher.await(); + assertKilled(application); assertAppAndAttemptKilled(application); } @@ -410,6 +441,7 @@ public class TestRMAppTransitions { new RMAppEvent(application.getApplicationId(), RMAppEventType.APP_ACCEPTED); application.handle(event); + rmDispatcher.await(); assertAppState(RMAppState.ACCEPTED, application); } @@ -420,19 +452,23 @@ public class TestRMAppTransitions { new RMAppFailedAttemptEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_FAILED, message); application.handle(event); + rmDispatcher.await(); assertFailed(application, ".*" + message + ".*Failing the application.*"); } @Test - public void testAppAcceptedKill() throws IOException { + public void testAppAcceptedKill() throws IOException, InterruptedException { LOG.info("--- START: testAppAcceptedKill ---"); - RMApp application = testCreateAppAccepted(null); // ACCEPTED => KILLED event RMAppEventType.KILL - RMAppEvent event = - new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); + RMAppEvent event = new RMAppEvent(application.getApplicationId(), + RMAppEventType.KILL); + this.rmContext.getRMApps().putIfAbsent(application.getApplicationId(), + application); application.handle(event); + rmDispatcher.await(); assertKilled(application); + assertAppAndAttemptKilled(application); } @Test @@ -444,6 +480,7 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); application.handle(event); + rmDispatcher.await(); assertKilled(application); } @@ -462,6 +499,7 @@ public class TestRMAppTransitions { new RMAppFailedAttemptEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_FAILED, ""); application.handle(event); + rmDispatcher.await(); assertAppState(RMAppState.SUBMITTED, application); appAttempt = application.getCurrentAppAttempt(); Assert.assertEquals(++expectedAttemptId, @@ -470,11 +508,13 @@ public class TestRMAppTransitions { new RMAppEvent(application.getApplicationId(), RMAppEventType.APP_ACCEPTED); application.handle(event); + rmDispatcher.await(); assertAppState(RMAppState.ACCEPTED, application); event = new RMAppEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_REGISTERED); application.handle(event); + rmDispatcher.await(); assertAppState(RMAppState.RUNNING, application); } @@ -484,11 +524,13 @@ public class TestRMAppTransitions { new RMAppFailedAttemptEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_FAILED, ""); application.handle(event); + rmDispatcher.await(); assertFailed(application, ".*Failing the application.*"); // FAILED => FAILED event RMAppEventType.KILL event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); application.handle(event); + rmDispatcher.await(); assertFailed(application, ".*Failing the application.*"); } @@ -501,6 +543,7 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); application.handle(event); + rmDispatcher.await(); assertAppState(RMAppState.FINISHED, application); } @@ -513,6 +556,7 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); application.handle(event); + rmDispatcher.await(); assertTimesAtFinish(application); assertAppState(RMAppState.FINISHED, application); StringBuilder diag = application.getDiagnostics(); @@ -530,6 +574,7 @@ public class TestRMAppTransitions { RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); application.handle(event); + rmDispatcher.await(); assertTimesAtFinish(application); assertAppState(RMAppState.KILLED, application); @@ -538,6 +583,7 @@ public class TestRMAppTransitions { new RMAppEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_FINISHED); application.handle(event); + rmDispatcher.await(); assertTimesAtFinish(application); assertAppState(RMAppState.KILLED, application); @@ -546,6 +592,7 @@ public class TestRMAppTransitions { new RMAppFailedAttemptEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_FAILED, ""); application.handle(event); + rmDispatcher.await(); assertTimesAtFinish(application); assertAppState(RMAppState.KILLED, application); @@ -554,12 +601,14 @@ public class TestRMAppTransitions { new RMAppEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_KILLED); application.handle(event); + rmDispatcher.await(); assertTimesAtFinish(application); assertAppState(RMAppState.KILLED, application); // KILLED => KILLED event RMAppEventType.KILL event = new RMAppEvent(application.getApplicationId(), RMAppEventType.KILL); application.handle(event); + rmDispatcher.await(); assertTimesAtFinish(application); assertAppState(RMAppState.KILLED, application); }