Browse Source

YARN-10255. fix intermittent failure TestContainerSchedulerQueuing.testContainerUpdateExecTypeGuaranteedToOpportunistic in branch-2.10 (Ahmed Hussein via jeagles)

Signed-off-by: Jonathan Eagles <jeagles@gmail.com>
Ahmed Hussein 5 years ago
parent
commit
712da57658

+ 26 - 16
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/scheduler/TestContainerSchedulerQueuing.java

@@ -18,9 +18,11 @@
 
 
 package org.apache.hadoop.yarn.server.nodemanager.containermanager.scheduler;
 package org.apache.hadoop.yarn.server.nodemanager.containermanager.scheduler;
 
 
+import com.google.common.base.Supplier;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -29,6 +31,7 @@ import java.util.concurrent.ConcurrentMap;
 
 
 import org.apache.hadoop.fs.UnsupportedFileSystemException;
 import org.apache.hadoop.fs.UnsupportedFileSystemException;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.test.GenericTestUtils;
 import org.apache.hadoop.yarn.api.protocolrecords.ContainerUpdateRequest;
 import org.apache.hadoop.yarn.api.protocolrecords.ContainerUpdateRequest;
 import org.apache.hadoop.yarn.api.protocolrecords.ContainerUpdateResponse;
 import org.apache.hadoop.yarn.api.protocolrecords.ContainerUpdateResponse;
 import org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesRequest;
 import org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesRequest;
@@ -1216,7 +1219,7 @@ public class TestContainerSchedulerQueuing extends BaseContainerManagerTest {
 
 
   @Test
   @Test
   public void testContainerUpdateExecTypeGuaranteedToOpportunistic()
   public void testContainerUpdateExecTypeGuaranteedToOpportunistic()
-      throws IOException, YarnException, InterruptedException {
+          throws Exception {
     delayContainers = true;
     delayContainers = true;
     containerManager.start();
     containerManager.start();
     // Construct the Container-id
     // Construct the Container-id
@@ -1253,20 +1256,27 @@ public class TestContainerSchedulerQueuing extends BaseContainerManagerTest {
         1, updateResponse.getSuccessfullyUpdatedContainers().size());
         1, updateResponse.getSuccessfullyUpdatedContainers().size());
     Assert.assertTrue(updateResponse.getFailedRequests().isEmpty());
     Assert.assertTrue(updateResponse.getFailedRequests().isEmpty());
 
 
-    //Make sure the container is running
-    List<ContainerId> statList = new ArrayList<ContainerId>();
-    statList.add(cId);
-    GetContainerStatusesRequest statRequest =
-        GetContainerStatusesRequest.newInstance(statList);
-    List<ContainerStatus> containerStatuses = containerManager
-        .getContainerStatuses(statRequest).getContainerStatuses();
-    Assert.assertEquals(1, containerStatuses.size());
-    for (ContainerStatus status : containerStatuses) {
-      Assert.assertEquals(
-          org.apache.hadoop.yarn.api.records.ContainerState.RUNNING,
-          status.getState());
-      Assert
-          .assertEquals(ExecutionType.OPPORTUNISTIC, status.getExecutionType());
-    }
+    final GetContainerStatusesRequest statRequest =
+                    GetContainerStatusesRequest.newInstance(
+                                    Collections.singletonList(cId));
+    final org.apache.hadoop.yarn.api.records.ContainerState expectedState =
+                    org.apache.hadoop.yarn.api.records.ContainerState.RUNNING;
+
+    GenericTestUtils.waitFor(new Supplier<Boolean>() {
+      @Override
+      public Boolean get() {
+        List<ContainerStatus> containerStatuses;
+        try {
+          containerStatuses = containerManager
+                  .getContainerStatuses(statRequest).getContainerStatuses();
+        } catch (YarnException | IOException e) {
+          return false;
+        }
+        Assert.assertEquals(1, containerStatuses.size());
+        ContainerStatus status = containerStatuses.get(0);
+        return (status.getState() == expectedState
+                && status.getExecutionType() == ExecutionType.OPPORTUNISTIC);
+      }
+    }, 20, 10000);
   }
   }
 }
 }