You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2013/11/30 10:19:53 UTC

[8/9] git commit: Add patition manager

Add patition manager


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/1d6f1d21
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/1d6f1d21
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/1d6f1d21

Branch: refs/heads/master
Commit: 1d6f1d21aaff43350fcb1d2ddb2241c0c5594e7b
Parents: 8e58ecc
Author: Udara Liyanage <ud...@wso2.com>
Authored: Sat Nov 30 14:43:07 2013 -0500
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Sat Nov 30 14:43:07 2013 -0500

----------------------------------------------------------------------
 .../cloud/controller/CloudControllerClient.java |  8 +--
 .../exception/InvalidPartitionException.java    | 40 -----------
 .../exception/PartitionValidationException.java | 19 +++++
 .../exception/TerminationException.java         |  8 +--
 .../autoscaler/partition/PartitionManager.java  | 76 ++++++++++++++++++++
 .../partition/deployers/PartitionDeployer.java  | 18 +++--
 .../partition/deployers/PartitionReader.java    | 16 ++---
 .../deployers/DeploymentPolicyReader.java       | 30 +++-----
 8 files changed, 131 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index 3da8269..386ac94 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -23,7 +23,7 @@ import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.Constants;
-import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
+import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
 import org.apache.stratos.autoscaler.exception.SpawningException;
 import org.apache.stratos.autoscaler.exception.TerminationException;
