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/04/07 05:06:36 UTC
[06/20] stratos git commit: Fix DeploymentPolicy class and persist in
policy manager
Fix DeploymentPolicy class and persist in policy manager
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1009773a
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1009773a
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1009773a
Branch: refs/heads/master
Commit: 1009773a89dbda1d60007c00e7c2eadc5b2d86b0
Parents: c9940dd
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Tue Apr 7 08:01:33 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Tue Apr 7 08:01:33 2015 +0530
----------------------------------------------------------------------
.../autoscaler/pojo/policy/PolicyManager.java | 305 +++++++++++++------
.../policy/deployment/DeploymentPolicy.java | 40 +--
2 files changed, 232 insertions(+), 113 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/1009773a/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 8406549..b81a09f 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
@@ -1,18 +1,18 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under one
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -23,13 +23,16 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.exception.AutoScalerException;
+import org.apache.stratos.autoscaler.exception.policy.DeploymentPolicyAlreadyExistsException;
import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
import org.apache.stratos.autoscaler.registry.RegistryManager;
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.common.services.DistributedObjectProvider;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
+import java.util.Collection;
import java.util.Map;
/**
@@ -38,31 +41,39 @@ import java.util.Map;
public class PolicyManager {
private static final Log log = LogFactory.getLog(PolicyManager.class);
-
+
private static final String AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP = "AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP";
private static final String APPLICATION_ID_TO_APPLICATION_POLICY_MAP = "APPLICATION_ID_TO_APPLICATION_POLICY_MAP";
-
+ private static final String DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP = "DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP";
+
private static Map<String, AutoscalePolicy> autoscalePolicyListMap;
+ private static Map<String, DeploymentPolicy> deploymentPolicyListMap;
+
private static Map<String, ApplicationPolicy> applicationPolicyListMap;
-
- /* An instance of a PolicyManager is created when the class is loaded.
- * Since the class is loaded only once, it is guaranteed that an object of
+
+ public Collection<DeploymentPolicy> getDeploymentPolicies() {
+ return deploymentPolicyListMap.values();
+ }
+
+ /* An instance of a PolicyManager is created when the class is loaded.
+ * Since the class is loaded only once, it is guaranteed that an object of
* PolicyManager is created only once. Hence it is singleton.
*/
-
+
private static class InstanceHolder {
- private static final PolicyManager INSTANCE = new PolicyManager();
+ private static final PolicyManager INSTANCE = new PolicyManager();
}
public static PolicyManager getInstance() {
return InstanceHolder.INSTANCE;
- }
-
+ }
+
private PolicyManager() {
- // Initialize distributed object provider
+ // Initialize distributed object provider
DistributedObjectProvider distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
autoscalePolicyListMap = distributedObjectProvider.getMap(AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP);
+ deploymentPolicyListMap = distributedObjectProvider.getMap(DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP);
applicationPolicyListMap = distributedObjectProvider.getMap(APPLICATION_ID_TO_APPLICATION_POLICY_MAP);
}
@@ -94,17 +105,48 @@ public class PolicyManager {
return true;
}
- public boolean removeAutoscalePolicy(String policyID) throws InvalidPolicyException {
- if (StringUtils.isEmpty(policyID)) {
- throw new AutoScalerException("Autoscaling policy id cannot be empty");
- }
- this.removeASPolicyInInformationModel(policyID);
- RegistryManager.getInstance().removeAutoscalerPolicy(policyID);
- if (log.isInfoEnabled()) {
- log.info(String.format("Autoscaling policy is removed successfully: [id] %s", policyID));
- }
- return true;
- }
+ public boolean removeAutoscalePolicy(String policyID) throws InvalidPolicyException {
+ if (StringUtils.isEmpty(policyID)) {
+ throw new AutoScalerException("Autoscaling policy id cannot be empty");
+ }
+ this.removeASPolicyInInformationModel(policyID);
+ RegistryManager.getInstance().removeAutoscalerPolicy(policyID);
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Autoscaling policy is removed successfully: [id] %s", policyID));
+ }
+ return true;
+ }
+
+
+ /**
+ * Add deployment policy to in memory map and persist.
+ * @param policy
+ * @throws InvalidPolicyException
+ */
+ public void addDeploymentPolicy(DeploymentPolicy policy) {
+ addDeploymentPolicyToPolicyListMap(policy);
+ RegistryManager.getInstance().persistDeploymentPolicy(policy);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Deployment policy is added successfully: [deployment-policy-id] %s",
+ policy.getDeploymentPolicyID()));
+ }
+ }
+
+ /**
+ * Remove deployment policy from in memory map and registry.
+ * @param deploymentPolicyID
+ * @throws InvalidPolicyException
+ */
+ public void removeDeploymentPolicy(String deploymentPolicyID) {
+ removeDeploymentPolicyFromMap(deploymentPolicyID);
+ RegistryManager.getInstance().removeDeploymentPolicy(deploymentPolicyID);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Deployment policy is removed successfully: [deployment-policy-id] %s",
+ deploymentPolicyID));
+ }
+ }
public void addASPolicyToInformationModel(AutoscalePolicy asPolicy) throws InvalidPolicyException {
if (!autoscalePolicyListMap.containsKey(asPolicy.getId())) {
@@ -113,8 +155,8 @@ public class PolicyManager {
}
autoscalePolicyListMap.put(asPolicy.getId(), asPolicy);
} else {
- String errMsg = "Specified autoscaling policy [" + asPolicy.getId() + "] already exists";
- log.error(errMsg);
+ String errMsg = "Specified autoscaling policy [" + asPolicy.getId() + "] already exists";
+ log.error(errMsg);
throw new InvalidPolicyException(errMsg);
}
}
@@ -128,30 +170,30 @@ public class PolicyManager {
}
}
- public void removeASPolicyInInformationModel(String policyID) throws InvalidPolicyException {
- if (autoscalePolicyListMap.containsKey(policyID)) {
- if (log.isDebugEnabled()) {
- log.debug("Updating autoscaling policy: " + policyID);
- }
- autoscalePolicyListMap.remove(policyID);
- }
- else{
- throw new InvalidPolicyException("No such policy ID [" + policyID + "] exists");
- }
- }
-
- public void removeApplicationPolicyInInformationModel(String applicationId) throws InvalidPolicyException {
- if (applicationPolicyListMap.containsKey(applicationId)) {
- if (log.isDebugEnabled()) {
- log.debug("Removing application policy [application-id] " + applicationId);
- }
- applicationPolicyListMap.remove(applicationId);
- }
- else{
- throw new InvalidPolicyException("No such application id [" + applicationId + "] exists");
- }
- }
-
+ public void removeASPolicyInInformationModel(String policyID) throws InvalidPolicyException {
+ if (autoscalePolicyListMap.containsKey(policyID)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Updating autoscaling policy: " + policyID);
+ }
+ autoscalePolicyListMap.remove(policyID);
+ }
+ else{
+ throw new InvalidPolicyException("No such policy ID [" + policyID + "] exists");
+ }
+ }
+
+ public void removeApplicationPolicyInInformationModel(String applicationId) throws InvalidPolicyException {
+ if (applicationPolicyListMap.containsKey(applicationId)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Removing application policy [application-id] " + applicationId);
+ }
+ applicationPolicyListMap.remove(applicationId);
+ }
+ else{
+ throw new InvalidPolicyException("No such application id [" + applicationId + "] exists");
+ }
+ }
+
/**
* Removes the specified policy
*
@@ -175,7 +217,7 @@ public class PolicyManager {
*
* @return
*/
- public AutoscalePolicy[] getAutoscalePolicyList() {
+ public AutoscalePolicy[] getAutoscalePolicyList() {
return autoscalePolicyListMap.values().toArray(new AutoscalePolicy[0]);
}
@@ -189,55 +231,128 @@ public class PolicyManager {
return autoscalePolicyListMap.get(id);
}
- public void addApplicationPolicy(ApplicationPolicy applicationPolicy) throws InvalidPolicyException {
- String applicationPolicyId = applicationPolicy.getId();
- if (log.isInfoEnabled()) {
- log.info(String.format("Adding application policy : [application-policy-id] %s", applicationPolicyId));
- }
- this.addApplicationPolicyToInformationModel(applicationPolicy);
- RegistryManager.getInstance().persistApplicationPolicy(applicationPolicy);
-
- if (log.isInfoEnabled()) {
- log.info(String
- .format("Application policy is added successfully: [application-policy-id] %s",
- applicationPolicyId));
- }
-
- }
-
- public boolean removeApplicationPolicy(String applicationPolicyId) throws InvalidPolicyException {
- if (StringUtils.isEmpty(applicationPolicyId)) {
- throw new AutoScalerException("Application policy id cannot be empty");
- }
- this.removeApplicationPolicyInInformationModel(applicationPolicyId);
- RegistryManager.getInstance().removeApplicationPolicy(applicationPolicyId);
- if (log.isInfoEnabled()) {
- log.info(String.format("Application policy is removed successfully: [id] %s", applicationPolicyId));
- }
- return true;
- }
-
- public void addApplicationPolicyToInformationModel(ApplicationPolicy applicationPolicy) throws InvalidPolicyException {
- String applicationPolicyId = applicationPolicy.getId();
+
+
+ private void addDeploymentPolicyToPolicyListMap(DeploymentPolicy policy) {
+ if (StringUtils.isEmpty(policy.getDeploymentPolicyID())) {
+ throw new RuntimeException("Application id is not found in the deployment policy");
+ }
+ if (!deploymentPolicyListMap.containsKey(policy.getDeploymentPolicyID())) {
+ if (log.isDebugEnabled()) {
+ log.debug("Adding deployment policy: [deployment-policy-id] " + policy.getDeploymentPolicyID());
+ }
+ deploymentPolicyListMap.put(policy.getDeploymentPolicyID(), policy);
+ } else {
+ String errMsg = "Deployment policy already exists: [deployment-policy-id] " + policy.getDeploymentPolicyID();
+ log.error(errMsg);
+ }
+ }
+
+ private void removeDeploymentPolicyFromMap(String applicationId) {
+ if(deploymentPolicyListMap.containsKey(applicationId)) {
+ deploymentPolicyListMap.remove(applicationId);
+ }
+ }
+
+ public void updateDeploymentPolicyToInformationModel(DeploymentPolicy policy) throws InvalidPolicyException {
+ if (log.isDebugEnabled()) {
+ log.debug("Updating deployment policy: " + policy.getDeploymentPolicyID());
+ }
+ deploymentPolicyListMap.put(policy.getDeploymentPolicyID(), policy);
+ }
+
+ /**
+ * Removes the specified policy
+ *
+ * @param policy
+ * @throws InvalidPolicyException
+ */
+ public void undeployDeploymentPolicy(String policy) throws InvalidPolicyException {
+ if (deploymentPolicyListMap.containsKey(policy)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Removing deployment policy :" + policy);
+ }
+ DeploymentPolicy depPolicy = this.getDeploymentPolicy(policy);
+ // undeploy network partitions this deployment policy.
+// PartitionManager.getInstance().undeployNetworkPartitions(depPolicy);
+ // undeploy the deployment policy.
+ RegistryManager.getInstance().removeDeploymentPolicy(policy);
+ // remove from the infromation model.
+ deploymentPolicyListMap.remove(policy);
+ } else {
+ throw new InvalidPolicyException("No such policy [" + policy + "] exists");
+ }
+ }
+
+ /**
+ * Returns an array of the Deployment policies contained in this manager.
+ *
+ * @return
+ */
+ public DeploymentPolicy[] getDeploymentPolicyList() {
+ return deploymentPolicyListMap.values().toArray(new DeploymentPolicy[0]);
+ }
+
+ /**
+ * Returns the deployment policy to which the specified id is mapped or null
+ *
+ * @param id
+ * @return
+ */
+ public DeploymentPolicy getDeploymentPolicy(String id) {
+ return deploymentPolicyListMap.get(id);
+ }
+
+
+ public void addApplicationPolicy(ApplicationPolicy applicationPolicy) throws InvalidPolicyException {
+ String applicationPolicyId = applicationPolicy.getId();
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Adding application policy : [application-policy-id] %s", applicationPolicyId));
+ }
+ this.addApplicationPolicyToInformationModel(applicationPolicy);
+ RegistryManager.getInstance().persistApplicationPolicy(applicationPolicy);
+
+ if (log.isInfoEnabled()) {
+ log.info(String
+ .format("Application policy is added successfully: [application-policy-id] %s",
+ applicationPolicyId));
+ }
+
+ }
+
+ public boolean removeApplicationPolicy(String applicationPolicyId) throws InvalidPolicyException {
+ if (StringUtils.isEmpty(applicationPolicyId)) {
+ throw new AutoScalerException("Application policy id cannot be empty");
+ }
+ this.removeApplicationPolicyInInformationModel(applicationPolicyId);
+ RegistryManager.getInstance().removeApplicationPolicy(applicationPolicyId);
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Application policy is removed successfully: [id] %s", applicationPolicyId));
+ }
+ return true;
+ }
+
+ public void addApplicationPolicyToInformationModel(ApplicationPolicy applicationPolicy) throws InvalidPolicyException {
+ String applicationPolicyId = applicationPolicy.getId();
if (!applicationPolicyListMap.containsKey(applicationPolicyId)) {
if (log.isDebugEnabled()) {
log.debug("Adding application policy : " + applicationPolicyId);
}
applicationPolicyListMap.put(applicationPolicyId, applicationPolicy);
} else {
- String errMsg = "Application policy already exists : " + applicationPolicyId;
- log.error(errMsg);
+ String errMsg = "Application policy already exists : " + applicationPolicyId;
+ log.error(errMsg);
throw new InvalidPolicyException(errMsg);
}
-
+
}
-
- /**
- * Retruns an ApplicationPolicy of a given application
- *
- * @param applicationPolicyId
- * @return
- */
+
+ /**
+ * Retruns an ApplicationPolicy of a given application
+ *
+ * @param applicationPolicyId
+ * @return
+ */
public ApplicationPolicy getApplicationPolicy(String applicationPolicyId) {
return applicationPolicyListMap.get(applicationPolicyId);
}
@@ -250,7 +365,7 @@ public class PolicyManager {
applicationPolicyListMap.put(applicationPolicy.getId(), applicationPolicy);
}
}
-
+
public boolean updateApplicationPolicy(ApplicationPolicy applicationPolicy) {
if(StringUtils.isEmpty(applicationPolicy.getId())){
throw new AutoScalerException("Application policy id cannot be empty");
@@ -262,8 +377,8 @@ public class PolicyManager {
}
return true;
}
-
- public ApplicationPolicy[] getApplicationPolicies() {
+
+ public ApplicationPolicy[] getApplicationPolicies() {
return applicationPolicyListMap.values().toArray(new ApplicationPolicy[0]);
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1009773a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
index dddc189..2ff0ee6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
@@ -19,6 +19,10 @@
package org.apache.stratos.autoscaler.pojo.policy.deployment;
+
+import org.apache.stratos.common.partition.NetworkPartition;
+import org.apache.stratos.common.partition.Partition;
+
import java.io.Serializable;
import java.util.Arrays;
@@ -29,7 +33,7 @@ public class DeploymentPolicy implements Serializable{
private static final long serialVersionUID = 5675507196284400099L;
private String deploymentPolicyID;
- private NetworkPartitionRef[] applicationLevelNetworkPartitions;
+ private NetworkPartition[] networkPartitions;
public String getDeploymentPolicyID() {
return deploymentPolicyID;
@@ -39,24 +43,24 @@ public class DeploymentPolicy implements Serializable{
this.deploymentPolicyID = deploymentPolicyID;
}
- public NetworkPartitionRef[] getNetworkPartitionsRef() {
- return applicationLevelNetworkPartitions;
+ public NetworkPartition[] getNetworkPartitions() {
+ return networkPartitions;
}
- public void setNetworkPartitionsRef(NetworkPartitionRef[] applicationLevelNetworkPartitions) {
- this.applicationLevelNetworkPartitions = applicationLevelNetworkPartitions;
+ public void setNetworkPartitions(NetworkPartition[] networkPartitions) {
+ this.networkPartitions = networkPartitions;
}
/**
* Get network partition reference object by network partition id.
* @param networkPartitionId
- * @return the {@link NetworkPartitionRef}
+ * @return the {@link NetworkPartition}
*/
- public NetworkPartitionRef getNetworkPartitionRefByNetworkPartitionId(String networkPartitionId) {
- if (applicationLevelNetworkPartitions != null) {
- for (NetworkPartitionRef networkPartitionRef : applicationLevelNetworkPartitions) {
- if (networkPartitionRef.getId().equals(networkPartitionId)) {
- return networkPartitionRef;
+ public NetworkPartition getNetworkPartitionByNetworkPartitionId(String networkPartitionId) {
+ if (networkPartitions != null) {
+ for (NetworkPartition networkPartition : networkPartitions) {
+ if (networkPartition.getId().equals(networkPartitionId)) {
+ return networkPartition;
}
}
}
@@ -66,13 +70,13 @@ public class DeploymentPolicy implements Serializable{
/**
* Get partition references by network partition id.
* @param networkPartitionId
- * @return an array of {@link PartitionRef}
+ * @return an array of {@link Partition}
*/
- public PartitionRef[] getPartitionRefsByNetworkPartitionId(String networkPartitionId) {
- if (applicationLevelNetworkPartitions != null) {
- for (NetworkPartitionRef networkPartitionRef : applicationLevelNetworkPartitions) {
- if (networkPartitionRef.getId().equals(networkPartitionId)) {
- return networkPartitionRef.getPartitions();
+ public Partition[] getPartitionsByNetworkPartitionId(String networkPartitionId) {
+ if (networkPartitions != null) {
+ for (NetworkPartition networkPartition : networkPartitions) {
+ if (networkPartition.getId().equals(networkPartitionId)) {
+ return networkPartition.getPartitions();
}
}
}
@@ -81,7 +85,7 @@ public class DeploymentPolicy implements Serializable{
public String toString() {
return String.format("{ deployment-policy-id : %s, network-partitions : %s", deploymentPolicyID,
- Arrays.toString(applicationLevelNetworkPartitions));
+ Arrays.toString(networkPartitions));
}
}