Browse Source

YARN-1910. Fixed a race condition in TestAMRMTokens that causes the test to fail more often on Windows. Contributed by Xuan Gong.
svn merge --ignore-ancestry -c 1586192 ../../trunk/


git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1586193 13f79535-47bb-0310-9956-ffa450edef68

Vinod Kumar Vavilapalli 11 năm trước cách đây
mục cha
commit
614faccf1d

+ 3 - 0
hadoop-yarn-project/CHANGES.txt

@@ -79,6 +79,9 @@ Release 2.4.1 - UNRELEASED
     YARN-1908. Fixed DistributedShell to not fail in secure clusters. (Vinod
     Kumar Vavilapalli and Jian He via vinodkv)
 
+    YARN-1910. Fixed a race condition in TestAMRMTokens that causes the test to
+    fail more often on Windows. (Xuan Gong via vinodkv)
+
 Release 2.4.0 - 2014-04-07 
 
   INCOMPATIBLE CHANGES

+ 12 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/security/TestAMRMTokens.java

@@ -48,6 +48,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.TestAMAuthorization.MockRMW
 import org.apache.hadoop.yarn.server.resourcemanager.TestAMAuthorization.MyContainerManager;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.event.RMAppAttemptContainerFinishedEvent;
 import org.apache.hadoop.yarn.server.utils.BuilderUtils;
 import org.apache.hadoop.yarn.util.Records;
@@ -63,6 +64,7 @@ public class TestAMRMTokens {
   private static final Log LOG = LogFactory.getLog(TestAMRMTokens.class);
 
   private final Configuration conf;
+  private static final int maxWaitAttempts = 50;
 
   @Parameters
   public static Collection<Object[]> configs() {
@@ -153,6 +155,16 @@ public class TestAMRMTokens {
               new RMAppAttemptContainerFinishedEvent(applicationAttemptId,
                   containerStatus));
 
+      // Make sure the RMAppAttempt is at Finished State.
+      // Both AMRMToken and ClientToAMToken have been removed.
+      int count = 0;
+      while (attempt.getState() != RMAppAttemptState.FINISHED
+          && count < maxWaitAttempts) {
+        Thread.sleep(100);
+        count++;
+      }
+      Assert.assertTrue(attempt.getState() == RMAppAttemptState.FINISHED);
+
       // Now simulate trying to allocate. RPC call itself should throw auth
       // exception.
       rpc.stopProxy(rmClient, conf); // To avoid using cached client