Validating deployment policy removal
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/24cd70ab Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/24cd70ab Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/24cd70ab Branch: refs/heads/master Commit: 24cd70ab89b42683d0acc7c7e61e3a72dbef03ee Parents: 3546283 Author: Vishanth <[email protected]> Authored: Tue May 19 19:07:24 2015 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Tue May 19 19:21:13 2015 +0530 ---------------------------------------------------------------------- .../services/impl/AutoscalerServiceImpl.java | 32 ++++++++++++++++++-- .../common/client/AutoscalerServiceClient.java | 3 +- .../rest/endpoint/api/StratosApiV41.java | 4 ++- .../rest/endpoint/api/StratosApiV41Utils.java | 3 +- 4 files changed, 37 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/24cd70ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java index 8edf8e0..083d18f 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java @@ -125,6 +125,27 @@ public class AutoscalerServiceImpl implements AutoscalerService { return canRemove; } + /** + * Validate the deployment policy removal + * + * @param deploymentPolicyId + * @return + */ + private boolean removableDeploymentPolicy(String deploymentPolicyId) { + boolean canRemove = true; + Collection<ApplicationContext> appContexts = AutoscalerContext.getInstance().getApplicationContexts(); + for (ApplicationContext app : appContexts) { + CartridgeContext[] cartridgeContexts = app.getComponents().getCartridgeContexts(); + for (CartridgeContext cartridgeContext : cartridgeContexts) { + SubscribableInfoContext subscribableInfoContexts = cartridgeContext.getSubscribableInfoContext(); + if (subscribableInfoContexts.getDeploymentPolicy().equals(deploymentPolicyId)) { + canRemove = false; + } + } + } + return canRemove; + } + @Override public AutoscalePolicy getAutoscalingPolicy(String autoscalingPolicyId) { return PolicyManager.getInstance().getAutoscalePolicy(autoscalingPolicyId); @@ -1167,7 +1188,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { } @Override - public boolean removeDeployementPolicy(String deploymentPolicyID) throws DeploymentPolicyNotExistsException { + public boolean removeDeployementPolicy(String deploymentPolicyID) throws DeploymentPolicyNotExistsException, + UnremovablePolicyException { if (log.isInfoEnabled()) { log.info("Removing deployment policy: [deployment-policy_id] " + deploymentPolicyID); } @@ -1176,7 +1198,13 @@ public class AutoscalerServiceImpl implements AutoscalerService { log.error(message); throw new DeploymentPolicyNotExistsException(message); } - PolicyManager.getInstance().removeDeploymentPolicy(deploymentPolicyID); + if (removableDeploymentPolicy(deploymentPolicyID)) { + PolicyManager.getInstance().removeDeploymentPolicy(deploymentPolicyID); + } + else { + throw new UnremovablePolicyException("This deployment policy cannot be removed, since it is used in an " + + "application."); + } if (log.isInfoEnabled()) { log.info("Successfully removed deployment policy: [deployment_policy_id] " + deploymentPolicyID); } http://git-wip-us.apache.org/repos/asf/stratos/blob/24cd70ab/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java index f6a97e7..1937cf3 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java @@ -217,7 +217,8 @@ public class AutoscalerServiceClient { } public void removeDeploymentPolicy(String deploymentPolicyID) throws RemoteException, - AutoscalerServiceDeploymentPolicyNotExistsExceptionException { + AutoscalerServiceDeploymentPolicyNotExistsExceptionException, + AutoscalerServiceUnremovablePolicyExceptionException { stub.removeDeployementPolicy(deploymentPolicyID); } http://git-wip-us.apache.org/repos/asf/stratos/blob/24cd70ab/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java index 5765b26..64e9888 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java @@ -273,12 +273,14 @@ public class StratosApiV41 extends AbstractApi { @AuthorizationAction("/permission/admin/manage/removeDeploymentPolicy") public Response removeDeploymentPolicy( @PathParam("deploymentPolicyId") String deploymentPolicyId) throws RestAPIException { - try { StratosApiV41Utils.removeDeploymentPolicy(deploymentPolicyId); } catch (AutoscalerServiceDeploymentPolicyNotExistsExceptionException e) { return Response.status(Response.Status.NOT_FOUND).entity(new ResponseMessageBean( ResponseMessageBean.ERROR, "Deployment policy not found")).build(); + } catch (AutoscalerServiceUnremovablePolicyExceptionException e) { + return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean( + ResponseMessageBean.ERROR, "Deployment policy is in use")).build(); } URI url = uriInfo.getAbsolutePathBuilder().path(deploymentPolicyId).build(); return Response.ok(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS, http://git-wip-us.apache.org/repos/asf/stratos/blob/24cd70ab/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java index 527bdd6..58244be 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java @@ -2792,7 +2792,8 @@ public class StratosApiV41Utils { * @throws RestAPIException */ public static void removeDeploymentPolicy(String deploymentPolicyID) - throws RestAPIException, AutoscalerServiceDeploymentPolicyNotExistsExceptionException { + throws RestAPIException, AutoscalerServiceDeploymentPolicyNotExistsExceptionException, + AutoscalerServiceUnremovablePolicyExceptionException { try { AutoscalerServiceClient.getInstance().removeDeploymentPolicy(deploymentPolicyID); } catch (RemoteException e) {
