diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockAM.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockAM.java index e2e3cc1..c660d5f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockAM.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockAM.java @@ -73,18 +73,28 @@ public void setAMRMProtocol(ApplicationMasterProtocol amRMProtocol, public void waitForState(RMAppAttemptState finalState) throws Exception { RMApp app = context.getRMApps().get(attemptId.getApplicationId()); RMAppAttempt attempt = app.getRMAppAttempt(attemptId); - int timeoutSecs = 0; + final int timeoutMsecs = 40000; + final int minWaitMsecs = 1000; + final int waitMsPerLoop = 500; + int loop = 0; while (!finalState.equals(attempt.getAppAttemptState()) - && timeoutSecs++ < 40) { + && waitMsPerLoop * loop < timeoutMsecs) { System.out - .println("AppAttempt : " + attemptId + " State is : " + .println("AppAttempt : " + attemptId + " State is : " + attempt.getAppAttemptState() + " Waiting for state : " + finalState); - Thread.sleep(1000); + Thread.sleep(waitMsPerLoop); + loop++; + } + int waitedMsecs = waitMsPerLoop * loop; + if (minWaitMsecs > waitedMsecs) { + Thread.sleep(minWaitMsecs - waitedMsecs); + } + System.out.println("Attempt State is : " + attempt.getAppAttemptState()); + if (waitedMsecs >= timeoutMsecs) { + Assert.fail("Attempt state is not correct (timedout): expected: " + + finalState + " actual: " + attempt.getAppAttemptState()); } - System.out.println("AppAttempt State is : " + attempt.getAppAttemptState()); - Assert.assertEquals("AppAttempt state is not correct (timedout)", - finalState, attempt.getAppAttemptState()); } public RegisterApplicationMasterResponse registerAppAttempt() 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 06c6b32..da191b3 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 @@ -124,15 +124,22 @@ public void waitForState(ApplicationId appId, RMAppState finalState) throws Exception { RMApp app = getRMContext().getRMApps().get(appId); Assert.assertNotNull("app shouldn't be null", app); - int timeoutSecs = 0; - while (!finalState.equals(app.getState()) && timeoutSecs++ < 40) { + final int timeoutMsecs = 80000; + final int waitMsPerLoop = 500; + int loop = 0; + while (!finalState.equals(app.getState()) && + ((waitMsPerLoop * loop) < timeoutMsecs)) { System.out.println("App : " + appId + " State is : " + app.getState() + " Waiting for state : " + finalState); - Thread.sleep(2000); + Thread.sleep(waitMsPerLoop); + loop++; } + int waitedMsecs = waitMsPerLoop * loop; System.out.println("App State is : " + app.getState()); - Assert.assertEquals("App state is not correct (timedout)", finalState, - app.getState()); + if (waitedMsecs >= timeoutMsecs) { + Assert.fail("App state is not correct (timedout): expected: " + + finalState + " actual: " + app.getState()); + } } public void waitForState(ApplicationAttemptId attemptId, @@ -141,16 +148,27 @@ public void waitForState(ApplicationAttemptId attemptId, RMApp app = getRMContext().getRMApps().get(attemptId.getApplicationId()); Assert.assertNotNull("app shouldn't be null", app); RMAppAttempt attempt = app.getRMAppAttempt(attemptId); - int timeoutSecs = 0; - while (!finalState.equals(attempt.getAppAttemptState()) && timeoutSecs++ < 40) { + final int timeoutMsecs = 40000; + final int minWaitMsecs = 1000; + final int waitMsPerLoop = 10; + int loop = 0; + while (!finalState.equals(attempt.getAppAttemptState()) + && waitMsPerLoop * loop < timeoutMsecs) { System.out.println("AppAttempt : " + attemptId + " State is : " + attempt.getAppAttemptState() + " Waiting for state : " + finalState); - Thread.sleep(1000); + Thread.sleep(waitMsPerLoop); + loop++; + } + int waitedMsecs = waitMsPerLoop * loop; + if (minWaitMsecs > waitedMsecs) { + Thread.sleep(minWaitMsecs - waitedMsecs); } System.out.println("Attempt State is : " + attempt.getAppAttemptState()); - Assert.assertEquals("Attempt state is not correct (timedout)", finalState, - attempt.getAppAttemptState()); + if (waitedMsecs >= timeoutMsecs) { + Assert.fail("Attempt state is not correct (timedout): expected: " + + finalState + " actual: " + attempt.getAppAttemptState()); + } } public void waitForContainerAllocated(MockNM nm, ContainerId containerId) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java index d1f0ede..f1ea36e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java @@ -20,6 +20,7 @@ import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse; import org.apache.hadoop.yarn.proto.YarnServiceProtos.SchedulerResourceTypes; +import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler; 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 fc419ac..f944e50 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 @@ -586,10 +586,28 @@ public void testRMRestartWaitForPreviousAMToFinish() throws Exception { .getAppAttemptState()); Assert.assertEquals(RMAppAttemptState.LAUNCHED,rmApp.getAppAttempts() .get(latestAppAttemptId).getAppAttemptState()); - + rm3.waitForState(latestAppAttemptId, RMAppAttemptState.FAILED); rm3.waitForState(rmApp.getApplicationId(), RMAppState.ACCEPTED); - Assert.assertEquals(4, rmApp.getAppAttempts().size()); + final int maxRetry = 10; + int retry = 0; + while (retry < maxRetry) { + // This is workaround to wait for the completion of the handler for + // the state transition. + retry++; + if (retry >= maxRetry) { + // reaches max retry. assert and abort. + Assert.assertEquals(4, rmApp.getAppAttempts().size()); + } + if (rmApp.getAppAttempts().size() != 4) { + // retry. + Thread.sleep(100); + } else { + // assert and go next. + Assert.assertEquals(4, rmApp.getAppAttempts().size()); + break; + } + } Assert.assertEquals(RMAppAttemptState.FAILED, rmApp.getAppAttempts().get(latestAppAttemptId).getAppAttemptState()); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java index 7befba4..78f2b75 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java @@ -592,7 +592,7 @@ public void testRMRestartOrFailoverNotCountedForAMFailures() rm2.stop(); } - @Test (timeout = 50000) + @Test (timeout = 120000) public void testRMAppAttemptFailuresValidityInterval() throws Exception { YarnConfiguration conf = new YarnConfiguration(); conf.setClass(YarnConfiguration.RM_SCHEDULER, CapacityScheduler.class,