From 712da57658bb3f46f506a291cdc4d80854701a41 Mon Sep 17 00:00:00 2001 From: Ahmed Hussein Date: Thu, 30 Apr 2020 17:50:55 -0500 Subject: [PATCH] YARN-10255. fix intermittent failure TestContainerSchedulerQueuing.testContainerUpdateExecTypeGuaranteedToOpportunistic in branch-2.10 (Ahmed Hussein via jeagles) Signed-off-by: Jonathan Eagles --- .../TestContainerSchedulerQueuing.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/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 b/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 index 4abea5799e5..202bd082d1b 100644 --- a/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 +++ b/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; +import com.google.common.base.Supplier; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,6 +31,7 @@ import org.apache.hadoop.fs.UnsupportedFileSystemException; 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.ContainerUpdateResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesRequest; @@ -1216,7 +1219,7 @@ public void testPromotionOfOpportunisticContainers() throws Exception { @Test public void testContainerUpdateExecTypeGuaranteedToOpportunistic() - throws IOException, YarnException, InterruptedException { + throws Exception { delayContainers = true; containerManager.start(); // Construct the Container-id @@ -1253,20 +1256,27 @@ public void testContainerUpdateExecTypeGuaranteedToOpportunistic() 1, updateResponse.getSuccessfullyUpdatedContainers().size()); Assert.assertTrue(updateResponse.getFailedRequests().isEmpty()); - //Make sure the container is running - List statList = new ArrayList(); - statList.add(cId); - GetContainerStatusesRequest statRequest = - GetContainerStatusesRequest.newInstance(statList); - List 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() { + @Override + public Boolean get() { + List 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); } }