From e6566f3b7562dbaa7ee442745b72ad511f64ccff Mon Sep 17 00:00:00 2001 From: anuruddhal Date: Tue, 19 May 2015 19:58:09 +0530 Subject: [PATCH 1/3] Validate whether application policy is used before removing --- .../services/impl/AutoscalerServiceImpl.java | 25 +++++++++++++++---- .../client/AutoscalerServiceClient.java | 4 +-- .../rest/endpoint/api/StratosApiV41.java | 5 ++++ .../rest/endpoint/api/StratosApiV41Utils.java | 3 ++- 4 files changed, 29 insertions(+), 8 deletions(-) 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 8edf8e023c..8c553e1b96 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 String[] getApplicationNetworkPartitions(String applicationId) @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 ApplicationPolicy getApplicationPolicy(String applicationPolicyId) { } @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 @@ private void validateDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws // 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 @@ private void validateDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws .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); } 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 f6a97e7e38..26a082485d 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 boolean deployApplication(String applicationId, String applicationPolicyI public void addApplicationPolicy(ApplicationPolicy applicationPolicy) throws RemoteException, - AutoscalerServiceRemoteExceptionException, AutoscalerServiceInvalidApplicationPolicyExceptionException,AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException { + AutoscalerServiceRemoteExceptionException, AutoscalerServiceInvalidApplicationPolicyExceptionException, AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException { stub.addApplicationPolicy(applicationPolicy); } @@ -138,7 +138,7 @@ public void updateApplicationPolicy(ApplicationPolicy applicationPolicy) } public void removeApplicationPolicy(String applicationPolicyId) - throws RemoteException, AutoscalerServiceInvalidPolicyExceptionException { + throws RemoteException, AutoscalerServiceInvalidPolicyExceptionException, AutoscalerServiceUnremovablePolicyExceptionException { stub.removeApplicationPolicy(applicationPolicyId); } 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 5cbf30a503..d4917d4c9c 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 Response removeApplicationPolicy( 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(); } } 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 35d2668279..9b4314480f 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.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 static ApplicationPolicyBean getApplicationPolicy(String applicationPolic * @throws RestAPIException */ public static void removeApplicationPolicy(String applicationPolicyId) throws RestAPIException, - AutoscalerServiceInvalidPolicyExceptionException { + AutoscalerServiceInvalidPolicyExceptionException, AutoscalerServiceUnremovablePolicyExceptionException { if (applicationPolicyId == null) { String msg = "Application policy bean id null"; From 226324e45382ed2cd7bc9a595971c8e2f3861d55 Mon Sep 17 00:00:00 2001 From: anuruddhal Date: Tue, 19 May 2015 23:34:17 +0530 Subject: [PATCH 2/3] Fixing list cartridges issue in CLI --- .../src/main/webapp/api/WEB-INF/cxf-servlet.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml b/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml index 39faa64d9d..f2972a1535 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml +++ b/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml @@ -145,6 +145,8 @@ publicIPs ports metadataKeys + networkInterfaces + iaasProvider From c1ceb7096112bbe53452c950acfe3f6cbaaebdff Mon Sep 17 00:00:00 2001 From: anuruddhal Date: Thu, 21 May 2015 10:35:09 +0530 Subject: [PATCH 3/3] Removing un-supported alogrithm from UI --- .../forms/schema/configure/application-policies.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/application-policies.json b/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/application-policies.json index b5297e0d8d..ef1029c4a3 100644 --- a/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/application-policies.json +++ b/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/application-policies.json @@ -20,7 +20,7 @@ "type": "string", "title": "Application Policy Algorithm ", "name": "Application Policy Algorithm", - "enum": ["one-after-another","all-at-once","weighted-one-after-another"], + "enum": ["one-after-another","all-at-once"], }, "networkPartitions": { "id": "root/networkPartitions",