Validate whether application policy is used before removing
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/a3e8cc5f Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/a3e8cc5f Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/a3e8cc5f Branch: refs/heads/master Commit: a3e8cc5fe5602aa9e1fb24242f5e50e1d44d6877 Parents: becc7a9 Author: anuruddhal <[email protected]> Authored: Tue May 19 19:58:09 2015 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Tue May 19 20:26:29 2015 +0530 ---------------------------------------------------------------------- .../services/impl/AutoscalerServiceImpl.java | 25 ++++++++++++++++---- .../common/client/AutoscalerServiceClient.java | 4 ++-- .../rest/endpoint/api/StratosApiV41.java | 5 ++++ .../rest/endpoint/api/StratosApiV41Utils.java | 3 ++- 4 files changed, 29 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/a3e8cc5f/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 083d18f..6f5ff51 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 @@ -829,7 +829,7 @@ public class AutoscalerServiceImpl implements AutoscalerService { @Override public boolean addApplicationPolicy(ApplicationPolicy applicationPolicy) - throws RemoteException, InvalidApplicationPolicyException,ApplicationPolicyAlreadyExistsException { + throws RemoteException, InvalidApplicationPolicyException, ApplicationPolicyAlreadyExistsException { // validating application policy AutoscalerUtil.validateApplicationPolicy(applicationPolicy); @@ -859,8 +859,23 @@ public class AutoscalerServiceImpl implements AutoscalerService { } @Override - public boolean removeApplicationPolicy(String applicationPolicyId) throws InvalidPolicyException { - PolicyManager.getInstance().removeApplicationPolicy(applicationPolicyId); + public boolean removeApplicationPolicy(String applicationPolicyId) throws InvalidPolicyException, UnremovablePolicyException { + + if (removableApplicationPolicy(applicationPolicyId)) { + return PolicyManager.getInstance().removeApplicationPolicy(applicationPolicyId); + } else { + throw new UnremovablePolicyException("This application policy cannot be removed, since it is used in " + + "applications."); + } + } + + private boolean removableApplicationPolicy(String applicationPolicyId) { + + for (Application application : ApplicationHolder.getApplications().getApplications().values()) { + if (applicationPolicyId.equals(application.getApplicationPolicyId())) { + return false; + } + } return true; } @@ -999,7 +1014,7 @@ public class AutoscalerServiceImpl implements AutoscalerService { // deployment policy should contain at least one network partition reference if (null == deploymentPolicy.getNetworkPartitionRefs() || deploymentPolicy.getNetworkPartitionRefs().length == 0) { String msg = String.format("Deployment policy does not have any network partition references: " + - "[deployment-policy-id] %s", deploymentPolicyId); + "[deployment-policy-id] %s", deploymentPolicyId); log.error(msg); throw new InvalidDeploymentPolicyException(msg); } @@ -1020,7 +1035,7 @@ public class AutoscalerServiceImpl implements AutoscalerService { .getNetworkPartition(networkPartitionId); if (networkPartition == null) { String msg = String.format("Network partition is not found: [deployment-policy-id] %s " + - "[network-partition-id] %s", deploymentPolicyId, networkPartitionId); + "[network-partition-id] %s", deploymentPolicyId, networkPartitionId); log.error(msg); throw new InvalidDeploymentPolicyException(msg); } http://git-wip-us.apache.org/repos/asf/stratos/blob/a3e8cc5f/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 1937cf3..720d264 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 @@ -119,7 +119,7 @@ public class AutoscalerServiceClient { public void addApplicationPolicy(ApplicationPolicy applicationPolicy) throws RemoteException, - AutoscalerServiceRemoteExceptionException, AutoscalerServiceInvalidApplicationPolicyExceptionException,AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException { + AutoscalerServiceRemoteExceptionException, AutoscalerServiceInvalidApplicationPolicyExceptionException, AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException { stub.addApplicationPolicy(applicationPolicy); } @@ -138,7 +138,7 @@ public class AutoscalerServiceClient { } public void removeApplicationPolicy(String applicationPolicyId) - throws RemoteException, AutoscalerServiceInvalidPolicyExceptionException { + throws RemoteException, AutoscalerServiceInvalidPolicyExceptionException, AutoscalerServiceUnremovablePolicyExceptionException { stub.removeApplicationPolicy(applicationPolicyId); } http://git-wip-us.apache.org/repos/asf/stratos/blob/a3e8cc5f/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 64e9888..6188995 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 @@ -924,6 +924,11 @@ public class StratosApiV41 extends AbstractApi { return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean( ResponseMessageBean.ERROR, backendErrorMessage)) .build(); + } catch (AutoscalerServiceUnremovablePolicyExceptionException e) { + return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean( + ResponseMessageBean.ERROR, "This application policy cannot be removed, since it is used in an " + + "application")) + .build(); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/a3e8cc5f/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 58244be..8304f98 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 @@ -25,6 +25,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.stub.*; import org.apache.stratos.autoscaler.stub.deployment.policy.ApplicationPolicy; +import org.apache.stratos.autoscaler.stub.exception.UnremovablePolicyException; import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext; import org.apache.stratos.autoscaler.stub.pojo.ServiceGroup; import org.apache.stratos.cloud.controller.stub.*; @@ -775,7 +776,7 @@ public class StratosApiV41Utils { * @throws RestAPIException */ public static void removeApplicationPolicy(String applicationPolicyId) throws RestAPIException, - AutoscalerServiceInvalidPolicyExceptionException { + AutoscalerServiceInvalidPolicyExceptionException, AutoscalerServiceUnremovablePolicyExceptionException { if (applicationPolicyId == null) { String msg = "Application policy bean id null";
