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 <[email protected]>
Authored: Sat Nov 30 14:43:07 2013 -0500
Committer: Udara Liyanage <[email protected]>
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);

Reply via email to