Repository: stratos Updated Branches: refs/heads/master a4a55f08f -> ef8ed14d4
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/e6566f3b Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e6566f3b Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e6566f3b Branch: refs/heads/master Commit: e6566f3b7562dbaa7ee442745b72ad511f64ccff Parents: 6cbe1e3 Author: anuruddhal <[email protected]> Authored: Tue May 19 19:58:09 2015 +0530 Committer: anuruddhal <[email protected]> Committed: Tue May 19 19:58:09 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/e6566f3b/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..8c553e1 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 @@ -808,7 +808,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); @@ -838,8 +838,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; } @@ -978,7 +993,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); } @@ -999,7 +1014,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/e6566f3b/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..26a0824 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/e6566f3b/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 5cbf30a..d4917d4 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 @@ -920,6 +920,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/e6566f3b/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 35d2668..9b43144 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";
