YARN-6359. TestRM#testApplicationKillAtAcceptedState fails rarely due to race condition. Contributed by Robert Kanter

This commit is contained in:
Jason Lowe 2017-03-28 09:33:26 -05:00
parent ef43a62482
commit bea8f8190f
1 changed files with 12 additions and 4 deletions

View File

@ -18,6 +18,8 @@
package org.apache.hadoop.yarn.server.resourcemanager; package org.apache.hadoop.yarn.server.resourcemanager;
import com.google.common.base.Supplier;
import org.apache.hadoop.test.GenericTestUtils;
import org.apache.hadoop.yarn.event.DrainDispatcher; import org.apache.hadoop.yarn.event.DrainDispatcher;
import org.junit.Before; import org.junit.Before;
import static org.mockito.Matchers.argThat; import static org.mockito.Matchers.argThat;
@ -590,9 +592,9 @@ public class TestRM extends ParameterizedSchedulerTestBase {
}; };
// test metrics // test metrics
QueueMetrics metrics = rm.getResourceScheduler().getRootQueueMetrics(); final QueueMetrics metrics = rm.getResourceScheduler().getRootQueueMetrics();
int appsKilled = metrics.getAppsKilled(); final int appsKilled = metrics.getAppsKilled();
int appsSubmitted = metrics.getAppsSubmitted(); final int appsSubmitted = metrics.getAppsSubmitted();
rm.start(); rm.start();
@ -630,7 +632,13 @@ public class TestRM extends ParameterizedSchedulerTestBase {
rm.waitForState(application.getApplicationId(), RMAppState.KILLED); rm.waitForState(application.getApplicationId(), RMAppState.KILLED);
// test metrics // test metrics
metrics = rm.getResourceScheduler().getRootQueueMetrics(); GenericTestUtils.waitFor(new Supplier<Boolean>() {
@Override
public Boolean get() {
return appsKilled + 1 == metrics.getAppsKilled()
&& appsSubmitted + 1 == metrics.getAppsSubmitted();
}
}, 100, 10000);
Assert.assertEquals(appsKilled + 1, metrics.getAppsKilled()); Assert.assertEquals(appsKilled + 1, metrics.getAppsKilled());
Assert.assertEquals(appsSubmitted + 1, metrics.getAppsSubmitted()); Assert.assertEquals(appsSubmitted + 1, metrics.getAppsSubmitted());
} }