You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2013/11/18 13:00:26 UTC

git commit: Refactor policy model / policy deployers

Updated Branches:
  refs/heads/master 6bc8e2c8f -> b0535f26b


Refactor policy model / policy deployers

Signed-off-by: Imesh Gunaratne <im...@apache.org>


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

Branch: refs/heads/master
Commit: b0535f26ba23616c6b81452eb64f452becae84a7
Parents: 6bc8e2c
Author: Melan Nimesh <me...@gmail.com>
Authored: Mon Nov 18 10:15:45 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Mon Nov 18 17:30:04 2013 +0530

----------------------------------------------------------------------
 .../org.apache.stratos.autoscaler/pom.xml       |   3 +-
 .../apache/stratos/autoscaler/Constants.java    |  71 --------
 .../health/HealthEventMessageDelegator.java     |   2 +-
 .../autoscaler/policy/PolicyManager.java        | 131 +++++++++++---
 .../policy/deployers/AbstractPolicyReader.java  |  90 ++++++++++
 .../deployers/AutoscalerPolicyDeployer.java     | 113 ++++++++++++
 .../deployers/AutoscalerPolicyReader.java       | 113 ++++++++++++
 .../deployers/DeploymentPolicyDeployer.java     | 113 ++++++++++++
 .../deployers/DeploymentPolicyReader.java       |  94 ++++++++++
 .../policy/deployers/PolicyDeployer.java        | 113 ------------
 .../policy/deployers/PolicyReader.java          | 174 -------------------
 .../policy/model/AutoscalePolicy.java           |  25 ---
 .../policy/model/DeploymentPolicy.java          |  67 +++++++
 .../autoscaler/policy/model/HAPolicy.java       |  67 -------
 .../autoscaler/policy/model/PartitionGroup.java |  81 +++++++++
 .../stratos/autoscaler/util/AutoscalerUtil.java |  16 +-
 .../src/main/resources/META-INF/component.xml   |   9 +-
 .../distribution/src/main/assembly/bin.xml      |  14 +-
 .../main/autoscale-policies/economyPolicy.xml   |  36 ++++
 .../deployment-policies/economy-deployment.xml  |  26 +++
 .../src/main/policies/economyPolicy.xml         |  35 ----
 21 files changed, 873 insertions(+), 520 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/pom.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/pom.xml b/components/org.apache.stratos.autoscaler/pom.xml
index 1d0abde..b92fc94 100644
--- a/components/org.apache.stratos.autoscaler/pom.xml
+++ b/components/org.apache.stratos.autoscaler/pom.xml
@@ -185,7 +185,8 @@
 							*;resolution:=optional
                         </Import-Package>
 						<DynamicImport-Package>*</DynamicImport-Package>
