Tenant isolation - Autoscaling Policies
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/3accca72 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/3accca72 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/3accca72 Branch: refs/heads/tenant-isolation Commit: 3accca721a2031920eb7bf78a691d0d1b1e6d90c Parents: abff10e Author: Dinithi <[email protected]> Authored: Mon Jun 29 18:17:55 2015 +0530 Committer: Dinithi <[email protected]> Committed: Mon Jun 29 18:17:55 2015 +0530 ---------------------------------------------------------------------- .../autoscaler/pojo/policy/PolicyManager.java | 24 +- .../pojo/policy/autoscale/AutoscalePolicy.java | 24 +- .../autoscaler/registry/RegistryManager.java | 8 +- .../policy/autoscale/AutoscalePolicyBean.java | 18 + .../default/configure/autoscaling-policies.json | 1 + .../schema/configure/autoscaling-policies.json | 9 +- .../rest/endpoint/api/StratosApiV41.java | 9 +- .../rest/endpoint/api/StratosApiV41Utils.java | 65 ++- .../util/converter/ObjectConverter.java | 5 +- .../src/main/resources/AutoscalerService.wsdl | 545 ++++++++++--------- 10 files changed, 388 insertions(+), 320 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java index f127de7..bb161ed 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java @@ -83,27 +83,27 @@ public class PolicyManager { // Add the policy to information model and persist. public boolean addAutoscalePolicy(AutoscalePolicy policy) throws AutoScalingPolicyAlreadyExistException { if (log.isInfoEnabled()) { - log.info(String.format("Adding autoscaling policy: [id] %s", policy.getId())); + log.info(String.format("Adding autoscaling policy: [id] %s", policy.getUuid())); } - if (StringUtils.isEmpty(policy.getId())) { + if (StringUtils.isEmpty(policy.getUuid())) { throw new AutoScalerException("Autoscaling policy id cannot be empty"); } this.addASPolicyToInformationModel(policy); RegistryManager.getInstance().persistAutoscalerPolicy(policy); if (log.isInfoEnabled()) { - log.info(String.format("Autoscaling policy is added successfully: [id] %s", policy.getId())); + log.info(String.format("Autoscaling policy is added successfully: [id] %s", policy.getUuid())); } return true; } public boolean updateAutoscalePolicy(AutoscalePolicy policy) throws InvalidPolicyException { - if (StringUtils.isEmpty(policy.getId())) { + if (StringUtils.isEmpty(policy.getUuid())) { throw new AutoScalerException("Autoscaling policy id cannot be empty"); } this.updateASPolicyInInformationModel(policy); RegistryManager.getInstance().persistAutoscalerPolicy(policy); if (log.isInfoEnabled()) { - log.info(String.format("Autoscaling policy is updated successfully: [id] %s", policy.getId())); + log.info(String.format("Autoscaling policy is updated successfully: [id] %s", policy.getUuid())); } return true; } @@ -187,24 +187,24 @@ public class PolicyManager { } public void addASPolicyToInformationModel(AutoscalePolicy asPolicy) throws AutoScalingPolicyAlreadyExistException { - if (!autoscalePolicyListMap.containsKey(asPolicy.getId())) { + if (!autoscalePolicyListMap.containsKey(asPolicy.getUuid())) { if (log.isDebugEnabled()) { - log.debug("Adding autoscaling policy: " + asPolicy.getId()); + log.debug("Adding autoscaling policy: " + asPolicy.getUuid()); } - autoscalePolicyListMap.put(asPolicy.getId(), asPolicy); + autoscalePolicyListMap.put(asPolicy.getUuid(), asPolicy); } else { - String errMsg = "Specified autoscaling policy [" + asPolicy.getId() + "] already exists"; + String errMsg = "Specified autoscaling policy [" + asPolicy.getUuid() + "] already exists"; log.error(errMsg); throw new AutoScalingPolicyAlreadyExistException(errMsg); } } public void updateASPolicyInInformationModel(AutoscalePolicy asPolicy) throws InvalidPolicyException { - if (autoscalePolicyListMap.containsKey(asPolicy.getId())) { + if (autoscalePolicyListMap.containsKey(asPolicy.getUuid())) { if (log.isDebugEnabled()) { - log.debug("Updating autoscaling policy: " + asPolicy.getId()); + log.debug("Updating autoscaling policy: " + asPolicy.getUuid()); } - autoscalePolicyListMap.put(asPolicy.getId(), asPolicy); + autoscalePolicyListMap.put(asPolicy.getUuid(), asPolicy); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/autoscale/AutoscalePolicy.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/autoscale/AutoscalePolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/autoscale/AutoscalePolicy.java index 8eee898..852d873 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/autoscale/AutoscalePolicy.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/autoscale/AutoscalePolicy.java @@ -28,6 +28,7 @@ public class AutoscalePolicy implements Serializable { private static final long serialVersionUID = 1754373171598089271L; private LoadThresholds loadThresholds; + private String uuid; private String id; private String displayName; private String description; @@ -35,6 +36,15 @@ public class AutoscalePolicy implements Serializable { private int tenantId; private float instanceRoundingFactor; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + /** * Gets the value of the loadThresholds property. * @@ -56,23 +66,23 @@ public class AutoscalePolicy implements Serializable { } /** - * Gets the value of the id property. + * Gets the value of the uuid property. * * @return possible object is * {@link String } */ - public String getId() { - return id; + public String getUuid() { + return uuid; } /** - * Sets the value of the id property. + * Sets the value of the uuid property. * * @param value allowed object is * {@link String } */ - public void setId(String value) { - this.id = value; + public void setUuid(String value) { + this.uuid = value; } /** @@ -149,7 +159,7 @@ public class AutoscalePolicy implements Serializable { @Override public String toString() { - return "ASPolicy [id=" + id + ", displayName=" + displayName + return "ASPolicy [uuid=" + uuid + ", displayName=" + displayName + ", description=" + description + ", isPublic=" + isPublic + "]"; } http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java index a3c5703..5780864 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java @@ -173,14 +173,14 @@ public class RegistryManager { try { startTenantFlow(); String resourcePath = AutoscalerConstants.AUTOSCALER_RESOURCE + - AutoscalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getId(); + AutoscalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getUuid(); persist(autoscalePolicy, resourcePath); if (log.isDebugEnabled()) { log.debug(String.format("Autoscaler policy written to registry: [id] %s [name] %s [description] %s", - autoscalePolicy.getId(), autoscalePolicy.getDisplayName(), autoscalePolicy.getDescription())); + autoscalePolicy.getUuid(), autoscalePolicy.getDisplayName(), autoscalePolicy.getDescription())); } } catch (AutoScalerException e) { - String message = "Unable to persist autoscaler policy [autoscaler-policy-id] " + autoscalePolicy.getId(); + String message = "Unable to persist autoscaler policy [autoscaler-policy-id] " + autoscalePolicy.getUuid(); log.error(message, e); throw e; } finally { @@ -400,7 +400,7 @@ public class RegistryManager { asPolicy = (AutoscalePolicy) dataObj; if (log.isDebugEnabled()) { log.debug(String.format("Autoscaler policy read from registry: [id] %s [name] %s [description] %s", - asPolicy.getId(), asPolicy.getDisplayName(), asPolicy.getDescription())); + asPolicy.getUuid(), asPolicy.getDisplayName(), asPolicy.getDescription())); } asPolicyList.add(asPolicy); } else { http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/policy/autoscale/AutoscalePolicyBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/policy/autoscale/AutoscalePolicyBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/policy/autoscale/AutoscalePolicyBean.java index 5dc025d..bb3de10 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/policy/autoscale/AutoscalePolicyBean.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/policy/autoscale/AutoscalePolicyBean.java @@ -25,10 +25,28 @@ import javax.xml.bind.annotation.XmlRootElement; public class AutoscalePolicyBean { private String id; + private String uuid; + private int tenantId; private String displayName; private String description; private LoadThresholdsBean loadThresholds; + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public int getTenantId() { + return tenantId; + } + + public void setTenantId(int tenantId) { + this.tenantId = tenantId; + } + public String getId() { return id; } http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/autoscaling-policies.json ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/autoscaling-policies.json b/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/autoscaling-policies.json index 29c755f..7fa3c03 100644 --- a/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/autoscaling-policies.json +++ b/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/autoscaling-policies.json @@ -1,4 +1,5 @@ { + "uuid": "", "id": "economy", "description":"autoscale policy description", "loadThresholds": { http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/autoscaling-policies.json ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/autoscaling-policies.json b/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/autoscaling-policies.json index 4c086d8..21416ff 100644 --- a/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/autoscaling-policies.json +++ b/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/autoscaling-policies.json @@ -1,15 +1,20 @@ { "type":"object", "$schema": "http://json-schema.org/draft-04/schema", - "id": "root", + "uuid": "root", "title":"Auto-scaling Policy Definition", - "name": "Auto-scaling Policy", + "name": "Auto-scaling Policy UUID", "options": { "disable_properties": true, "disable_collapse": true }, "required" : ["id", "loadThresholds"], "properties":{ + "uuid": { + "type":"string", + "id": "root/uuid", + "title":"Auto Scale policy UUID" + }, "id": { "type":"string", "id": "root/id", http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/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 8e04ec6..08005c6 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 @@ -1387,13 +1387,18 @@ public class StratosApiV41 extends AbstractApi { @AuthorizationAction("/permission/admin/stratos/autoscalingPolicies/manage") public Response addAutoscalingPolicy( AutoscalePolicyBean autoscalePolicy) throws RestAPIException { + String autoscalingPolicyId = autoscalePolicy.getId(); + autoscalePolicy.setUuid(UUID.randomUUID().toString()); + String autoscalingPolicyUuid = autoscalePolicy.getUuid(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + autoscalePolicy.setTenantId(carbonContext.getTenantId()); try { StratosApiV41Utils.addAutoscalingPolicy(autoscalePolicy); URI url = uriInfo.getAbsolutePathBuilder().path(autoscalePolicy.getId()).build(); return Response.created(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS, - String.format("Autoscaling policy added successfully: [autoscale-policy] %s", - autoscalePolicy.getId()))).build(); + String.format("Autoscaling policy added successfully: [autoscale-policy-uuid] %s " + + "[autoscale-policy-id] %s", autoscalingPolicyUuid, autoscalingPolicyId))).build(); } catch (AutoscalerServiceInvalidPolicyExceptionException e) { return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean( ResponseMessageBean.ERROR, "Provided Autoscaling policy is invalid")).build(); http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/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 6596bf8..20929bb 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 @@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.stub.*; +import org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy; import org.apache.stratos.autoscaler.stub.deployment.policy.ApplicationPolicy; import org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy; import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext; @@ -850,9 +851,10 @@ public class StratosApiV41Utils { AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); if (autoscalerServiceClient != null) { - + AutoscalePolicyBean autoscalePolicyBean; try { - autoscalerServiceClient.removeAutoscalingPolicy(autoscalePolicyId); + autoscalePolicyBean = getAutoScalePolicy(autoscalePolicyId); + autoscalerServiceClient.removeAutoscalingPolicy(autoscalePolicyBean.getUuid()); } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); @@ -870,17 +872,31 @@ public class StratosApiV41Utils { org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy[] autoscalePolicies = null; AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); + AutoscalePolicy[] autoscalingPoliciesForTenantArray = new AutoscalePolicy[0]; + if (autoscalerServiceClient != null) { try { autoscalePolicies = autoscalerServiceClient.getAutoScalePolicies(); - + if (autoscalePolicies != null) { + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + List<AutoscalePolicy> autoscalingPoliciesForTenant = new ArrayList<AutoscalePolicy>(); + for (AutoscalePolicy autoscalePolicy : autoscalePolicies) { + if (carbonContext.getTenantId() == autoscalePolicy.getTenantId()) { + autoscalingPoliciesForTenant.add(autoscalePolicy); + } + } + if (autoscalingPoliciesForTenant.size() != 0) { + autoscalingPoliciesForTenantArray = autoscalingPoliciesForTenant.toArray(new + AutoscalePolicy[autoscalingPoliciesForTenant.size()]); + } + } } catch (RemoteException e) { String errorMsg = "Error while getting available autoscaling policies. Cause : " + e.getMessage(); log.error(errorMsg, e); throw new RestAPIException(errorMsg, e); } } - return ObjectConverter.convertStubAutoscalePoliciesToAutoscalePolicies(autoscalePolicies); + return ObjectConverter.convertStubAutoscalePoliciesToAutoscalePolicies(autoscalingPoliciesForTenantArray); } /** @@ -892,21 +908,30 @@ public class StratosApiV41Utils { */ public static AutoscalePolicyBean getAutoScalePolicy(String autoscalePolicyId) throws RestAPIException { - org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy autoscalePolicy = null; - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { - try { - autoscalePolicy = autoscalerServiceClient.getAutoScalePolicy(autoscalePolicyId); + AutoscalePolicyBean autoscalePolicyBean; + try { + AutoscalePolicy[] autoscalePolicies = AutoscalerServiceClient.getInstance().getAutoScalePolicies(); - } catch (RemoteException e) { - String errorMsg = "Error while getting information for autoscaling policy with id " + - autoscalePolicyId + ". Cause: " + e.getMessage(); - log.error(errorMsg, e); - throw new RestAPIException(errorMsg, e); + AutoscalePolicy autoscalePolicy = null; + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + for (AutoscalePolicy autoscalePolicy1 : autoscalePolicies) { + if (carbonContext.getTenantId() == autoscalePolicy1.getTenantId()) { + if (autoscalePolicy1.getId().equals(autoscalePolicyId)) { + autoscalePolicy = autoscalePolicy1; + } + } } + if (autoscalePolicy == null) { + return null; + } + autoscalePolicyBean = ObjectConverter.convertStubAutoscalePolicyToAutoscalePolicy(autoscalePolicy); + } catch (RemoteException e) { + String errorMsg = "Error while getting information for autoscaling policy with id " + + autoscalePolicyId + ". Cause: " + e.getMessage(); + log.error(errorMsg, e); + throw new RestAPIException(errorMsg, e); } - - return ObjectConverter.convertStubAutoscalePolicyToAutoscalePolicy(autoscalePolicy); + return autoscalePolicyBean; } // Util methods for repo actions @@ -2849,13 +2874,13 @@ public class StratosApiV41Utils { AutoscalerServiceInvalidDeploymentPolicyExceptionException { try { if (log.isDebugEnabled()) { - log.debug(String.format("Adding deployment policy: [deployment-policy-id] %s ", + log.debug(String.format("Adding deployment policy: [deployment-policy-uuid] %s [deployment-policy-id]" + + " %s ", deploymentPolicyDefinitionBean.getUuid(), deploymentPolicyDefinitionBean.getId())); } - org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy deploymentPolicy = - - ObjectConverter.convertDeploymentPolicyBeanToASDeploymentPolicy(deploymentPolicyDefinitionBean); + org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy deploymentPolicy = ObjectConverter + .convertDeploymentPolicyBeanToASDeploymentPolicy(deploymentPolicyDefinitionBean); AutoscalerServiceClient.getInstance().addDeploymentPolicy(deploymentPolicy); if (log.isDebugEnabled()) { http://git-wip-us.apache.org/repos/asf/stratos/blob/3accca72/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java index 3c0d6fc..693af46 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java @@ -410,6 +410,8 @@ public class ObjectConverter { org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy(); autoscalePolicy.setId(autoscalePolicyBean.getId()); + autoscalePolicy.setUuid(autoscalePolicyBean.getUuid()); + autoscalePolicy.setTenantId(autoscalePolicyBean.getTenantId()); autoscalePolicy.setDescription(autoscalePolicyBean.getDescription()); autoscalePolicy.setDisplayName(autoscalePolicyBean.getDisplayName()); @@ -858,9 +860,10 @@ public class ObjectConverter { AutoscalePolicyBean autoscalePolicyBean = new AutoscalePolicyBean(); autoscalePolicyBean.setId(autoscalePolicy.getId()); + autoscalePolicyBean.setUuid(autoscalePolicy.getUuid()); + autoscalePolicyBean.setTenantId(autoscalePolicy.getTenantId()); autoscalePolicyBean.setDescription(autoscalePolicy.getDescription()); autoscalePolicyBean.setDisplayName(autoscalePolicy.getDisplayName()); - autoscalePolicyBean.setDescription(autoscalePolicy.getDescription()); if (autoscalePolicy.getLoadThresholds() != null) { autoscalePolicyBean.setLoadThresholds(convertStubLoadThresholdsToLoadThresholds(autoscalePolicy.getLoadThresholds())); }