@@ -106,15 +106,15 @@ public class CloudControllerClient {
     /*
      * Calls the CC to validate the partition.
      */
-    public boolean validatePartition(Partition partition) throws InvalidPartitionException{
+    public boolean validatePartition(Partition partition) throws PartitionValidationException{
         
         try {
             return stub.validatePartition(partition);
         } catch (RemoteException e) {
             log.error(e.getMessage());
-            throw new InvalidPartitionException(e);
+            throw new PartitionValidationException(e);
         } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
-        	throw new InvalidPartitionException(e);
+        	throw new PartitionValidationException(e);
 		}
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java
deleted file mode 100644
index c02824d..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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 
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.autoscaler.exception;
-
-public class InvalidPartitionException extends Exception {
-
-	private static final long serialVersionUID = -4914522749282514366L;
-	
-	public InvalidPartitionException(String message) {
-		super(message);
-	}
-	
-	public InvalidPartitionException(String message,Throwable e) {
-		super(message,e);
-	}
-	
-	public InvalidPartitionException(Throwable e) {
-		super(e);
-	}
-	
-	
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PartitionValidationException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PartitionValidationException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PartitionValidationException.java
new file mode 100644
index 0000000..4245dd7
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PartitionValidationException.java
@@ -0,0 +1,19 @@
+package org.apache.stratos.autoscaler.exception;
+
+/**
+ *
+ */
+public class PartitionValidationException extends Exception {
+
+	private static final long serialVersionUID = -3904452358279522141L;
+
+
+	public PartitionValidationException(String message, Exception exception){
+        super(message, exception);
+    }
+
+
+    public PartitionValidationException(Exception exception){
+        super(exception);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/TerminationException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/TerminationException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/TerminationException.java
index 8c7ede7..e368379 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/TerminationException.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/TerminationException.java
@@ -1,10 +1,10 @@
 package org.apache.stratos.autoscaler.exception;
 
-/**
- *
- */
 public class TerminationException extends Throwable {
-    public TerminationException(String s, Exception e) {
+
+	private static final long serialVersionUID = -6038793010380236971L;
+
+	public TerminationException(String s, Exception e) {
         super(s, e);
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
new file mode 100644
index 0000000..e611ae7
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
@@ -0,0 +1,76 @@
+/*
+ * 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 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.autoscaler.partition;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
+
+/**
+ * The model class for managing Partitions.
+ */
+public class PartitionManager {
+
+private static final Log log = LogFactory.getLog(PartitionManager.class);
+	
+	// Partitions against partitionID
+	private static Map<String,Partition> partitionListMap = new HashMap<String, Partition>();
+	
+	private static PartitionManager instance;
+	
+	private PartitionManager(){}
+	
+	public static PartitionManager getInstance(){
+		if(null == instance)
+			return new PartitionManager();
+		else
+			return instance;
+	}
+	
+	public boolean partitionExist(String partitionId){
+		return partitionListMap.containsKey(partitionId);
+	}
+	
+	public void addPartition(String partitionId, Partition partition){
+		if(partitionExist(partitionId))
+			log.error("A partition with the ID " + partitionId +" already exist.");
+		else
+			partitionListMap.put(partitionId, partition);		 
+	}
+	
+	public void removePartition(String partitionId){
+		if(partitionExist(partitionId))
+			partitionListMap.remove(partitionId);
+		else
+			log.error("A partition with the ID " + partitionId +" already does not exist."); 
+	}
+	
+	public Partition getPartitionById(String partitionId){
+		if(partitionExist(partitionId))
+			return partitionListMap.get(partitionId);
+		else
+			return null;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
index df8ae29..9149a45 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
@@ -30,6 +30,7 @@ import org.apache.axis2.deployment.repository.util.DeploymentFileData;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 
 /**
@@ -82,12 +83,21 @@ public class PartitionDeployer extends AbstractDeployer {
 			Iterator<Partition> it = partitionList.iterator();
 			
 			while(it.hasNext()){
-				// validate the partition with CC
-				CloudControllerClient.getInstance().validatePartition(it.next());
+				Partition partition = it.next();
+				if(PartitionManager.getInstance().partitionExist(partition.getId())){
+					log.warn("Partition already exists in the system " + partition.getId());
+					continue;
+				}
+				
+				boolean isValid = CloudControllerClient.getInstance().validatePartition(partition);
+				if(!isValid){
+					log.error("Partition is not valid " + partition.getId());
+					continue;					
+				}
+				PartitionManager.getInstance().addPartition(partition.getId(), partition);
 			}			
 
-			log.info("Successfully deployed the partition specified at "
-					+ deploymentFileData.getAbsolutePath());
+			log.info("Successfully deployed the partition specified at "+ deploymentFileData.getAbsolutePath());
 			 
 		} catch (Exception e) {
 			String msg = "Invalid partition artifact at " + deploymentFileData.getAbsolutePath();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
index 2246e56..ec6e3fd 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
@@ -31,7 +31,6 @@ import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.pojo.Properties;
 import org.apache.stratos.cloud.controller.pojo.Property;
@@ -90,15 +89,12 @@ public class PartitionReader{
                 String msg ="Essential " + AutoScalerConstants.ID_ELEMENT + "element " +
                                 "has not specified in ";
                 // handleException(msg);
-            }
-            // boolean partitionExist = TopologyManager.getInstance().getTopology().partitionExist(id);
-            boolean partitionExist =false;
-            if(!partitionExist){
-            	partition = new Partition();
-                partition.setId(id);
-                partition.setProperties(getProperties(iaasElt)); 
-                
-            }            
+            }         
+            	
+            partition = new Partition();               
+            partition.setId(id);
+            partition.setProperties(getProperties(iaasElt)); 
+                                    
         }
         return partition;
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1d6f1d21/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
index 60a31fd..7dc235a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
@@ -30,6 +30,7 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axis2.deployment.DeploymentException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
@@ -75,31 +76,16 @@ public class DeploymentPolicyReader  extends AbstractPolicyReader<DeploymentPoli
 							Object next = partitionItr.next();
 							if(next instanceof OMElement){
 								OMElement partitionEle = (OMElement) next;
-								Partition partition = new Partition();
-								Properties props = new Properties();
-								List<Property> propertyList = new ArrayList<Property>();
 								
-								Iterator<?> partitionPropItr = partitionEle.getChildrenWithLocalName("property");
-								while(partitionPropItr.hasNext())
-								{
-									Object nextProperty = partitionPropItr.next();
-									if(nextProperty instanceof OMElement){
-										OMElement property = (OMElement)nextProperty;
-										Property prop = new Property();
-										prop.setName(property.getAttributeValue(new QName("name")));
-										prop.setValue(property.getText());
-										propertyList.add(prop);
-									}
-								}
-								if(props.getProperties() == null) {
-								    props.setProperties(new Property[0]);
-								}
-								props.setProperties(propertyList.toArray(props.getProperties()));
-								partition.setProperties(props);
-								partition.setId(partitionEle.getAttributeValue(new QName("id")));
+								String partitionId = partitionEle.getAttributeValue(new QName("id"));
+								Partition partition = PartitionManager.getInstance().getPartitionById(partitionId);
+								// If a partition with this name does not exist in the partition list.
+								if(partition == null)
+									throw new InvalidPolicyException("No Partition found matching ID " + partitionId);
+								
 								partition.setPartitionMax(Integer.valueOf(readValue(partitionEle, "max")));
 								partition.setPartitionMin(Integer.valueOf(readValue(partitionEle, "min")));
-								partition.setProvider(readValue(partitionEle, "provider"));
+//								partition.setProvider(readValue(partitionEle, "provider"));
 								//TODO partition validation before policy deployment
 //								validatePartition();
 								partitions.add(partition);