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