YARN-9405. Fixed flaky tests in TestYarnNativeServices.

Contributed by Prabhu Joseph
This commit is contained in:
Eric Yang 2019-03-25 16:34:04 -04:00
parent eeda6891e4
commit 710cbc9bd6
2 changed files with 26 additions and 2 deletions

View File

@ -535,6 +535,12 @@ public class ServiceTestUtils {
waitForServiceToBeInState(client, exampleApp, ServiceState.STARTED); waitForServiceToBeInState(client, exampleApp, ServiceState.STARTED);
} }
protected void waitForServiceToBeExpressUpgrading(ServiceClient client,
Service exampleApp) throws TimeoutException, InterruptedException {
waitForServiceToBeInState(client, exampleApp,
ServiceState.EXPRESS_UPGRADING);
}
protected void waitForServiceToBeInState(ServiceClient client, protected void waitForServiceToBeInState(ServiceClient client,
Service exampleApp, ServiceState desiredState) throws TimeoutException, Service exampleApp, ServiceState desiredState) throws TimeoutException,
InterruptedException { InterruptedException {

View File

@ -439,6 +439,8 @@ public class TestYarnNativeServices extends ServiceTestUtils {
component2.getConfiguration().getEnv().put("key2", "val2"); component2.getConfiguration().getEnv().put("key2", "val2");
client.actionUpgradeExpress(service); client.actionUpgradeExpress(service);
waitForServiceToBeExpressUpgrading(client, service);
// wait for upgrade to complete // wait for upgrade to complete
waitForServiceToBeStable(client, service); waitForServiceToBeStable(client, service);
Service active = client.getStatus(service.getName()); Service active = client.getStatus(service.getName());
@ -859,16 +861,32 @@ public class TestYarnNativeServices extends ServiceTestUtils {
private void checkCompInstancesInOrder(ServiceClient client, private void checkCompInstancesInOrder(ServiceClient client,
Service exampleApp) throws IOException, YarnException, Service exampleApp) throws IOException, YarnException,
TimeoutException, InterruptedException { TimeoutException, InterruptedException {
waitForContainers(client, exampleApp);
Service service = client.getStatus(exampleApp.getName()); Service service = client.getStatus(exampleApp.getName());
for (Component comp : service.getComponents()) { for (Component comp : service.getComponents()) {
checkEachCompInstancesInOrder(comp, exampleApp.getName()); checkEachCompInstancesInOrder(comp, exampleApp.getName());
} }
} }
private void waitForContainers(ServiceClient client, Service exampleApp)
throws TimeoutException, InterruptedException {
GenericTestUtils.waitFor(() -> {
try {
Service service = client.getStatus(exampleApp.getName());
for (Component comp : service.getComponents()) {
if (comp.getContainers().size() != comp.getNumberOfContainers()) {
return false;
}
}
return true;
} catch (Exception e) {
return false;
}
}, 2000, 200000);
}
private void checkEachCompInstancesInOrder(Component component, String private void checkEachCompInstancesInOrder(Component component, String
serviceName) throws TimeoutException, InterruptedException { serviceName) throws TimeoutException, InterruptedException {
long expectedNumInstances = component.getNumberOfContainers();
Assert.assertEquals(expectedNumInstances, component.getContainers().size());
TreeSet<String> instances = new TreeSet<>(); TreeSet<String> instances = new TreeSet<>();
for (Container container : component.getContainers()) { for (Container container : component.getContainers()) {
instances.add(container.getComponentInstanceName()); instances.add(container.getComponentInstanceName());