Repository: hadoop Updated Branches: refs/heads/branch-2 f4b63a391 -> 5ef27b65b
YARN-5037. Fix random failure of TestRMRestart#testQueueMetricsOnRMRestart (sandflee via Varun Saxena). Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/5ef27b65 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/5ef27b65 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/5ef27b65 Branch: refs/heads/branch-2 Commit: 5ef27b65b96ca61233859ed470ff140c5df41c7c Parents: f4b63a3 Author: Varun Saxena <[email protected]> Authored: Sun Jul 10 22:13:36 2016 +0530 Committer: Varun Saxena <[email protected]> Committed: Sun Jul 10 22:13:53 2016 +0530 ---------------------------------------------------------------------- .../yarn/server/resourcemanager/MockRM.java | 42 ++++++++++++++++++++ .../server/resourcemanager/TestRMRestart.java | 20 ++++++---- 2 files changed, 54 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ef27b65/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.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/MockRM.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java index 955fed9..f1f3d51 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java @@ -88,6 +88,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType; import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeImpl; import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeStartedEvent; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerApplication; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerApplicationAttempt; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerNode; import org.apache.hadoop.yarn.server.resourcemanager.security.ClientToAMTokenSecretManagerInRM; @@ -109,6 +110,7 @@ public class MockRM extends ResourceManager { static final String ENABLE_WEBAPP = "mockrm.webapp.enabled"; private static final int SECOND = 1000; private static final int TIMEOUT_MS_FOR_ATTEMPT = 40 * SECOND; + private static final int TIMEOUT_MS_FOR_APP_REMOVED = 40 * SECOND; private static final int TIMEOUT_MS_FOR_CONTAINER_AND_NODE = 10 * SECOND; private static final int WAIT_MS_PER_LOOP = 10; @@ -1016,4 +1018,44 @@ public class MockRM extends ResourceManager { SignalContainerRequest.newInstance(containerId, command); client.signalToContainer(req); } + + + /** + * Wait until an app removed from scheduler. + * The timeout is 40 seconds. + * @param appId the id of an app + * @throws InterruptedException + * if interrupted while waiting for app removed + */ + public void waitForAppRemovedFromScheduler(ApplicationId appId) + throws InterruptedException { + waitForAppRemovedFromScheduler(appId, TIMEOUT_MS_FOR_APP_REMOVED); + } + + /** + * Wait until an app is removed from scheduler. + * @param appId the id of an app + * @param timeoutMsecs the length of timeout in milliseconds + * @throws InterruptedException + * if interrupted while waiting for app removed + */ + public void waitForAppRemovedFromScheduler(ApplicationId appId, + long timeoutMsecs) throws InterruptedException { + int timeWaiting = 0; + + Map<ApplicationId, SchedulerApplication> apps = + ((AbstractYarnScheduler) getResourceScheduler()) + .getSchedulerApplications(); + while (apps.containsKey(appId)) { + if (timeWaiting >= timeoutMsecs) { + break; + } + LOG.info("wait for app removed, " + appId); + Thread.sleep(WAIT_MS_PER_LOOP); + timeWaiting += WAIT_MS_PER_LOOP; + } + Assert.assertTrue("app is not removed from scheduler (timeout).", + !apps.containsKey(appId)); + LOG.info("app is removed from scheduler, " + appId); + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ef27b65/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMRestart.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/TestRMRestart.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMRestart.java index 364f9d1..dd82af5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMRestart.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMRestart.java @@ -1846,6 +1846,10 @@ public class TestRMRestart extends ParameterizedSchedulerTestBase { // finish the AMs finishApplicationMaster(loadedApp1, rm2, nm1, am1); + // now AppAttempt and App becomes FINISHED, + // we should also grant APP_ATTEMPT_REMOVE/APP_REMOVE event + // had processed by scheduler + rm2.waitForAppRemovedFromScheduler(loadedApp1.getApplicationId()); assertQueueMetrics(qm2, 1, 0, 0, 1); } @@ -1867,14 +1871,14 @@ public class TestRMRestart extends ParameterizedSchedulerTestBase { private void assertQueueMetrics(QueueMetrics qm, int appsSubmitted, int appsPending, int appsRunning, int appsCompleted) { - Assert.assertEquals(qm.getAppsSubmitted(), - appsSubmitted + appsSubmittedCarryOn); - Assert.assertEquals(qm.getAppsPending(), - appsPending + appsPendingCarryOn); - Assert.assertEquals(qm.getAppsRunning(), - appsRunning + appsRunningCarryOn); - Assert.assertEquals(qm.getAppsCompleted(), - appsCompleted + appsCompletedCarryOn); + Assert.assertEquals(appsSubmitted + appsSubmittedCarryOn, + qm.getAppsSubmitted()); + Assert.assertEquals(appsPending + appsPendingCarryOn, + qm.getAppsPending()); + Assert.assertEquals(appsRunning + appsRunningCarryOn, + qm.getAppsRunning()); + Assert.assertEquals(appsCompleted + appsCompletedCarryOn, + qm.getAppsCompleted()); } @Test (timeout = 60000) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