-						<Axis2Deployer>PolicyDeployer</Axis2Deployer>
+						<Axis2Deployer>AutoscalerPolicyDeployer</Axis2Deployer>
+						<Axis2Deployer>DeploymentPolicyDeployer</Axis2Deployer>
 						<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
 						<Embed-Directory>lib</Embed-Directory>
 					</instructions>

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
index bdf0ff7..c600f1e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
@@ -21,75 +21,4 @@ public class Constants {
     public static final String CLOUD_CONTROLLER_SERVICE_SFX = "services/CloudControllerService";
     public static final int CLOUD_CONTROLLER_DEFAULT_PORT = 9444;
 
-//           public void a(){
-//             Cluster cluster = null;
-////               log.info("cluster " + clusterId);
-//       	    String clusterId = cluster.getClusterId();
-//
-//
-//       		ClusterContext clusterContext = null;
-////                       = $context.getClusterContext(clusterId);
-//            AutoscalerContext context = null;
-//       		if(null==clusterContext){
-//
-//            	clusterContext = new ClusterContext(cluster.getClusterId(), cluster.getServiceName()) ;
-//               AutoscalePolicy policy = PolicyManager.getInstance().getPolicy(cluster.getAutoscalePolicyName());
-//
-//                   for(Partition partition: policy.getHAPolicy().getPartitions()){
-//                       clusterContext.addPartitionCount(partition.getId(), 0);
-//                   }
-//                   context.addClusterContext(clusterContext);
-//
-//               }
-//
-//
-//               float lbStatAverage = clusterContext.getAverageRequestsInFlight();
-//               float lbStatGradient = clusterContext.getRequestsInFlightGradient();
-//               float lbStatSecondDerivative = clusterContext.getRequestsInFlightSecondDerivative();
-//
-//               LoadThresholds loadThresholds = manager.getPolicy(cluster.autoscalePolicyName).getLoadThresholds();
-//               float averageLimit = loadThresholds.getRequestsInFlight().getAverage();
-//               float gradientLimit = loadThresholds.getRequestsInFlight().getGradient();
-//               float secondDerivative  = loadThresholds.getRequestsInFlight().getSecondDerivative()
-//               String partitionAlgorithm = manager.getPolicy(cluster.autoscalePolicyName).getHAPolicy().getPartitionAlgo();
-//               log.info("partitionAlgorithm " + partitionAlgorithm);
-//
-//               AutoscaleAlgorithm autoscaleAlgorithm = null;
-//               if(Constants.ROUND_ROBIN_ALGORITHM_ID.equals(partitionAlgorithm)){
-//
-//                   autoscaleAlgorithm = new RoundRobin();
-//               } else if(Constants.ONE_AFTER_ANOTHER_ALGORITHM_ID.equals(partitionAlgorithm)){
-//
-//                   autoscaleAlgorithm = new OneAfterAnother();
-//               }
-//
-//
-//                if(lbStatAverage > averageLimit && lbStatGradient > gradientLimit){
-////                    log.info("in scale up " );
-//                    int i = 0;
-//                    Partition partition = autoscaleAlgorithm.getScaleUpPartition(clusterId);
-//                    if(partition != null){
-////                        log.info("gonna scale up " );
-//                        if(lbStatSecondDerivative > secondDerivative){
-//                            int numberOfInstancesToBeSpawned = 2; // take from a config
-//                                              log.info("gonna scale up by 2 " );
-//                            evaluator.delegateSpawn(partition,clusterId, numberOfInstancesToBeSpawned);
-//                            //spawnInstances Two
-//
-//                        } else {
-//                            int numberOfInstancesToBeSpawned = 1;
-//                            evaluator.delegateSpawn(partition,clusterId, numberOfInstancesToBeSpawned);
-//                            //spawnInstances one
-//                        }
-//                    }
-//                } else if(lbStatAverage < averageLimit && lbStatGradient < gradientLimit){
-////                          log.info("in scale down " );
-//                    //terminate one
-//                    Partition partition = autoscaleAlgorithm.getScaleDownPartition(clusterId);
-//                    if(partition != null){
-////                    log.info("gonna scale down " );
-//                        evaluator.delegateTerminate(partition,clusterId);
-//                    }
-//                }
-//           }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
index ad3f93b..5057553 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
@@ -68,7 +68,7 @@ public class HealthEventMessageDelegator implements Runnable {
                         if(!AutoscalerContext.getInstance().clusterExists(clusterId)){
 
                             Cluster cluster = service.getCluster(clusterId);
-                            AutoscalePolicy autoscalePolicy = PolicyManager.getInstance().getPolicy(cluster.getAutoscalePolicyName());
+                            AutoscalePolicy autoscalePolicy = PolicyManager.getInstance().getAutoscalePolicy(cluster.getAutoscalePolicyName());
 
                             ClusterContext clusterContext = new ClusterContext(clusterId, service.getServiceName());
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/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 90fba2f..093d0b8 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
@@ -29,17 +29,21 @@ import java.util.Map;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 
 /**
  * 
- *  Manager class for the purpose of managing Autoscale-policy definitions.
+ *  Manager class for the purpose of managing Autoscale/Deployment policy definitions.
  */
 public class PolicyManager {
 	
 	private static final Log log = LogFactory.getLog(PolicyManager.class);
 	
-	private static Map<String,AutoscalePolicy> policyListMap = new HashMap<String, AutoscalePolicy>();
-	private static Map<File,String> fileNameMap = new HashMap<File, String>();
+	private static Map<String,AutoscalePolicy> autoscalePolicyListMap = new HashMap<String, AutoscalePolicy>();
+	private static Map<File,String> autoscalePolicyfileNameMap = new HashMap<File, String>();
+	
+	private static Map<String,DeploymentPolicy> deploymentPolicyListMap = new HashMap<String, DeploymentPolicy>();
+	private static Map<File,String> deploymentPolicyfileNameMap = new HashMap<File, String>();
 	
 	private static PolicyManager instance = null;
 	 
@@ -59,18 +63,18 @@ public class PolicyManager {
      * @param policy
      * @throws InvalidPolicyException
      */
-	public void addPolicy(File policyFile,AutoscalePolicy policy) throws InvalidPolicyException {
-		if(fileNameMap.containsKey(policyFile)){
-			removePolicy(fileNameMap.get(policyFile));
-			fileNameMap.remove(policyFile);
+	public void addAutoscalePolicy(File policyFile,AutoscalePolicy policy) throws InvalidPolicyException {
+		if(autoscalePolicyfileNameMap.containsKey(policyFile)){
+			removeAutoscalePolicy(autoscalePolicyfileNameMap.get(policyFile));
+			autoscalePolicyfileNameMap.remove(policyFile);
 		} else{
-			fileNameMap.put(policyFile, policy.getId());
+			autoscalePolicyfileNameMap.put(policyFile, policy.getId());
 		}
-		if (!policyListMap.containsKey(policy.getId())) {
+		if (!autoscalePolicyListMap.containsKey(policy.getId())) {
 			if(log.isDebugEnabled()){
 				log.debug("Adding policy :" + policy.getId());
 			}
-			policyListMap.put(policy.getId(), policy);
+			autoscalePolicyListMap.put(policy.getId(), policy);
 		} else {
 			throw new InvalidPolicyException("Specified policy [" + policy.getId()
 					+ "] already exists");
@@ -82,8 +86,8 @@ public class PolicyManager {
 	 * @param policy
 	 * @throws InvalidPolicyException
 	 */
-	public void addPolicy(AutoscalePolicy policy) throws InvalidPolicyException {
-		addPolicy(new File(policy.getId().concat(".xml")), policy);
+	public void addAutoscalePolicy(AutoscalePolicy policy) throws InvalidPolicyException {
+		addAutoscalePolicy(new File(policy.getId().concat(".xml")), policy);
 	}
 	
 	/**
@@ -91,12 +95,12 @@ public class PolicyManager {
 	 * @param policy
 	 * @throws InvalidPolicyException
 	 */
-	public void removePolicy(String policy) throws InvalidPolicyException {
-		if (policyListMap.containsKey(policy)) {
+	public void removeAutoscalePolicy(String policy) throws InvalidPolicyException {
+		if (autoscalePolicyListMap.containsKey(policy)) {
 			if(log.isDebugEnabled()){
 				log.debug("Removing policy :" + policy);
 			}
-			policyListMap.remove(policy);
+			autoscalePolicyListMap.remove(policy);
 		} else {
 			throw new InvalidPolicyException("No such policy [" + policy + "] exists");
 		}
@@ -107,29 +111,106 @@ public class PolicyManager {
 	 * @param policyFile
 	 * @throws InvalidPolicyException
 	 */
-	public void removePolicy(File policyFile) throws InvalidPolicyException {
-		if(fileNameMap.containsKey(policyFile)){
-			removePolicy(fileNameMap.get(policyFile));
-			fileNameMap.remove(policyFile);
+	public void removeAutoscalePolicy(File policyFile) throws InvalidPolicyException {
+		if(autoscalePolicyfileNameMap.containsKey(policyFile)){
+			removeAutoscalePolicy(autoscalePolicyfileNameMap.get(policyFile));
+			autoscalePolicyfileNameMap.remove(policyFile);
 		} 
 	}
 	
 	/**
-	 * Returns a List of the policies contained in this manager.
+	 * Returns a List of the Autoscale policies contained in this manager.
 	 * @return
 	 */
-	public List<AutoscalePolicy> getPolicyList() {
-		return Collections.unmodifiableList(new ArrayList<AutoscalePolicy>(policyListMap.values()));
+	public List<AutoscalePolicy> getAutoscalePolicyList() {
+		return Collections.unmodifiableList(new ArrayList<AutoscalePolicy>(autoscalePolicyListMap.values()));
 	}
 	
 	/**
-	 * Returns the policy to which the specified id is mapped or null
+	 * Returns the autoscale policy to which the specified id is mapped or null
 	 * @param id
 	 * @return
 	 */
-	public AutoscalePolicy getPolicy(String id) {
-		return policyListMap.get(id);
+	public AutoscalePolicy getAutoscalePolicy(String id) {
+		return autoscalePolicyListMap.get(id);
 	}
 
+	/**
+     * Appends the specified policy
+     * @param policyFile
+     * @param policy
+     * @throws InvalidPolicyException
+     */
+	public void addDeploymentPolicy(File policyFile,DeploymentPolicy policy) throws InvalidPolicyException {
+		if(deploymentPolicyfileNameMap.containsKey(policyFile)){
+			removeDeploymentPolicy(deploymentPolicyfileNameMap.get(policyFile));
+			deploymentPolicyfileNameMap.remove(policyFile);
+		} else{
+			deploymentPolicyfileNameMap.put(policyFile, policy.getId());
+		}
+		if (!deploymentPolicyListMap.containsKey(policy.getId())) {
+			if(log.isDebugEnabled()){
+				log.debug("Adding policy :" + policy.getId());
+			}
+			deploymentPolicyListMap.put(policy.getId(), policy);
+		} else {
+			throw new InvalidPolicyException("Specified policy [" + policy.getId()
+					+ "] already exists");
+		}
+	}
+	
+	/**
+	 * Appends the specified policy
+	 * @param policy
+	 * @throws InvalidPolicyException
+	 */
+	public void addDeploymentPolicy(DeploymentPolicy policy) throws InvalidPolicyException {
+		addDeploymentPolicy(new File(policy.getId().concat(".xml")), policy);
+	}
+	
+	/**
+	 * Removes the specified policy
+	 * @param policy
+	 * @throws InvalidPolicyException
+	 */
+	public void removeDeploymentPolicy(String policy) throws InvalidPolicyException {
+		if (deploymentPolicyListMap.containsKey(policy)) {
+			if(log.isDebugEnabled()){
+				log.debug("Removing policy :" + policy);
+			}
+			deploymentPolicyListMap.remove(policy);
+		} else {
+			throw new InvalidPolicyException("No such policy [" + policy + "] exists");
+		}
+	}
+	
+	/**
+	 * Removes the specified policy
+	 * @param policyFile
+	 * @throws InvalidPolicyException
+	 */
+	public void removeDeploymentPolicy(File policyFile) throws InvalidPolicyException {
+		if(deploymentPolicyfileNameMap.containsKey(policyFile)){
+			removeDeploymentPolicy(deploymentPolicyfileNameMap.get(policyFile));
+			deploymentPolicyfileNameMap.remove(policyFile);
+		} 
+	}
+	
+	/**
+	 * Returns a List of the Deployment policies contained in this manager.
+	 * @return
+	 */
+	public List<DeploymentPolicy> getDeploymentPolicyList() {
+		return Collections.unmodifiableList(new ArrayList<DeploymentPolicy>(deploymentPolicyListMap.values()));
+	}
+	
+	/**
+	 * Returns the deployment policy to which the specified id is mapped or null
+	 * @param id
+	 * @return
+	 */
+	public DeploymentPolicy getDeploymentPolicy(String id) {
+		return deploymentPolicyListMap.get(id);
+	}
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/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
new file mode 100644
index 0000000..06d6c62
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
@@ -0,0 +1,90 @@
+/*
+ * 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.deployers;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+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;
+
+/**
+ * Abstract super-class, with some common logic, for reading policies. The only
+ * method subclasses must implement is read().
+ */
+public abstract class AbstractPolicyReader<T> {
+
+	private static final Log log = LogFactory.getLog(AbstractPolicyReader.class);
+
+	protected File file;
+	private FileInputStream fStream;
+
+	protected AbstractPolicyReader(File file) {
+		this.setFile(file);
+	}
+
+	public File getFile() {
+		return file;
+	}
+
+	public void setFile(File file) {
+		this.file = file;
+	}
+
+	public abstract T read() throws InvalidPolicyException;
+
+	protected OMElement getDocument() throws Exception {
+		fStream = new FileInputStream(file);
+		XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(fStream);
+		StAXOMBuilder builder = new StAXOMBuilder(parser);
+		return builder.getDocumentElement();
+	}
+
+	protected void closeStream() {
+		try {
+			if (fStream != null) {
+				fStream.close();
+			}
+		} catch (IOException e) {
+			log.debug("Unable to close the input stream", e);
+		}
+	}
+
+	protected String readValueAttr(OMElement ele, String qName) {
+		OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
+		String value = valueContainer.getAttributeValue(new QName("value"));
+		return value;
+	}
+
+	protected String readValue(OMElement ele, String qName) {
+		OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
+		String value = valueContainer.getText();
+		return value;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/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
new file mode 100644
index 0000000..7579f46
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
@@ -0,0 +1,113 @@
+/*
+ * 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.deployers;
+
+import java.io.File;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.deployment.AbstractDeployer;
+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.policy.PolicyManager;
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+
+/**
+ * 
+ * The Axis2 deployer class for Autoscale-policy definitions.
+ */
+public class AutoscalerPolicyDeployer extends AbstractDeployer {
+	
+	 private static final Log log = LogFactory.getLog(AutoscalerPolicyDeployer.class);
+	 
+	 private static String fileExt="xml"; //default
+	 private static String deployDirectory=null;
+
+	@Override
+	public void init(ConfigurationContext context) {
+		if(deployDirectory!=null){
+			File deployDir = new File(new File(context.getAxisConfiguration().getRepository().getPath()),deployDirectory);
+			if(!deployDir.exists()){
+				//create policies deployment directory if not exist 
+				try {
+					deployDir.mkdirs();
+				} catch (Exception e) {
+					log.error("Unable to create policies deployment directory", e);
+				}
+			}
+		}
+	}
+
+	@Override
+	public void setDirectory(String dir) {
+		deployDirectory = dir;
+	}
+
+	@Override
+	public void setExtension(String ext) {
+		fileExt = ext;
+	}
+	
+	@Override
+	public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
+
+		File policyFile = deploymentFileData.getFile();
+		log.debug("Started to deploy the policy: " + policyFile);
+
+		try {
+			
+			AutoscalerPolicyReader reader = new AutoscalerPolicyReader(policyFile);
+			
+			AutoscalePolicy policy = reader.read();
+			PolicyManager.getInstance().addAutoscalePolicy(policyFile,policy);
+
+			log.info("Successfully deployed the policy specified at "
+					+ deploymentFileData.getAbsolutePath());
+
+		} catch (Exception e) {
+			String msg = "Invalid policy artifact at " + deploymentFileData.getAbsolutePath();
+			// back up the file
+			File fileToBeRenamed = policyFile;
+			fileToBeRenamed.renameTo(new File(deploymentFileData.getAbsolutePath() + ".back"));
+			log.error(msg, e);
+			throw new DeploymentException(msg, e);
+		}
+	}
+	
+	@Override
+	public void undeploy(String fileName) throws DeploymentException {
+		File policyFile = new File(fileName);
+		String policyName = policyFile.getName().replaceAll("." + fileExt + "$", "");
+		try {
+			PolicyManager.getInstance().removeAutoscalePolicy(policyFile);
+			log.info("Successfully undeployed the policy specified at " + fileName);
+		} catch (InvalidPolicyException e) {
+			log.error("unable to remove policy " + policyName , e);
+			throw new DeploymentException("unable to remove policy " + policyName ,e);
+		}
+
+	}
+	
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/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
new file mode 100644
index 0000000..8d71a5d
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
@@ -0,0 +1,113 @@
+/*
+ * 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.deployers;
+
+import java.io.File;
+
+import javax.xml.namespace.QName;
+
+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.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.policy.model.LoadAverage;
+import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
+import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
+import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
+
+/**
+ * 
+ * The Reader class for Autoscale-policy definitions.
+ */
+public class AutoscalerPolicyReader extends AbstractPolicyReader<AutoscalePolicy>  {
+	
+	private static final Log log = LogFactory.getLog(AutoscalerPolicyReader.class);
+	
+	public AutoscalerPolicyReader(File file) {
+		super(file);
+	}
+	
+	public AutoscalePolicy read() throws InvalidPolicyException{
+		AutoscalePolicy policy = new AutoscalePolicy();
+		try {
+			OMElement docEle = getDocument();
+			if("autoscalePolicy".equalsIgnoreCase(docEle.getLocalName())){
+				policy.setId(docEle.getAttributeValue(new QName("id")));
+				OMElement displayNameEle = docEle.getFirstChildWithName(new QName("displayName"));
+				if(displayNameEle!=null){
+					policy.setDisplayName(displayNameEle.getText());
+				}
+				OMElement descriptionEle = docEle.getFirstChildWithName(new QName("description"));
+				if(descriptionEle!=null){
+					policy.setDescription(descriptionEle.getText());
+				}
+				
+				//LoadThresholds
+				OMElement loadThresholdsEle = docEle.getFirstChildWithName(new QName("loadThresholds"));
+				LoadThresholds loadThresholds = new LoadThresholds();
+				
+				//RequestsInFlight
+				OMElement reqInFlightEle = loadThresholdsEle.getFirstChildWithName(new QName("requestsInFlight"));
+				RequestsInFlight reqInFlight = new RequestsInFlight();
+				reqInFlight.setAverage(Float.valueOf(readValueAttr(reqInFlightEle,"average")));
+				reqInFlight.setGradient(Float.valueOf(readValueAttr(reqInFlightEle,"gradient")));
+				reqInFlight.setSecondDerivative(Float.valueOf(readValueAttr(reqInFlightEle,"secondDerivative")));
+                reqInFlight.setScaleDownMarginOfGradient(Float.valueOf(readValueAttr(reqInFlightEle,"scaleDownMarginOfGradient")));
+                reqInFlight.setScaleDownMarginOfSecondDerivative(Float.valueOf(readValueAttr(reqInFlightEle,"scaleDownMarginOfSecondDerivative")));
+				loadThresholds.setRequestsInFlight(reqInFlight);
+				
+				//MemoryConsumption
+				OMElement memConsumptionEle = loadThresholdsEle.getFirstChildWithName(new QName("memoryConsumption"));
+				MemoryConsumption memConsumption = new MemoryConsumption();
+				memConsumption.setAverage(Float.valueOf(readValueAttr(memConsumptionEle,"average")));
+				memConsumption.setGradient(Float.valueOf(readValueAttr(memConsumptionEle,"gradient")));
+				memConsumption.setSecondDerivative(Float.valueOf(readValueAttr(memConsumptionEle,"secondDerivative")));
+                memConsumption.setScaleDownMarginOfGradient(Float.valueOf(readValueAttr(memConsumptionEle,"scaleDownMarginOfGradient")));
+                memConsumption.setScaleDownMarginOfSecondDerivative(Float.valueOf(readValueAttr(memConsumptionEle,"scaleDownMarginOfSecondDerivative")));
+				loadThresholds.setMemoryConsumption(memConsumption);
+				
+				//LoadAverage
+				OMElement loadAvrEle = loadThresholdsEle.getFirstChildWithName(new QName("loadAverage"));
+				LoadAverage loadAvr = new LoadAverage();
+				loadAvr.setAverage(Float.valueOf(readValueAttr(loadAvrEle,"average")));
+				loadAvr.setGradient(Float.valueOf(readValueAttr(loadAvrEle,"gradient")));
+				loadAvr.setSecondDerivative(Float.valueOf(readValueAttr(loadAvrEle,"secondDerivative")));
+                loadAvr.setScaleDownMarginOfGradient(Float.valueOf(readValueAttr(loadAvrEle,"scaleDownMarginOfGradient")));
+                loadAvr.setScaleDownMarginOfSecondDerivative(Float.valueOf(readValueAttr(loadAvrEle,"scaleDownMarginOfSecondDerivative")));
+				loadThresholds.setLoadAverage(loadAvr);
+				
+				policy.setLoadThresholds(loadThresholds);
+				
+			} else{
+				throw new DeploymentException("File is not a valid autoscale policy");
+			}
+
+		} catch (Exception e){
+			log.error("Malformed autoscale policy file", e);
+			throw new InvalidPolicyException("Malformed autoscale policy file",e);
+		} finally{
+			closeStream();
+		}
+		return policy;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/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
new file mode 100644
index 0000000..d74a384
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
@@ -0,0 +1,113 @@
+/*
+ * 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.deployers;
+
+import java.io.File;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.deployment.AbstractDeployer;
+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.policy.PolicyManager;
+import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
+
+/**
+ * 
+ * The Axis2 deployer class for Deployment-Policy definitions.
+ */
+public class DeploymentPolicyDeployer extends AbstractDeployer {
+	
+	 private static final Log log = LogFactory.getLog(DeploymentPolicyDeployer.class);
+	 
+	 private static String fileExt="xml"; //default
+	 private static String deployDirectory=null;
+
+	@Override
+	public void init(ConfigurationContext context) {
+		if(deployDirectory!=null){
+			File deployDir = new File(new File(context.getAxisConfiguration().getRepository().getPath()),deployDirectory);
+			if(!deployDir.exists()){
+				//create policies deployment directory if not exist 
+				try {
+					deployDir.mkdirs();
+				} catch (Exception e) {
+					log.error("Unable to create policies deployment directory", e);
+				}
+			}
+		}
+	}
+
+	@Override
+	public void setDirectory(String dir) {
+		deployDirectory = dir;
+	}
+
+	@Override
+	public void setExtension(String ext) {
+		fileExt = ext;
+	}
+	
+	@Override
+	public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
+
+		File policyFile = deploymentFileData.getFile();
+		log.debug("Started to deploy the policy: " + policyFile);
+
+		try {
+			
+			DeploymentPolicyReader reader = new DeploymentPolicyReader(policyFile);
+			
+			DeploymentPolicy policy = reader.read();
+			PolicyManager.getInstance().addDeploymentPolicy(policyFile,policy);
+
+			log.info("Successfully deployed the policy specified at "
+					+ deploymentFileData.getAbsolutePath());
+
+		} catch (Exception e) {
+			String msg = "Invalid policy artifact at " + deploymentFileData.getAbsolutePath();
+			// back up the file
+			File fileToBeRenamed = policyFile;
+			fileToBeRenamed.renameTo(new File(deploymentFileData.getAbsolutePath() + ".back"));
+			log.error(msg, e);
+			throw new DeploymentException(msg, e);
+		}
+	}
+	
+	@Override
+	public void undeploy(String fileName) throws DeploymentException {
+		File policyFile = new File(fileName);
+		String policyName = policyFile.getName().replaceAll("." + fileExt + "$", "");
+		try {
+			PolicyManager.getInstance().removeDeploymentPolicy(policyFile);
+			log.info("Successfully undeployed the policy specified at " + fileName);
+		} catch (InvalidPolicyException e) {
+			log.error("unable to remove policy " + policyName , e);
+			throw new DeploymentException("unable to remove policy " + policyName ,e);
+		}
+
+	}
+	
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/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
new file mode 100644
index 0000000..fd0aceb
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
@@ -0,0 +1,94 @@
+/*
+ * 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.deployers;
+
+import java.io.File;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+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.policy.model.DeploymentPolicy;
+import org.apache.stratos.autoscaler.policy.model.Partition;
+import org.apache.stratos.autoscaler.policy.model.PartitionGroup;
+
+/**
+ * 
+ * The Reader class for Deployment-policy definitions.
+ */
+public class DeploymentPolicyReader  extends AbstractPolicyReader<DeploymentPolicy> {
+	
+	private static final Log log = LogFactory.getLog(DeploymentPolicyReader.class);
+	
+	
+	public DeploymentPolicyReader(File file) {
+		super(file);
+	}
+	
+	public DeploymentPolicy read() throws InvalidPolicyException{
+		DeploymentPolicy policy = new DeploymentPolicy();
+		try {
+			OMElement docEle = getDocument();
+			if("deploymentPolicy".equalsIgnoreCase(docEle.getLocalName())){
+				policy.setId(docEle.getAttributeValue(new QName("id")));
+				//Partition-Groups
+				OMElement partitionGroupsEle = docEle.getFirstChildWithName(new QName("partitionGroups"));
+				Iterator<?> partitionGroupItr = partitionGroupsEle.getChildrenWithLocalName("partitionGroup");
+				while(partitionGroupItr.hasNext()){
+					Object nextGroup = partitionGroupItr.next();
+					if(nextGroup instanceof OMElement){
+						OMElement groupEle = (OMElement) nextGroup;
+						PartitionGroup group = new PartitionGroup();
+						group.setPartitionAlgo(readValue(groupEle, "PartitionAlgo"));
+						//Partitions
+						OMElement partitionsEle = groupEle.getFirstChildWithName(new QName("partitions"));
+						Iterator<?> partitionItr = partitionsEle.getChildrenWithLocalName("partition");
+						while(partitionItr.hasNext()){
+							Object next = partitionItr.next();
+							if(next instanceof OMElement){
+								OMElement partitionEle = (OMElement) next;
+								Partition partition = new Partition();
+								partition.setId(partitionEle.getAttributeValue(new QName("id")));
+								partition.setPartitionMax(Integer.valueOf(readValue(partitionEle, "max")));
+								partition.setPartitionMin(Integer.valueOf(readValue(partitionEle, "min")));
+								group.getPartitions().add(partition);
+							}
+						}
+						policy.getPartitionGroups().add(group);
+					}
+				}
+			} else{
+				throw new DeploymentException("File is not a valid deployment policy");
+			}
+
+		} catch (Exception e){
+			log.error("Malformed deployment policy file", e);
+			throw new InvalidPolicyException("Malformed deployment policy file",e);
+		} finally{
+			closeStream();
+		}
+		return policy;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyDeployer.java
deleted file mode 100644
index 3f5eaad..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyDeployer.java
+++ /dev/null
@@ -1,113 +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.deployers;
-
-import java.io.File;
-
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.deployment.AbstractDeployer;
-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.policy.PolicyManager;
-import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
-
-/**
- * 
- * The Axis2 deployer class for Autoscale-policy definitions.
- */
-public class PolicyDeployer extends AbstractDeployer {
-	
-	 private static final Log log = LogFactory.getLog(PolicyDeployer.class);
-	 
-	 private static String fileExt="xml"; //default
-	 private static String deployDirectory=null;
-
-	@Override
-	public void init(ConfigurationContext context) {
-		if(deployDirectory!=null){
-			File deployDir = new File(new File(context.getAxisConfiguration().getRepository().getPath()),deployDirectory);
-			if(!deployDir.exists()){
-				//create policies deployment directory if not exist 
-				try {
-					deployDir.mkdirs();
-				} catch (Exception e) {
-					log.error("Unable to create policies deployment directory", e);
-				}
-			}
-		}
-	}
-
-	@Override
-	public void setDirectory(String dir) {
-		deployDirectory = dir;
-	}
-
-	@Override
-	public void setExtension(String ext) {
-		fileExt = ext;
-	}
-	
-	@Override
-	public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
-
-		File policyFile = deploymentFileData.getFile();
-		log.debug("Started to deploy the policy: " + policyFile);
-
-		try {
-			
-			PolicyReader reader = new PolicyReader(policyFile);
-			
-			AutoscalePolicy policy = reader.read();
-			PolicyManager.getInstance().addPolicy(policyFile,policy);
-
-			log.info("Successfully deployed the policy specified at "
-					+ deploymentFileData.getAbsolutePath());
-
-		} catch (Exception e) {
-			String msg = "Invalid policy artifact at " + deploymentFileData.getAbsolutePath();
-			// back up the file
-			File fileToBeRenamed = policyFile;
-			fileToBeRenamed.renameTo(new File(deploymentFileData.getAbsolutePath() + ".back"));
-			log.error(msg, e);
-			throw new DeploymentException(msg, e);
-		}
-	}
-	
-	@Override
-	public void undeploy(String fileName) throws DeploymentException {
-		File policyFile = new File(fileName);
-		String policyName = policyFile.getName().replaceAll("." + fileExt + "$", "");
-		try {
-			PolicyManager.getInstance().removePolicy(policyFile);
-			log.info("Successfully undeployed the policy specified at " + fileName);
-		} catch (InvalidPolicyException e) {
-			log.error("unable to remove policy " + policyName , e);
-			throw new DeploymentException("unable to remove policy " + policyName ,e);
-		}
-
-	}
-	
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyReader.java
deleted file mode 100644
index 67d0154..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/PolicyReader.java
+++ /dev/null
@@ -1,174 +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.deployers;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Iterator;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-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.policy.model.AutoscalePolicy;
-import org.apache.stratos.autoscaler.policy.model.HAPolicy;
-import org.apache.stratos.autoscaler.policy.model.LoadAverage;
-import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
-import org.apache.stratos.autoscaler.policy.model.Partition;
-import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
-
-/**
- * 
- * The Reader class for Autoscale-policy definitions.
- */
-public class PolicyReader  {
-	
-	private static final Log log = LogFactory.getLog(PolicyReader.class);
-	
-	private File file;
-	
-	public PolicyReader(File file) {
-		this.setFile(file);
-	}
-
-	public File getFile() {
-		return file;
-	}
-
-	public void setFile(File file) {
-		this.file = file;
-	}
-	
-	public AutoscalePolicy read() throws InvalidPolicyException{
-		FileInputStream fStream = null;
-		AutoscalePolicy policy = new AutoscalePolicy();
-		try {
-			fStream = new FileInputStream(file);
-			XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(fStream);
-			StAXOMBuilder builder = new StAXOMBuilder(parser);
-			OMElement docEle = builder.getDocumentElement();
-			if("AutoscalePolicy".equalsIgnoreCase(docEle.getLocalName())){
-				policy.setId(docEle.getAttributeValue(new QName("id")));
-				OMElement displayNameEle = docEle.getFirstChildWithName(new QName("displayName"));
-				if(displayNameEle!=null){
-					policy.setDisplayName(displayNameEle.getText());
-				}
-				OMElement descriptionEle = docEle.getFirstChildWithName(new QName("description"));
-				if(descriptionEle!=null){
-					policy.setDescription(descriptionEle.getText());
-				}
-				
-				//LoadThresholds
-				OMElement loadThresholdsEle = docEle.getFirstChildWithName(new QName("LoadThresholds"));
-				LoadThresholds loadThresholds = new LoadThresholds();
-				
-				//RequestsInFlight
-				OMElement reqInFlightEle = loadThresholdsEle.getFirstChildWithName(new QName("RequestsInFlight"));
-				RequestsInFlight reqInFlight = new RequestsInFlight();
-				reqInFlight.setAverage(Float.valueOf(readValueAttr(reqInFlightEle,"Average")));
-				reqInFlight.setGradient(Float.valueOf(readValueAttr(reqInFlightEle,"Gradient")));
-				reqInFlight.setSecondDerivative(Float.valueOf(readValueAttr(reqInFlightEle,"SecondDerivative")));
-                reqInFlight.setScaleDownMarginOfGradient(Float.valueOf(readValueAttr(reqInFlightEle,"ScaleDownMarginOfGradient")));
-                reqInFlight.setScaleDownMarginOfSecondDerivative(Float.valueOf(readValueAttr(reqInFlightEle,"ScaleDownMarginOfSecondDerivative")));
-				loadThresholds.setRequestsInFlight(reqInFlight);
-				
-				//MemoryConsumption
-				OMElement memConsumptionEle = loadThresholdsEle.getFirstChildWithName(new QName("MemoryConsumption"));
-				MemoryConsumption memConsumption = new MemoryConsumption();
-				memConsumption.setAverage(Float.valueOf(readValueAttr(memConsumptionEle,"Average")));
-				memConsumption.setGradient(Float.valueOf(readValueAttr(memConsumptionEle,"Gradient")));
-				memConsumption.setSecondDerivative(Float.valueOf(readValueAttr(memConsumptionEle,"SecondDerivative")));
-                memConsumption.setScaleDownMarginOfGradient(Float.valueOf(readValueAttr(memConsumptionEle,"ScaleDownMarginOfGradient")));
-                memConsumption.setScaleDownMarginOfSecondDerivative(Float.valueOf(readValueAttr(memConsumptionEle,"ScaleDownMarginOfSecondDerivative")));
-				loadThresholds.setMemoryConsumption(memConsumption);
-				
-				//LoadAverage
-				OMElement loadAvrEle = loadThresholdsEle.getFirstChildWithName(new QName("LoadAverage"));
-				LoadAverage loadAvr = new LoadAverage();
-				loadAvr.setAverage(Float.valueOf(readValueAttr(loadAvrEle,"Average")));
-				loadAvr.setGradient(Float.valueOf(readValueAttr(loadAvrEle,"Gradient")));
-				loadAvr.setSecondDerivative(Float.valueOf(readValueAttr(loadAvrEle,"SecondDerivative")));
-                loadAvr.setScaleDownMarginOfGradient(Float.valueOf(readValueAttr(loadAvrEle,"ScaleDownMarginOfGradient")));
-                loadAvr.setScaleDownMarginOfSecondDerivative(Float.valueOf(readValueAttr(loadAvrEle,"ScaleDownMarginOfSecondDerivative")));
-				loadThresholds.setLoadAverage(loadAvr);
-				
-				policy.setLoadThresholds(loadThresholds);
-				
-				//HAPolicy
-				OMElement haPolicyEle = docEle.getFirstChildWithName(new QName("HAPolicy"));
-				HAPolicy haPolicy = new HAPolicy();
-				haPolicy.setPartitionAlgo(readValue(haPolicyEle, "PartitionAlgo"));
-				
-				//Partitions
-				OMElement partitions = haPolicyEle.getFirstChildWithName(new QName("Partitions"));
-				Iterator<?> partitionItr = partitions.getChildrenWithLocalName("Partition");
-				while(partitionItr.hasNext()){
-					Object next = partitionItr.next();
-					if(next instanceof OMElement){
-						OMElement partitionEle = (OMElement) next;
-						Partition partition = new Partition();
-						partition.setId(partitionEle.getAttributeValue(new QName("id")));
-						partition.setPartitionMax(Integer.valueOf(readValue(partitionEle, "PartitionMax")));
-						partition.setPartitionMin(Integer.valueOf(readValue(partitionEle, "PartitionMin")));
-						haPolicy.getPartitions().add(partition);
-					}
-				}
-				
-				policy.setHAPolicy(haPolicy);
-				
-			} else{
-				throw new DeploymentException("File is not a valid autoscale policy");
-			}
-
-		} catch (Exception e){
-			throw new InvalidPolicyException("Malformed policy file",e);
-		} finally{
-			try {
-				if(fStream!=null){
-					fStream.close();
-				} 
-			} catch (IOException e) {
-				log.debug("Unable to close the input stream", e);
-			}
-		}
-		return policy;
-	}
-	
-	private String readValueAttr(OMElement ele, String qName){
-		OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
-		String value = valueContainer.getAttributeValue(new QName("value"));
-		return value;
-	}
-	
-	private String readValue(OMElement ele, String qName){
-		OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
-		String value = valueContainer.getText();
-		return value;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/AutoscalePolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/AutoscalePolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/AutoscalePolicy.java
index 9bf4cf0..22727a4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/AutoscalePolicy.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/AutoscalePolicy.java
@@ -25,7 +25,6 @@ package org.apache.stratos.autoscaler.policy.model;
 public class AutoscalePolicy {
 
 	private LoadThresholds loadThresholds;
-	private HAPolicy haPolicy;
 	private String id;
 	private String displayName;
 	private String description;
@@ -55,30 +54,6 @@ public class AutoscalePolicy {
     }
 
     /**
-     * Gets the value of the haPolicy property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link HAPolicy }
-     *     
-     */
-    public HAPolicy getHAPolicy() {
-        return haPolicy;
-    }
-
-    /**
-     * Sets the value of the haPolicy property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link HAPolicy }
-     *     
-     */
-    public void setHAPolicy(HAPolicy value) {
-        this.haPolicy = value;
-    }
-
-    /**
      * Gets the value of the id property.
      * 
      * @return

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/DeploymentPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/DeploymentPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/DeploymentPolicy.java
new file mode 100644
index 0000000..50f9006
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/DeploymentPolicy.java
@@ -0,0 +1,67 @@
+/*
+ * 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.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The model class for Deployment-Policy definition.
+ */
+public class DeploymentPolicy {
+
+	private String id;
+	private List<PartitionGroup> partitionGroups;
+
+    /**
+     * 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;
+    }
+
+    /**
+     * Gets the value of the partition-groups.
+     */
+    public List<PartitionGroup> getPartitionGroups() {
+        if (partitionGroups == null) {
+            partitionGroups = new ArrayList<PartitionGroup>();
+        }
+        return this.partitionGroups;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/HAPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/HAPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/HAPolicy.java
deleted file mode 100644
index 4e21687..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/HAPolicy.java
+++ /dev/null
@@ -1,67 +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.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * The model class for HAPolicy definition.
- */
-public class HAPolicy {
-
-	private String partitionAlgo;
-	private List<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;
-    }
-
-    /**
-     * Gets the value of the partitions.
-     */
-    public List<Partition> getPartitions() {
-        if (partitions == null) {
-            partitions = new ArrayList<Partition>();
-        }
-        return this.partitions;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/PartitionGroup.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/PartitionGroup.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/PartitionGroup.java
new file mode 100644
index 0000000..2db5e67
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/model/PartitionGroup.java
@@ -0,0 +1,81 @@
+/*
+ * 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.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The model class for PartitionGroup definition.
+ */
+public class PartitionGroup {
+
+    private String id;
+    private String partitionAlgo;
+    private List<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;
+    }
+
+    /**
+     * Gets the value of the partitions.
+     */
+    public List<Partition> getPartitions() {
+        if (partitions == null) {
+            partitions = new ArrayList<Partition>();
+        }
+        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/b0535f26/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 7f4468d..49865e9 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
@@ -23,8 +23,10 @@ import org.apache.stratos.autoscaler.AutoscalerContext;
 import org.apache.stratos.autoscaler.ClusterContext;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
 import org.apache.stratos.autoscaler.policy.model.Partition;
+import org.apache.stratos.autoscaler.policy.model.PartitionGroup;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 
 /**
@@ -47,7 +49,7 @@ public class AutoscalerUtil {
 		if (null == clusterContext) {
 
 			clusterContext = new ClusterContext(cluster.getClusterId(), cluster.getServiceName());
-			AutoscalePolicy policy = PolicyManager.getInstance().getPolicy(cluster.getAutoscalePolicyName());
+			AutoscalePolicy policy = PolicyManager.getInstance().getAutoscalePolicy(cluster.getAutoscalePolicyName());
 
             if(policy!=null){
 
@@ -62,9 +64,15 @@ public class AutoscalerUtil {
                 clusterContext.setRequestsInFlightSecondDerivative(secondDerivative);
                 clusterContext.setAverageRequestsInFlight(averageLimit);
 
-                for (Partition partition : policy.getHAPolicy().getPartitions()) {
-                         clusterContext.addPartitionCount(partition.getId(), 0);
-                 }
+                DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(cluster.getHaPolicyName());
+                if(deploymentPolicy!=null){
+                	for(PartitionGroup group :deploymentPolicy.getPartitionGroups()){
+                		for (Partition partition : group.getPartitions()) {
+                            clusterContext.addPartitionCount(partition.getId(), 0);
+                    }
+                	}
+                }
+                
              }
 
 			context.addClusterContext(clusterContext);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/component.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/component.xml b/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/component.xml
index d383e94..cbab84f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/component.xml
+++ b/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/component.xml
@@ -19,9 +19,14 @@
 <component xmlns="http://products.wso2.org/carbon">
     <deployers>
         <deployer>
-            <directory>policies</directory>
+            <directory>autoscale-policies</directory>
             <extension>xml</extension>
-            <class>org.apache.stratos.autoscaler.policy.deployers.PolicyDeployer</class>
+            <class>org.apache.stratos.autoscaler.policy.deployers.AutoscalerPolicyDeployer</class>
+        </deployer>
+        <deployer>
+            <directory>deployment-policies</directory>
+            <extension>xml</extension>
+            <class>org.apache.stratos.autoscaler.policy.deployers.DeploymentPolicyDeployer</class>
         </deployer>
     </deployers>
 </component>

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/products/autoscaler/modules/distribution/src/main/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/products/autoscaler/modules/distribution/src/main/assembly/bin.xml b/products/autoscaler/modules/distribution/src/main/assembly/bin.xml
index ed08150..04e9898 100644
--- a/products/autoscaler/modules/distribution/src/main/assembly/bin.xml
+++ b/products/autoscaler/modules/distribution/src/main/assembly/bin.xml
@@ -172,13 +172,23 @@
         </fileSet>
 
 	<fileSet>
-	  <directory>src/main/policies</directory>
-	  <outputDirectory>apache-stratos-autoscaler-${pom.version}/repository/deployment/server/policies</outputDirectory>
+	  <directory>src/main/autoscale-policies</directory>
+	  <outputDirectory>apache-stratos-autoscaler-${pom.version}/repository/deployment/server/autoscale-policies</outputDirectory>
 	  <directoryMode>0755</directoryMode>
            <includes>
               <include>*.xml</include>
            </includes>
 	</fileSet>
+
+	<fileSet>
+	  <directory>src/main/deployment-policies</directory>
+	  <outputDirectory>apache-stratos-autoscaler-${pom.version}/repository/deployment/server/deployment-policies</outputDirectory>
+	  <directoryMode>0755</directoryMode>
+           <includes>
+              <include>*.xml</include>
+           </includes>
+	</fileSet>
+
     </fileSets>
 
     <dependencySets>

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/products/autoscaler/modules/distribution/src/main/autoscale-policies/economyPolicy.xml
----------------------------------------------------------------------
diff --git a/products/autoscaler/modules/distribution/src/main/autoscale-policies/economyPolicy.xml b/products/autoscaler/modules/distribution/src/main/autoscale-policies/economyPolicy.xml
new file mode 100644
index 0000000..1a3aad3
--- /dev/null
+++ b/products/autoscaler/modules/distribution/src/main/autoscale-policies/economyPolicy.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<deploymentPolicy id ="economy-deployment">
+	<partitionGroups>
+		<partitionGroup id="group1" >
+			<partitionAlgo>OneAfterAnother</partitionAlgo>
+			<partition id="partition1" >
+				<max>3</max>
+				<min>1</min>
+			</partition>
+			<partition id="partition2" >
+				<max>5</max>
+				<min>1</min>
+			</partition>
+			<partition id="partition3">
+				<max>20</max>
+				<min>1</min>
+			</partition>
+		</partitionGroup>
+		<partitionGroup id="group2" >
+			<partitionAlgo>RoundRobin</partitionAlgo>
+			<partition id="partition4" >
+				<max>3</max>
+				<min>1</min>
+			</partition>
+			<partition id="partition5" >
+				<max>5</max>
+				<min>1</min>
+			</partition>
+			<partition id="partition6">
+				<max>20</max>
+				<min>1</min>
+			</partition>
+		</partitionGroup>
+	</partitionGroups>
+</deploymentPolicy>
+

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/products/autoscaler/modules/distribution/src/main/deployment-policies/economy-deployment.xml
----------------------------------------------------------------------
diff --git a/products/autoscaler/modules/distribution/src/main/deployment-policies/economy-deployment.xml b/products/autoscaler/modules/distribution/src/main/deployment-policies/economy-deployment.xml
new file mode 100644
index 0000000..9a734fa
--- /dev/null
+++ b/products/autoscaler/modules/distribution/src/main/deployment-policies/economy-deployment.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<autoscalePolicy id="economyPolicy">
+	<loadThresholds>
+		<requestsInFlight>
+			<average value="6000" />
+			<gradient value="0" />
+			<secondDerivative value="0" />
+			<scaleDownMarginOfGradient  value="1.0" />
+			<scaleDownMarginOfSecondDerivative value="0.2" />
+		</requestsInFlight>
+		<memoryConsumption>
+			<average value="6000" />
+			<gradient value="0" />
+			<secondDerivative value="0" />
+			<scaleDownMarginOfGradient value="1.0" />
+			<scaleDownMarginOfSecondDerivative value="0.2" />
+		</memoryConsumption>
+		<loadAverage>
+			<average value="6000" />
+			<gradient value="0" />
+			<secondDerivative value="0" />
+			<scaleDownMarginOfGradient value="1.0" />
+			<scaleDownMarginOfSecondDerivative value="0.2" />
+		</loadAverage>
+	</loadThresholds>
+</autoscalePolicy>

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b0535f26/products/autoscaler/modules/distribution/src/main/policies/economyPolicy.xml
----------------------------------------------------------------------
diff --git a/products/autoscaler/modules/distribution/src/main/policies/economyPolicy.xml b/products/autoscaler/modules/distribution/src/main/policies/economyPolicy.xml
deleted file mode 100644
index 2a82964..0000000
--- a/products/autoscaler/modules/distribution/src/main/policies/economyPolicy.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<AutoscalePolicy id="economyPolicy">
-	<LoadThresholds>
-		<RequestsInFlight>
-			<Average value="20" />
-			<Gradient value="1" />
-			<SecondDerivative value="0" />
-			<ScaleDownMarginOfGradient  value="1.0" />
-			<ScaleDownMarginOfSecondDerivative value="0.2" />
-		</RequestsInFlight>
-		<MemoryConsumption>
-			<Average value="20" />
-			<Gradient value="1" />
-			<SecondDerivative value="0" />
-			<ScaleDownMarginOfGradient  value="1.0" />
-			<ScaleDownMarginOfSecondDerivative value="0.2" />
-		</MemoryConsumption>
-		<LoadAverage>
-			<Average value="20" />
-			<Gradient value="1" />
-			<SecondDerivative value="0" />
-			<ScaleDownMarginOfGradient  value="1.0" />
-			<ScaleDownMarginOfSecondDerivative value="0.2" />
-		</LoadAverage>
-	</LoadThresholds>
-	<HAPolicy>
-		<PartitionAlgo>one-after-another</PartitionAlgo>
-		<Partitions>
-			<Partition id="part1">
-				<PartitionMax>3</PartitionMax>
-				<PartitionMin>1</PartitionMin>
-			</Partition>
-		</Partitions>
-	</HAPolicy>
-</AutoscalePolicy>