You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2015/05/19 16:56:35 UTC

[2/2] stratos git commit: Validate whether application policy is used before removing

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 <an...@gmail.com>
Authored: Tue May 19 19:58:09 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
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";