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