YARN-5024. TestContainerResourceUsage#testUsageAfterAMRestartWithMultipleContainers random failure. Contributed by Bibin A Chundatt

This commit is contained in:
Rohith Sharma K S 2016-05-25 10:15:50 +05:30
parent ae353ea969
commit 28bd63e92b
1 changed files with 20 additions and 6 deletions

View File

@ -309,7 +309,7 @@ public class TestContainerResourceUsage {
nm.nodeHeartbeat(am0.getApplicationAttemptId(),
amContainerId.getContainerId(), ContainerState.COMPLETE);
rm.waitForState(am0.getApplicationAttemptId(), RMAppAttemptState.FAILED);
rm.drainEvents();
long memorySeconds = 0;
long vcoreSeconds = 0;
@ -331,7 +331,8 @@ public class TestContainerResourceUsage {
} else {
// If keepRunningContainers is false, all live containers should now
// be completed. Calculate the resource usage metrics for all of them.
for (RMContainer c : rmContainers) {
for (RMContainer c : rmContainers) {
waitforContainerCompletion(rm, nm, amContainerId, c);
AggregateAppResourceUsage ru = calculateContainerResourceMetrics(c);
memorySeconds += ru.getMemorySeconds();
vcoreSeconds += ru.getVcoreSeconds();
@ -346,13 +347,11 @@ public class TestContainerResourceUsage {
Assert.assertFalse(attempt2.getAppAttemptId()
.equals(am0.getApplicationAttemptId()));
// launch the new AM
//TODO explore a better way than sleeping for a while (YARN-4929)
Thread.sleep(1000);
rm.waitForState(attempt2.getAppAttemptId(), RMAppAttemptState.SCHEDULED);
nm.nodeHeartbeat(true);
MockAM am1 = rm.sendAMLaunched(attempt2.getAppAttemptId());
am1.registerAppAttempt();
rm.waitForState(am1.getApplicationAttemptId(), RMAppAttemptState.RUNNING);
// allocate NUM_CONTAINERS containers
am1.allocate("127.0.0.1", 1024, NUM_CONTAINERS,
new ArrayList<ContainerId>());
@ -385,6 +384,7 @@ public class TestContainerResourceUsage {
// Calculate container usage metrics for second attempt.
for (RMContainer c : rmContainers) {
waitforContainerCompletion(rm, nm, amContainerId, c);
AggregateAppResourceUsage ru = calculateContainerResourceMetrics(c);
memorySeconds += ru.getMemorySeconds();
vcoreSeconds += ru.getVcoreSeconds();
@ -401,6 +401,20 @@ public class TestContainerResourceUsage {
return;
}
private void waitforContainerCompletion(MockRM rm, MockNM nm,
ContainerId amContainerId, RMContainer container) throws Exception {
ContainerId containerId = container.getContainerId();
if (null != rm.scheduler.getRMContainer(containerId)) {
if (containerId.equals(amContainerId)) {
rm.waitForState(nm, containerId, RMContainerState.COMPLETED);
} else {
rm.waitForState(nm, containerId, RMContainerState.KILLED);
}
} else {
rm.drainEvents();
}
}
private AggregateAppResourceUsage calculateContainerResourceMetrics(
RMContainer rmContainer) {
Resource resource = rmContainer.getContainer().getResource();