YARN-8618. Added detection for non-upgradable service.

Contributed by Chandni Singh

(cherry picked from commit 66f059ed1d)
This commit is contained in:
Eric Yang 2018-10-18 19:59:11 -04:00
parent 1810f2392f
commit 91c916e209
2 changed files with 39 additions and 1 deletions

View File

@ -238,7 +238,22 @@ public class ServiceClient extends AppAdminClient implements SliderExitCodes,
LOG.error(message);
throw new YarnException(message);
}
boolean foundNotNeverComp = false;
for (Component comp : persistedService.getComponents()) {
// If restart policy of any component is not NEVER then upgrade is
// allowed.
if (!comp.getRestartPolicy().equals(Component.RestartPolicyEnum.NEVER)) {
foundNotNeverComp = true;
break;
}
}
if (!foundNotNeverComp) {
String message = "All the components of the service " + service.getName()
+ " have " + Component.RestartPolicyEnum.NEVER + " restart policy, " +
"so it cannot be upgraded.";
LOG.error(message);
throw new YarnException(message);
}
Service liveService = getStatus(service.getName());
if (!liveService.getState().equals(ServiceState.STABLE)) {
String message = service.getName() + " is at " + liveService.getState()

View File

@ -149,6 +149,29 @@ public class TestServiceClient {
client.stop();
}
@Test
public void testUpgradeDisabledWhenAllCompsHaveNeverRestartPolicy()
throws Exception {
Service service = createService();
service.getComponents().forEach(comp ->
comp.setRestartPolicy(Component.RestartPolicyEnum.NEVER));
ServiceClient client = MockServiceClient.create(rule, service, true);
//upgrade the service
service.setVersion("v2");
try {
client.initiateUpgrade(service);
} catch (YarnException ex) {
Assert.assertEquals("All the components of the service " +
service.getName() + " have " + Component.RestartPolicyEnum.NEVER
+ " restart policy, so it cannot be upgraded.",
ex.getMessage());
return;
}
Assert.fail();
}
private Service createService() throws IOException,
YarnException {
Service service = ServiceTestUtils.createExampleApplication();