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));
 	}
 
 }