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

Contributed by Chandni Singh
This commit is contained in:
Eric Yang 2018-10-18 19:59:11 -04:00
parent be1cffb085
commit 66f059ed1d
2 changed files with 39 additions and 1 deletions

View File

@ -238,7 +238,22 @@ private ApplicationReport upgradePrecheck(Service service)
LOG.error(message); LOG.error(message);
throw new YarnException(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()); Service liveService = getStatus(service.getName());
if (!liveService.getState().equals(ServiceState.STABLE)) { if (!liveService.getState().equals(ServiceState.STABLE)) {
String message = service.getName() + " is at " + liveService.getState() String message = service.getName() + " is at " + liveService.getState()

View File

@ -149,6 +149,29 @@ public void testGetCompInstances() throws Exception {
client.stop(); 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, private Service createService() throws IOException,
YarnException { YarnException {
Service service = ServiceTestUtils.createExampleApplication(); Service service = ServiceTestUtils.createExampleApplication();