diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java index 8a521c7ebcf5d8d38530da81cc97bd68dd9fcb51..87cc2328bf2e9b0ecc5208687ee2f5af8274cffc 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java @@ -2,6 +2,7 @@ package net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.KubernetesTemplate; import net.geant.nmaas.orchestration.Identifier; +import net.geant.nmaas.orchestration.entities.AppDeployment; public interface KServiceLifecycleManager { @@ -15,4 +16,6 @@ public interface KServiceLifecycleManager { void updateHelmRepo(); + void scaleDeployment(AppDeployment deployment, int replicas); + } diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java index 01a3fd9b4307cc5eea008c719b76d0442d1d6b4c..2ecfd4a0e9f62cf7beb7c845edd6eeca4757aff7 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java @@ -169,5 +169,20 @@ public class HelmCommandExecutor { throw new CommandExecutionException("Failed to execute helm repository add command -> " + e.getMessage()); } } + public void executeScaleCommand(String namespace, String releaseName, int replicas) { + try { + HelmUpgradeCommand command = HelmUpgradeCommand.commandWithSetValues( + helmVersion, + namespace, + releaseName, + List.of("replicaCount=" + replicas), + enableTls + ); + + commandExecutor.execute(command); + } catch (CommandExecutionException e) { + throw new CommandExecutionException("Failed to execute helm scale command -> " + e.getMessage()); + } + } } diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java index 753891c45e3e7d4b994bb74ab1a777580518e248..7271bfce1befe1bf37fb3a9241a19a3408c96703 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java @@ -15,10 +15,11 @@ import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.en import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.ServiceStorageVolume; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.exceptions.KServiceManipulationException; import net.geant.nmaas.orchestration.Identifier; +import net.geant.nmaas.orchestration.entities.AppDeployment; import net.geant.nmaas.orchestration.repositories.DomainTechDetailsRepository; +import net.geant.nmaas.utils.bash.CommandExecutionException; import net.geant.nmaas.utils.logging.LogLevel; import net.geant.nmaas.utils.logging.Loggable; -import net.geant.nmaas.utils.bash.CommandExecutionException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -114,12 +115,12 @@ public class HelmKServiceManager implements KServiceLifecycleManager { static Map<String, String> removeRedundantParameters(Map<String, String> additionalParameters) { return additionalParameters.entrySet().stream().filter(entry -> - !entry.getKey().contains(RANDOM_ARGUMENT_EXPRESSION_PREFIX) - && !entry.getKey().contains(PUBLIC_ACCESS_SELECTOR_ARGUMENT_EXPRESSION_PREFIX) - ).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + !entry.getKey().contains(RANDOM_ARGUMENT_EXPRESSION_PREFIX) + && !entry.getKey().contains(PUBLIC_ACCESS_SELECTOR_ARGUMENT_EXPRESSION_PREFIX) + ).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } - private Map<String, String> getIngressVariables(IngressResourceConfigOption ingressResourceConfigOption, Set<ServiceAccessMethod> externalAccessMethods, String domain){ + private Map<String, String> getIngressVariables(IngressResourceConfigOption ingressResourceConfigOption, Set<ServiceAccessMethod> externalAccessMethods, String domain) { return HelmChartVariables.ingressVariablesMap( DEPLOY_FROM_CHART.equals(ingressResourceConfigOption), externalAccessMethods, @@ -131,7 +132,7 @@ public class HelmKServiceManager implements KServiceLifecycleManager { ); } - private String getIngressClass(String domain){ + private String getIngressClass(String domain) { if (Boolean.TRUE.equals(ingressManager.getIngressPerDomain())) { return domainTechDetailsRepository.findByDomainCodename(domain).orElseThrow(() -> new IllegalArgumentException("DomainTechDetails cannot be found for domain " + domain)).getKubernetesIngressClass(); } @@ -191,4 +192,12 @@ public class HelmKServiceManager implements KServiceLifecycleManager { } } + @Override + public void scaleDeployment(AppDeployment deployment, int replicas) { + KubernetesNmServiceInfo serviceInfo = repositoryManager.loadService(deployment.getDeploymentId()); + String namespace = namespaceService.namespace(serviceInfo.getDomain()); + String releaseName = serviceInfo.getDescriptiveDeploymentId().getValue(); + + helmCommandExecutor.executeScaleCommand(namespace, releaseName, replicas); + } } \ No newline at end of file diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java index 0b0cbb3cd17e36c8f839afb7757d3b511af55b36..63b68198521ee9505ba665c6daf5b9ebb8ac05f0 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java @@ -3,6 +3,7 @@ package net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.c import com.google.common.base.Strings; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.components.helm.HelmCommand; +import java.util.List; import java.util.function.Predicate; public class HelmUpgradeCommand extends HelmCommand { @@ -78,4 +79,27 @@ public class HelmUpgradeCommand extends HelmCommand { return o -> !o.startsWith("Error"); } + public static HelmUpgradeCommand commandWithSetValues(String helmVersion, String namespace, String releaseName, List<String> setValues, boolean enableTls) { + if (!HELM_VERSION_3.equals(helmVersion)) { + throw new IllegalArgumentException("Upgrades are not supported for Helm v2"); + } + if (releaseName == null || releaseName.isEmpty()) { + throw new IllegalArgumentException("Name of the release can't be null or empty"); + } + + StringBuilder sb = new StringBuilder(); + sb.append(HELM) + .append(SPACE).append(UPGRADE) + .append(SPACE).append(OPTION_NAMESPACE).append(SPACE).append(namespace) + .append(SPACE).append(releaseName); + + for (String setValue : setValues) { + sb.append(SPACE).append("--set").append(SPACE).append(setValue); + } + + addTlsOptionIfRequired(helmVersion, enableTls, sb); + return new HelmUpgradeCommand(sb.toString()); + } + + } diff --git a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java index 94dbad6d4c431158915338caf4d0cd809f778e56..f4410a9345f74aece30c910208f21347b62a371a 100644 --- a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java +++ b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java @@ -90,4 +90,7 @@ public interface AppLifecycleManager { * @param deploymentId unique identifier of the deployed user application */ void updateApplicationStatus(Identifier deploymentId); + + void scaleDown(Identifier deploymentId); + void scaleUp(Identifier deploymentId); } diff --git a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java index 1a0543a6b25b8720aab58840c013655be902930e..cd031bab5e9b572adf7b9a1b4b805675d839f86f 100644 --- a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java +++ b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java @@ -218,6 +218,10 @@ public enum AppLifecycleState { APPLICATION_CONFIGURATION_REMOVAL_FAILED { @Override public String getUserFriendlyState() { return "APP_INSTANCE.PROGRESS.APP_CONF_REMOVE_ERROR"; } + }, + APPLICATION_SCALED_DOWN{ + @Override + public String getUserFriendlyState(){ return "APP_INSTANCE.PROGRESS.APP_SCALED_DOWN"; } }; public abstract String getUserFriendlyState(); diff --git a/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java b/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java index 922afaeb1fb79a51e11648bcf95aefbdfa92a075..dc78257a67fb4fe3eefe4485e4cb0809d3cd0967 100644 --- a/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java +++ b/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import net.geant.nmaas.nmservice.NmServiceDeploymentStateChangeEvent; import net.geant.nmaas.nmservice.configuration.exceptions.UserConfigHandlingException; import net.geant.nmaas.nmservice.deployment.NmServiceRepositoryManager; +import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KServiceLifecycleManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.components.janitor.JanitorService; import net.geant.nmaas.nmservice.deployment.entities.NmServiceDeploymentState; import net.geant.nmaas.orchestration.api.model.AppConfigurationView; @@ -54,6 +55,9 @@ public class DefaultAppLifecycleManager implements AppLifecycleManager { private final ApplicationEventPublisher eventPublisher; private final NmServiceRepositoryManager serviceRepositoryManager; private final JanitorService janitorService; + private final KServiceLifecycleManager kServiceLifecycleManager; + + private final AppTermsAcceptanceService appTermsAcceptanceService; private final ConfigurationManager configurationManager; @@ -277,5 +281,32 @@ public class DefaultAppLifecycleManager implements AppLifecycleManager { public void updateApplicationStatus(Identifier deploymentId) { eventPublisher.publishEvent(new AppVerifyServiceActionEvent(this, deploymentId)); } + @Override + @Loggable(LogLevel.INFO) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void scaleDown(Identifier deploymentId) { + AppDeployment appDeployment = deploymentRepositoryManager.load(deploymentId); + + kServiceLifecycleManager.scaleDeployment(appDeployment, 0); + + appDeployment.setState(AppDeploymentState.SCALED_DOWN); + deploymentRepositoryManager.update(appDeployment); + + log.info("Scaled down deployment [{}]", deploymentId.value()); + } + @Override + @Loggable(LogLevel.INFO) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void scaleUp(Identifier deploymentId) { + AppDeployment appDeployment = deploymentRepositoryManager.load(deploymentId); + + int replicas = 1; + + kServiceLifecycleManager.scaleDeployment(appDeployment, replicas); + + deploymentRepositoryManager.update(appDeployment); + + log.info("Scaled up deployment [{}]", deploymentId.value()); + } } diff --git a/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java b/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java index 315e0c1578bc90fc42aee76873dfa3480566d33a..e8caf8514bc81a3e900f0fdc6a4e7755634b0a83 100644 --- a/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java +++ b/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java @@ -11,16 +11,9 @@ import net.geant.nmaas.orchestration.exceptions.InvalidDeploymentIdException; import net.geant.nmaas.portal.persistent.entity.Application; import net.geant.nmaas.portal.persistent.repositories.ApplicationRepository; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -116,4 +109,17 @@ public class AppLifecycleManagerRestController { return ex.getMessage(); } + + @PutMapping("/{deploymentId}/scale-down") + public ResponseEntity<Void> scaleDownApp(@PathVariable String deploymentId) { + lifecycleManager.scaleDown(new Identifier(deploymentId)); + return ResponseEntity.ok().build(); + } + + @PutMapping("/{deploymentId}/scale-up") + public ResponseEntity<Void> scaleUpApp(@PathVariable String deploymentId) { + lifecycleManager.scaleUp(new Identifier(deploymentId)); + return ResponseEntity.ok().build(); + } + } diff --git a/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java b/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java index b35e07d6321a576a04040fb6928e7bd8cd4c0c96..0964c30950b5e904ca50a96fb54005e1d1d61de0 100644 --- a/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java +++ b/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java @@ -167,7 +167,8 @@ public enum AppDeploymentState { case DEPLOYMENT_FAILED: return APPLICATION_DEPLOYMENT_FAILED; default: - return nextStateForNotMatchingNmServiceDeploymentState(this, state); } + return nextStateForNotMatchingNmServiceDeploymentState(this, state); + } } }, APPLICATION_CONFIGURATION_FAILED { @@ -264,7 +265,7 @@ public enum AppDeploymentState { @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { - if (NmServiceDeploymentState.UPGRADE_INITIATED.equals(state)) { + if (NmServiceDeploymentState.UPGRADE_INITIATED.equals(state)) { return APPLICATION_UPGRADE_IN_PROGRESS; } return nextStateForNotMatchingNmServiceDeploymentState(this, state); @@ -277,7 +278,9 @@ public enum AppDeploymentState { }, APPLICATION_DEPLOYMENT_VERIFICATION_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_DEPLOYMENT_VERIFICATION_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_DEPLOYMENT_VERIFICATION_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -285,7 +288,9 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_RESTART_IN_PROGRESS { @Override @@ -333,7 +338,9 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_UPGRADE_IN_PROGRESS { @Override @@ -388,11 +395,15 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_REMOVAL_IN_PROGRESS { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_REMOVAL_IN_PROGRESS; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_REMOVAL_IN_PROGRESS; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -408,7 +419,9 @@ public enum AppDeploymentState { }, APPLICATION_REMOVED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_REMOVED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_REMOVED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -418,7 +431,7 @@ public enum AppDeploymentState { case CONFIGURATION_REMOVAL_INITIATED: return APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS; default: - return nextStateForNotMatchingNmServiceDeploymentState(this, state); + return nextStateForNotMatchingNmServiceDeploymentState(this, state); } } @@ -430,7 +443,9 @@ public enum AppDeploymentState { }, APPLICATION_REMOVAL_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_REMOVAL_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_REMOVAL_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -438,11 +453,15 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -458,11 +477,13 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_REMOVED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { - if (NmServiceDeploymentState.FAILED_APPLICATION_REMOVED.equals(state)) { + if (NmServiceDeploymentState.FAILED_APPLICATION_REMOVED.equals(state)) { return FAILED_APPLICATION_REMOVED; } return nextStateForNotMatchingNmServiceDeploymentState(this, state); @@ -470,7 +491,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_REMOVAL_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -479,7 +502,9 @@ public enum AppDeploymentState { }, FAILED_APPLICATION_REMOVED { @Override - public AppLifecycleState lifecycleState() {return AppLifecycleState.FAILED_APPLICATION_REMOVED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.FAILED_APPLICATION_REMOVED; + } @Override public boolean isInEndState() { @@ -488,7 +513,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_UPDATE_IN_PROGRESS { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_IN_PROGRESS; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_IN_PROGRESS; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -504,7 +531,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_UPDATED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -520,7 +549,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_UPDATE_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -528,11 +559,15 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, INTERNAL_ERROR { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.INTERNAL_ERROR; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.INTERNAL_ERROR; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -540,7 +575,26 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } + }, + SCALED_DOWN { + @Override + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_SCALED_DOWN; + } + + @Override + public AppDeploymentState nextState(NmServiceDeploymentState state) { + //TODO + return APPLICATION_CONFIGURED; + } + + @Override + public boolean isInRunningState() { + return true; + } }; public abstract AppLifecycleState lifecycleState(); @@ -563,7 +617,7 @@ public enum AppDeploymentState { if (!currentAppDeploymentState.isInEndState() && newNmServiceState.equals(NmServiceDeploymentState.REMOVAL_INITIATED)) { return APPLICATION_REMOVAL_IN_PROGRESS; } - if(currentAppDeploymentState.isInFailedState()) { + if (currentAppDeploymentState.isInFailedState()) { switch (newNmServiceState) { case INIT: return REQUESTED; @@ -576,7 +630,7 @@ public enum AppDeploymentState { default: } } - if(currentAppDeploymentState.isInRunningState()) { + if (currentAppDeploymentState.isInRunningState()) { switch (newNmServiceState) { case RESTART_INITIATED: return APPLICATION_RESTART_IN_PROGRESS;