You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2013/12/01 11:59:02 UTC
[08/12] git commit: fixing partition deployer, few exception handling,
policy parser fixes, refactoring
fixing partition deployer, few exception handling, policy parser fixes, refactoring
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/50955e74
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/50955e74
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/50955e74
Branch: refs/heads/master
Commit: 50955e743c589cbbb2f28b5e2526acb3fe150d2b
Parents: 45cfecd
Author: Nirmal Fernando <ni...@apache.org>
Authored: Sun Dec 1 16:22:46 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Sun Dec 1 16:22:46 2013 +0530
----------------------------------------------------------------------
.../stratos/autoscaler/ClusterContext.java | 17 +-
.../algorithm/AutoscaleAlgorithm.java | 2 +-
.../autoscaler/algorithm/OneAfterAnother.java | 2 +-
.../PartitionGroupOneAfterAnother.java | 2 +-
.../autoscaler/algorithm/RoundRobin.java | 2 +-
.../cloud/controller/CloudControllerClient.java | 10 +-
.../deployment/policy/DeploymentPolicy.java | 95 ++++++++++
.../exception/InvalidPartitionException.java | 22 +++
.../exception/InvalidPolicyException.java | 40 +++++
.../exception/PolicyValidationException.java | 4 +
.../autoscaler/partition/PartitionGroup.java | 87 ++++++++++
.../partition/deployers/PartitionDeployer.java | 38 ++--
.../partition/deployers/PartitionReader.java | 102 +++++------
.../policy/InvalidPolicyException.java | 40 -----
.../autoscaler/policy/PolicyManager.java | 3 +-
.../policy/deployers/AbstractPolicyReader.java | 5 +-
.../deployers/AutoscalerPolicyDeployer.java | 2 +-
.../deployers/AutoscalerPolicyReader.java | 2 +-
.../deployers/DeploymentPolicyDeployer.java | 4 +-
.../deployers/DeploymentPolicyReader.java | 51 ++++--
.../stratos/autoscaler/util/AutoscalerUtil.java | 174 +++++++++++++++----
.../stratos/autoscaler/util/ConfUtil.java | 8 +
.../policy/DeploymentPolicyDeployerTest.java | 3 +-
.../src/test/resources/deployment-policy.xml | 2 +-
24 files changed, 521 insertions(+), 196 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
index c1bf519..82d9d0c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
@@ -25,9 +25,8 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.FactHandle;
@@ -64,26 +63,20 @@ public class ClusterContext {
private Map<String, MemberStatsContext> memberContextMap;
private DeploymentPolicy deploymentPolicy;
- @SuppressWarnings("unchecked")
- public ClusterContext(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy) {
+ public ClusterContext(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy, List<Partition> partitions) {
this.clusterId = clusterId;
this.serviceId = serviceId;
this.setDeploymentPolicy(deploymentPolicy);
partitionsOfThisCluster = new ArrayList<Partition>();
- if (deploymentPolicy != null) {
- for (PartitionGroup group : deploymentPolicy.getPartitionGroup()) {
- for (Partition partition : group.getPartitions()) {
- partitionsOfThisCluster.add(partition);
- }
- }
- }
memberContextMap = new HashMap<String, MemberStatsContext>();
partitionCountMap = new HashMap<String, Integer>();
- for (Partition partition : partitionsOfThisCluster) {
+ for (Partition partition : partitions) {
+ partitionsOfThisCluster.add(partition);
this.addPartitionCount(partition.getId(), 0);
}
+
memberCount = 0;
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
index 91d20a0..54ec855 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
@@ -19,8 +19,8 @@
package org.apache.stratos.autoscaler.algorithm;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
/**
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
index 5c33b99..9d34385 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
@@ -25,8 +25,8 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterContext;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
import edu.emory.mathcs.backport.java.util.Arrays;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
index ba35131..f954c97 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
@@ -26,10 +26,10 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterContext;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
import org.apache.stratos.autoscaler.policy.PolicyManager;
import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
import edu.emory.mathcs.backport.java.util.Arrays;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
index 7de89cd..83d48bc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
@@ -23,8 +23,8 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterContext;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
import edu.emory.mathcs.backport.java.util.Arrays;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/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 2b2e861..20c30bb 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
@@ -29,7 +29,6 @@ import org.apache.stratos.autoscaler.exception.SpawningException;
import org.apache.stratos.autoscaler.exception.TerminationException;
import org.apache.stratos.autoscaler.util.ConfUtil;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceIllegalArgumentExceptionException;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidMemberExceptionException;
@@ -38,7 +37,6 @@ import org.apache.stratos.cloud.controller.stub.CloudControllerServiceStub;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
import java.rmi.RemoteException;
-import java.util.UUID;
/**
@@ -88,10 +86,10 @@ public class CloudControllerClient {
}
- public boolean validateDeploymentPolicy(String cartridgeType, DeploymentPolicy policy) throws PolicyValidationException{
+ public boolean validatePartitionsOfPolicy(String cartridgeType, Partition[] partitions) throws PolicyValidationException{
try {
- return stub.validateDeploymentPolicy(cartridgeType, policy);
+ return stub.validateDeploymentPolicy(cartridgeType, partitions);
} catch (RemoteException e) {
log.error(e.getMessage());
throw new PolicyValidationException(e);
@@ -101,7 +99,7 @@ public class CloudControllerClient {
} catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) {
log.error(e.getMessage());
throw new PolicyValidationException(e);
- }
+ }
}
/*
@@ -115,7 +113,7 @@ public class CloudControllerClient {
log.error(e.getMessage());
throw new PartitionValidationException(e);
} catch (CloudControllerServiceInvalidPartitionExceptionException e) {
- throw new PartitionValidationException(e);
+ throw new PartitionValidationException(e.getMessage(),e);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java
new file mode 100644
index 0000000..815fbd7
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java
@@ -0,0 +1,95 @@
+/*
+ * 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.deployment.policy;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+
+import edu.emory.mathcs.backport.java.util.Arrays;
+
+/**
+ * The model class for Deployment-Policy definition.
+ */
+public class DeploymentPolicy implements Serializable{
+
+ private static final long serialVersionUID = 5675507196284400099L;
+ private String id;
+ private PartitionGroup[] partitionGroups;
+ private List<Partition> allPartitions;
+
+ /**
+ * Gets the value of the id property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * Sets the value of the id property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setId(String value) {
+ this.id = value;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void setPartitionGroups(PartitionGroup[] groups) {
+ this.partitionGroups = groups;
+ if(allPartitions == null) {
+ allPartitions = new ArrayList<Partition>();
+ }
+ for (PartitionGroup partitionGroup : groups) {
+ Partition[] partitions = partitionGroup.getPartitions();
+ if(partitions != null) {
+ allPartitions.addAll(Arrays.asList(partitions));
+ }
+ }
+ }
+
+ public List<Partition> getAllPartitions() {
+ return allPartitions;
+ }
+
+ /**
+ * Gets the value of the partition-groups.
+ */
+ public PartitionGroup[] getPartitionGroups() {
+
+ return this.partitionGroups;
+ }
+
+ public String toString() {
+ return "Deployment Policy: "+this.id;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/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
new file mode 100644
index 0000000..2e7013b
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java
@@ -0,0 +1,22 @@
+package org.apache.stratos.autoscaler.exception;
+
+/**
+ *
+ */
+public class InvalidPartitionException extends Exception {
+
+ private static final long serialVersionUID = -7521673271244696906L;
+
+ public InvalidPartitionException(String message, Exception exception){
+ super(message, exception);
+ }
+
+
+ public InvalidPartitionException(Exception exception){
+ super(exception);
+ }
+
+ public InvalidPartitionException(String msg){
+ super(msg);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java
new file mode 100644
index 0000000..a131f05
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java
@@ -0,0 +1,40 @@
+/*
+ * 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 InvalidPolicyException extends Exception {
+
+ private static final long serialVersionUID = -4914522749282514366L;
+
+ public InvalidPolicyException(String message) {
+ super(message);
+ }
+
+ public InvalidPolicyException(String message,Throwable e) {
+ super(message,e);
+ }
+
+ public InvalidPolicyException(Throwable e) {
+ super(e);
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
index 0d899af..f3a30c8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
@@ -16,4 +16,8 @@ public class PolicyValidationException extends Exception {
public PolicyValidationException(Exception exception){
super(exception);
}
+
+ public PolicyValidationException(String msg){
+ super(msg);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java
new file mode 100644
index 0000000..893f3aa
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java
@@ -0,0 +1,87 @@
+/*
+ * 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.io.Serializable;
+
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+
+/**
+ * The model class for PartitionGroup definition.
+ */
+public class PartitionGroup implements Serializable{
+
+ private static final long serialVersionUID = -8043298009352097370L;
+ private String id;
+ private String partitionAlgo;
+ private Partition[] partitions;
+
+ /**
+ * Gets the value of the partitionAlgo property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPartitionAlgo() {
+ return partitionAlgo;
+ }
+
+ /**
+ * Sets the value of the partitionAlgo property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPartitionAlgo(String value) {
+ this.partitionAlgo = value;
+ }
+
+ public void setPartitions(Partition[] partitions) {
+ this.partitions = partitions;
+ }
+
+ /**
+ * Gets the value of the partitions.
+ */
+ public Partition[] getPartitions() {
+ if (partitions == null) {
+ partitions = new Partition[0];
+ }
+ return this.partitions;
+ }
+
+ /**
+ * Gets the value of the id.
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * sets the value of the id.
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/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 9149a45..eb869aa 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
@@ -73,7 +73,7 @@ public class PartitionDeployer extends AbstractDeployer {
public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
File partitionFile = deploymentFileData.getFile();
- log.debug("Started to deploy the policy: " + partitionFile);
+ log.debug("Started to deploy the partitions of file: " + partitionFile);
try {
@@ -82,25 +82,29 @@ public class PartitionDeployer extends AbstractDeployer {
List<Partition> partitionList = reader.getPartitionList();
Iterator<Partition> it = partitionList.iterator();
- while(it.hasNext()){
- 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);
- }
+ while (it.hasNext()) {
+ Partition partition = it.next();
+ try {
+ if (PartitionManager.getInstance().partitionExist(partition.getId())) {
+ log.warn("Partition already exists in the system " + partition.getId());
+ continue;
+ }
+
+ CloudControllerClient.getInstance().validatePartition(partition);
+ PartitionManager.getInstance().addPartition(partition.getId(), partition);
+ log.info("Partition :" + partition.getId() + " is deployed successfully.");
+ } catch (Exception e) {
+ String msg =
+ "Invalid partition: " + partition.getId() + " in file: " +
+ partitionFile.getAbsolutePath()+". Cause: "+e.getMessage();
+ log.error(msg, e);
+ continue;
+ }
+ }
- log.info("Successfully deployed the partition specified at "+ deploymentFileData.getAbsolutePath());
} catch (Exception e) {
- String msg = "Invalid partition artifact at " + deploymentFileData.getAbsolutePath();
+ String msg = "Invalid partition definition file: " + deploymentFileData.getAbsolutePath();
// back up the file
File fileToBeRenamed = partitionFile;
fileToBeRenamed.renameTo(new File(deploymentFileData.getAbsolutePath() + ".back"));
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/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 ec6e3fd..085f39f 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
@@ -23,6 +23,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMElement;
@@ -33,8 +34,8 @@ 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.pojo.Properties;
-import org.apache.stratos.cloud.controller.pojo.Property;
import org.apache.stratos.autoscaler.util.AutoScalerConstants;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.jaxen.JaxenException;
/**
@@ -53,47 +54,53 @@ public class PartitionReader{
public List<Partition> getPartitionList(){
this.parse(this.partitionFIle);
- String partitionXpath = AutoScalerConstants.PARTITIONS_ELEMENT + "/"+AutoScalerConstants.PARTITION_ELEMENT;
+ String partitionXpath = "/"+AutoScalerConstants.PARTITIONS_ELEMENT + "/"+AutoScalerConstants.PARTITION_ELEMENT;
List<OMNode> partitionXMLNodes = getMatchingNodes(partitionXpath);
Iterator<OMNode> itr = partitionXMLNodes.iterator();
List<Partition> partitonList = new ArrayList<Partition>();
- while(itr.hasNext()){
- OMNode node = itr.next();
- //System.out.println("node " + node);
- partitonList.add(this.getPartition(node));
- }
+ while (itr.hasNext()) {
+ OMNode node = itr.next();
+ Partition partition = this.getPartition(node);
+ if (partition != null) {
+ partitonList.add(partition);
+ }
+ }
return partitonList;
}
private Partition getPartition(final OMNode item) {
Partition partition = null;
- String id = null;
if (item.getType() == OMNode.ELEMENT_NODE) {
- OMElement iaasElt = (OMElement) item;
- Iterator<?> it =
- iaasElt.getChildrenWithName(new QName(AutoScalerConstants.ID_ELEMENT));
-
- if (it.hasNext()) {
- OMElement providerElt = (OMElement) it.next();
- id = providerElt.getText();
- }
-
- if (it.hasNext()) {
- log.warn( " contains more than one " + AutoScalerConstants.ID_ELEMENT +
- " elements!" + " Elements other than the first will be neglected.");
- }
-
- if (id == null) {
+ OMElement partitionElt = (OMElement) item;
+ String partitionId = partitionElt.getAttributeValue(new QName("id"));
+
+ if (partitionId == null) {
String msg ="Essential " + AutoScalerConstants.ID_ELEMENT + "element " +
- "has not specified in ";
- // handleException(msg);
+ "has not specified.";
+ log.warn("Partition is ignored. "+msg);
+ return null;
}
partition = new Partition();
- partition.setId(id);
- partition.setProperties(getProperties(iaasElt));
+ partition.setId(partitionId);
+ Properties properties = AutoscalerUtil.getProperties(partitionElt);
+ if (properties != null) {
+ partition.setProperties(properties);
+ }
+ String providerValue = readValue(partitionElt, "provider");
+ if (providerValue != null) {
+ partition.setProvider(providerValue);
+ }
+ String maxValue = readValue(partitionElt, "max");
+ if (maxValue != null) {
+ partition.setPartitionMax(Integer.valueOf(maxValue));
+ }
+ String minValue = readValue(partitionElt, "min");
+ if (minValue != null) {
+ partition.setPartitionMin(Integer.valueOf(minValue));
+ }
}
return partition;
@@ -134,37 +141,14 @@ public class PartitionReader{
return nodeList;
}
- private Properties getProperties(final OMElement elt) {
-
- Iterator<?> it = elt.getChildrenWithName(new QName(AutoScalerConstants.PROPERTY_ELEMENT));
- ArrayList<Property> propertyList = new ArrayList<Property>();
-
- while (it.hasNext()) {
- OMElement prop = (OMElement) it.next();
-
- if (prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR)) == null ||
- prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR)) == null) {
-
- String msg =
- "Property element's, name and value attributes should be specified " +
- "in ";
-
- //handleException(msg);
- }
-
- String name = prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR)).getAttributeValue();
- String value = prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR)).getAttributeValue();
-
- Property property = new Property();
- property.setName(name);
- property.setValue(value);
- propertyList.add(property);
- }
-
- Property[] propertyArray = propertyList.toArray(new Property[propertyList.size()]);
- Properties preoperties = new Properties();
- preoperties.setProperties(propertyArray);
- return preoperties;
- }
+
+ protected String readValue(OMElement ele, String qName) {
+ OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
+ if(valueContainer == null) {
+ return null;
+ }
+ String value = valueContainer.getText();
+ return value;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.java
deleted file mode 100644
index 5df3b24..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.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.policy;
-
-public class InvalidPolicyException extends Exception {
-
- private static final long serialVersionUID = -4914522749282514366L;
-
- public InvalidPolicyException(String message) {
- super(message);
- }
-
- public InvalidPolicyException(String message,Throwable e) {
- super(message,e);
- }
-
- public InvalidPolicyException(Throwable e) {
- super(e);
- }
-
-
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
index 27000f1..f2ab9ae 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
@@ -28,8 +28,9 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
/**
*
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
index 06d6c62..52efa90 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
@@ -31,7 +31,7 @@ import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
/**
* Abstract super-class, with some common logic, for reading policies. The only
@@ -83,6 +83,9 @@ public abstract class AbstractPolicyReader<T> {
protected String readValue(OMElement ele, String qName) {
OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
+ if(valueContainer == null) {
+ return null;
+ }
String value = valueContainer.getText();
return value;
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
index 7579f46..141e95b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
@@ -27,7 +27,7 @@ import org.apache.axis2.deployment.DeploymentException;
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.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
import org.apache.stratos.autoscaler.policy.PolicyManager;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
index 8d71a5d..c0c79a9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
@@ -27,7 +27,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.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
import org.apache.stratos.autoscaler.policy.model.LoadAverage;
import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
index 5c126e7..d56c4c0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
@@ -27,9 +27,9 @@ import org.apache.axis2.deployment.DeploymentException;
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.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
import org.apache.stratos.autoscaler.policy.PolicyManager;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
/**
*
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/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 59689aa..7587f33 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,11 +30,12 @@ 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.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.cloud.controller.pojo.Properties;
/**
*
* The Reader class for Deployment-policy definitions.
@@ -72,21 +73,33 @@ public class DeploymentPolicyReader extends AbstractPolicyReader<DeploymentPoli
while(partitionItr.hasNext()){
Object next = partitionItr.next();
if(next instanceof OMElement){
- OMElement partitionEle = (OMElement) next;
+ OMElement partitionElt = (OMElement) next;
- 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)
- log.info("No Partition found with matching ID " + partitionId);
- */
- Partition partition = new Partition();
- partition.setId(partitionId);
- partition.setPartitionMax(Integer.valueOf(readValue(partitionEle, "max")));
- partition.setPartitionMin(Integer.valueOf(readValue(partitionEle, "min")));
-// partition.setProvider(readValue(partitionEle, "provider"));
- partitions.add(partition);
+ String partitionId = partitionElt.getAttributeValue(new QName("id"));
+ if (partitionId != null) {
+ Partition partition = new Partition();
+ partition.setId(partitionId);
+ String maxValue = readValue(partitionElt, "max");
+ if (maxValue != null) {
+ partition.setPartitionMax(Integer.valueOf(maxValue));
+ }
+ String minValue = readValue(partitionElt, "min");
+ if (minValue != null) {
+ partition.setPartitionMin(Integer.valueOf(minValue));
+ }
+ String providerValue = readValue(partitionElt, "provider");
+ if (providerValue != null) {
+ partition.setProvider(providerValue);
+ }
+
+ Properties properties = AutoscalerUtil.getProperties(partitionElt);
+ if (properties != null) {
+ partition.setProperties(properties);
+ }
+ partitions.add(partition);
+ } else {
+ log.warn("Invalid Partition id: null. Partition will be ignored.");
+ }
}
}
if(group.getPartitions() == null) {
@@ -98,7 +111,7 @@ public class DeploymentPolicyReader extends AbstractPolicyReader<DeploymentPoli
if(policy.getPartitionGroups() == null) {
policy.setPartitionGroups(new PartitionGroup[0]);
}
- policy.setPartitionGroup(partitionGroups.toArray(policy.getPartitionGroups()));
+ policy.setPartitionGroups(partitionGroups.toArray(policy.getPartitionGroups()));
}
} else{
throw new DeploymentException("File is not a valid deployment policy");
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index af2841e..7136eb7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -1,76 +1,118 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
+ * 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
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * 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.
*/
package org.apache.stratos.autoscaler.util;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.ClusterContext;
import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
import org.apache.stratos.autoscaler.exception.PolicyValidationException;
+import org.apache.stratos.autoscaler.partition.PartitionManager;
import org.apache.stratos.autoscaler.policy.PolicyManager;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
+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;
import org.apache.stratos.messaging.domain.topology.Cluster;
-
/**
* This class contains utility methods used by Autoscaler.
*/
public class AutoscalerUtil {
-
+
private static final Log log = LogFactory.getLog(AutoscalerUtil.class);
- private AutoscalerUtil() {
-
- }
-
- /**
- * Updates ClusterContext for given cluster
- * @param cluster
- * @return ClusterContext - Updated ClusterContext
- * @throws PolicyValidationException
- */
- public static ClusterContext getClusterContext(Cluster cluster) throws PolicyValidationException {
+ private AutoscalerUtil() {
+
+ }
+
+ /**
+ * Updates ClusterContext for given cluster
+ *
+ * @param cluster
+ * @return ClusterContext - Updated ClusterContext
+ * @throws PolicyValidationException
+ */
+ public static ClusterContext
+ getClusterContext(Cluster cluster) throws PolicyValidationException {
// FIXME fix the following code to correctly update
// AutoscalerContext context = AutoscalerContext.getInstance();
if (null == cluster) {
return null;
}
- log.info("Deployment policy name: "+cluster.getDeploymentPolicyName());
- log.info("Autoscaler policy name: "+cluster.getAutoscalePolicyName());
-
+ String autoscalePolicyName = cluster.getAutoscalePolicyName();
+ String deploymentPolicyName = cluster.getDeploymentPolicyName();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Deployment policy name: " + deploymentPolicyName);
+ log.debug("Autoscaler policy name: " + autoscalePolicyName);
+ }
+
AutoscalePolicy policy =
PolicyManager.getInstance()
- .getAutoscalePolicy(cluster.getAutoscalePolicyName());
+ .getAutoscalePolicy(autoscalePolicyName);
DeploymentPolicy deploymentPolicy =
PolicyManager.getInstance()
- .getDeploymentPolicy(cluster.getDeploymentPolicyName());
+ .getDeploymentPolicy(deploymentPolicyName);
+
+ if (deploymentPolicy == null) {
+ String msg = "Deployment Policy is null. Policy name: " + deploymentPolicyName;
+ log.error(msg);
+ throw new PolicyValidationException(msg);
+ }
+
+ List<Partition> allPartitions = deploymentPolicy.getAllPartitions();
+ if (allPartitions == null) {
+ String msg =
+ "Deployment Policy's Partitions are null. Policy name: " +
+ deploymentPolicyName;
+ log.error(msg);
+ throw new PolicyValidationException(msg);
+ }
- log.info("Autoscaler policy: "+policy+" Deployment Policy: "+deploymentPolicy);
- CloudControllerClient.getInstance().validateDeploymentPolicy(cluster.getServiceName(), deploymentPolicy);
+ try {
+ validateExistenceOfPartions(allPartitions);
+ } catch (InvalidPartitionException e) {
+ String msg = "Deployment Policy is invalid. Policy name: " + deploymentPolicyName;
+ log.error(msg, e);
+ throw new PolicyValidationException(msg, e);
+ }
+
+ CloudControllerClient.getInstance()
+ .validatePartitionsOfPolicy(cluster.getServiceName(),
+ allPartitions.toArray(new Partition[0]));
ClusterContext clusterContext =
new ClusterContext(cluster.getClusterId(),
cluster.getServiceName(),
- deploymentPolicy);
+ deploymentPolicy, allPartitions);
if (policy != null) {
@@ -89,4 +131,76 @@ public class AutoscalerUtil {
return clusterContext;
}
+ private static void validateExistenceOfPartions(List<Partition> partitions) throws InvalidPartitionException {
+ PartitionManager partitionMgr = PartitionManager.getInstance();
+ for (Partition partition : partitions) {
+ String partitionId = partition.getId();
+ if (partitionId == null || !partitionMgr.partitionExist(partitionId)) {
+ String msg =
+ "Non existing Partition defined. Partition id: " + partitionId + ". " +
+ "Please define the partition in the partition definition file.";
+ log.error(msg);
+ throw new InvalidPartitionException(msg);
+ }
+ fillPartition(partition, partitionMgr.getPartitionById(partitionId));
+ }
+ }
+
+ private static void fillPartition(Partition destPartition, Partition srcPartition) {
+
+ if (!destPartition.isProviderSpecified()) {
+ destPartition.setProvider(srcPartition.getProvider());
+ }
+ if (!destPartition.isPartitionMaxSpecified()) {
+ destPartition.setPartitionMax(srcPartition.getPartitionMax());
+ }
+ if (!destPartition.isPartitionMinSpecified()) {
+ destPartition.setPartitionMin(srcPartition.getPartitionMin());
+ }
+ if (!destPartition.isPropertiesSpecified()) {
+ destPartition.setProperties(srcPartition.getProperties());
+ }
+ }
+
+ public static Properties getProperties(final OMElement elt) {
+
+ Iterator<?> it = elt.getChildrenWithName(new QName(AutoScalerConstants.PROPERTY_ELEMENT));
+ ArrayList<Property> propertyList = new ArrayList<Property>();
+
+ while (it.hasNext()) {
+ OMElement prop = (OMElement) it.next();
+
+ if (prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR)) == null ||
+ prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR)) == null) {
+
+ String msg =
+ "Property element's, name and value attributes should be specified. "
+ + "Property: ";
+ log.warn(msg + prop.toString());
+
+ }
+
+ String name =
+ prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR))
+ .getAttributeValue();
+ String value =
+ prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR))
+ .getAttributeValue();
+
+ Property property = new Property();
+ property.setName(name);
+ property.setValue(value);
+ propertyList.add(property);
+ }
+
+ if(propertyList.isEmpty()) {
+ return null;
+ }
+
+ Property[] propertyArray = propertyList.toArray(new Property[propertyList.size()]);
+ Properties properties = new Properties();
+ properties.setProperties(propertyArray);
+ return properties;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
index 200d6b3..ddc3cb5 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
@@ -19,14 +19,21 @@
package org.apache.stratos.autoscaler.util;
+import org.apache.axiom.om.OMElement;
import org.apache.commons.configuration.ConfigurationException;
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.cloud.controller.pojo.Properties;
+import org.apache.stratos.cloud.controller.pojo.Property;
import org.wso2.carbon.utils.CarbonUtils;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
/**
* This class contains utility methods for read Autoscaler configuration file.
@@ -60,4 +67,5 @@ public class ConfUtil {
public XMLConfiguration getConfiguration(){
return config;
}
+
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
index aa581e3..b7ef179 100644
--- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
+++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
@@ -22,9 +22,8 @@ import static org.junit.Assert.*;
import java.io.File;
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
import org.apache.stratos.autoscaler.policy.deployers.DeploymentPolicyReader;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
import org.junit.Before;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml b/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
index 81e7865..e4ca79e 100644
--- a/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
+++ b/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
@@ -4,7 +4,7 @@
<partitionAlgo>one-after-another</partitionAlgo>
<partition id="P1" >
<provider>ec2</provider>
- <property name="region">ap-southeast-1</property>
+ <property name="region" value="ap-southeast-1"/>
<max>3</max>
<min>1</min>
</partition>