diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java index 030e0dbf848..8877f12bdd7 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java @@ -417,6 +417,11 @@ public int actionDecommissionInstances(String appName, ApplicationId.fromString(persistedService.getId()), persistedService .getKerberosPrincipal().getPrincipalName())); + Service liveService = getStatus(appName); + if (liveService == null) { + throw new YarnException(appName + " does not exist !"); + } + for (String instance : componentInstances) { String componentName = ServiceApiUtil.parseComponentName( ServiceApiUtil.parseAndValidateComponentInstanceName(instance, @@ -427,8 +432,12 @@ public int actionDecommissionInstances(String appName, } if (!component.getDecommissionedInstances().contains(instance)) { component.addDecommissionedInstance(instance); - component.setNumberOfContainers(Math.max(0, component - .getNumberOfContainers() - 1)); + if (liveService.getComponent(componentName) != null && + liveService.getComponent(componentName).getComponentInstance( + instance) != null) { + component.setNumberOfContainers(Math.max(0, component + .getNumberOfContainers() - 1)); + } } } ServiceApiUtil.writeAppDefinition(fs, persistedService);