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

Signed-off-by: Jonathan Eagles <jeagles@gmail.com>
This commit is contained in:
Ahmed Hussein 2020-04-30 17:50:55 -05:00 committed by Jonathan Eagles
parent be6070081d
commit 712da57658

View File

@ -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 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 void testPromotionOfOpportunisticContainers() throws Exception {
@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 void testContainerUpdateExecTypeGuaranteedToOpportunistic()
1, updateResponse.getSuccessfullyUpdatedContainers().size()); 1, updateResponse.getSuccessfullyUpdatedContainers().size());
Assert.assertTrue(updateResponse.getFailedRequests().isEmpty()); Assert.assertTrue(updateResponse.getFailedRequests().isEmpty());
//Make sure the container is running final GetContainerStatusesRequest statRequest =
List<ContainerId> statList = new ArrayList<ContainerId>(); GetContainerStatusesRequest.newInstance(
statList.add(cId); Collections.singletonList(cId));
GetContainerStatusesRequest statRequest = final org.apache.hadoop.yarn.api.records.ContainerState expectedState =
GetContainerStatusesRequest.newInstance(statList); org.apache.hadoop.yarn.api.records.ContainerState.RUNNING;
List<ContainerStatus> containerStatuses = containerManager
.getContainerStatuses(statRequest).getContainerStatuses(); GenericTestUtils.waitFor(new Supplier<Boolean>() {
Assert.assertEquals(1, containerStatuses.size()); @Override
for (ContainerStatus status : containerStatuses) { public Boolean get() {
Assert.assertEquals( List<ContainerStatus> containerStatuses;
org.apache.hadoop.yarn.api.records.ContainerState.RUNNING, try {
status.getState()); containerStatuses = containerManager
Assert .getContainerStatuses(statRequest).getContainerStatuses();
.assertEquals(ExecutionType.OPPORTUNISTIC, status.getExecutionType()); } 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);
} }
} }