You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2013/12/11 05:21:57 UTC

[3/9] git commit: Retreive partitions/policies from registry at startup AS refacter, etc

Retreive partitions/policies from registry at startup
AS refacter, etc


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

Branch: refs/heads/master
Commit: 13ca853af2c686b8a9bffc6a7ce9d70713f4c445
Parents: 976e555
Author: Udara Liyanage <ud...@wso2.com>
Authored: Tue Dec 10 10:29:10 2013 -0500
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Tue Dec 10 10:29:10 2013 -0500

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |  2 +-
 .../internal/AutoscalerServerComponent.java     | 85 ++++++++++++++++-
 .../autoscaler/partition/PartitionManager.java  | 26 ++----
 .../partition/deployers/PartitionDeployer.java  |  2 +-
 .../autoscaler/policy/PolicyManager.java        | 78 +++-------------
 .../deployers/AutoscalerPolicyDeployer.java     |  7 +-
 .../deployers/DeploymentPolicyDeployer.java     |  6 +-
 .../autoscaler/registry/RegistryManager.java    | 21 ++++-
 .../stratos/autoscaler/util/AutoscalerUtil.java |  3 -
 .../stratos/autoscaler/util/Deserializer.java   | 96 ++++++++++++++++++++
 10 files changed, 231 insertions(+), 95 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 584a724..ca47d52 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -70,7 +70,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface{
 
 	@Override
 	public boolean addPartition(Partition partition) {
-        return PartitionManager.getInstance().addPartition(partition);
+        return PartitionManager.getInstance().deployNewPartitoion(partition);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
index 2d05f4e..40cd83a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
@@ -18,15 +18,27 @@
  */
 package org.apache.stratos.autoscaler.internal;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.commons.collections.IterableMap;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.message.receiver.health.HealthEventMessageDelegator;
 import org.apache.stratos.autoscaler.message.receiver.health.HealthEventMessageReceiver;
+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.registry.RegistryManager;
 import org.apache.stratos.autoscaler.rule.ExecutorTaskScheduler;
 import org.apache.stratos.autoscaler.topology.AutoscalerTopologyReceiver;
+import org.apache.stratos.autoscaler.util.AutoScalerConstants;
+import org.apache.stratos.autoscaler.util.Deserializer;
 import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.messaging.broker.subscribe.TopicSubscriber;
 import org.apache.stratos.messaging.util.Constants;
+import org.drools.lang.DRLExpressions.type_return;
 import org.osgi.service.component.ComponentContext;
 import org.wso2.carbon.registry.api.RegistryException;
 import org.wso2.carbon.registry.core.service.RegistryService;
@@ -91,7 +103,23 @@ public class AutoscalerServerComponent {
         if(log.isDebugEnabled()) {
             log.debug("Rules executor thread started");
         }
-
+        
+        // Adding the registry stored partitions to the information model.
+        ArrayList<Partition> partitions = this.retreivePartitions();
+        Iterator<Partition> it = partitions.iterator();
+        while(it.hasNext()){
+        	Partition par = it.next();
+        	PartitionManager.getInstance().addPartitionToInformationModel(par);
+        }
+        
+        // Adding the registry stored AS policies to the information model.
+        ArrayList<AutoscalePolicy> asPolicies = this.retreiveASPolicies();
+        Iterator<AutoscalePolicy> asItr = asPolicies.iterator();
+        while(asItr.hasNext()){
+        	AutoscalePolicy asPolicy = asItr.next();
+        	PolicyManager.getInstance().addASPolicyToInformationModel(asPolicy);        	
+        }        
+        
         if(log.isInfoEnabled()) {
             log.info("Autoscaler Server Component activated");
         }
@@ -116,4 +144,59 @@ public class AutoscalerServerComponent {
         }
         ServiceReferenceHolder.getInstance().setRegistry(null);
 	}
+	
+	private ArrayList<Partition> retreivePartitions(){
+		ArrayList<Partition> partitionList = new ArrayList<Partition>();
+		 String [] partitionsResourceList = (String [])RegistryManager.getInstance().retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.PARTITION_RESOURCE);
+		 
+	        for(String resourcePath : partitionsResourceList){
+	        	 Object partition = RegistryManager.getInstance().retrieve(resourcePath);
+	        			 
+	        	 if (partition != null) {
+	                 try {
+	                	 
+	                     Object dataObj = Deserializer
+	                             .deserializeFromByteArray((byte[]) partition);
+	                     if(dataObj instanceof Partition) {
+	                         partitionList.add( (Partition) dataObj);
+	                     } else {
+	                         return null;
+	                     }
+	                 } catch (Exception e) {
+	                   String msg = "Unable to retrieve data from Registry. Hence, any historical data will not get reflected.";
+	                   log.warn(msg, e);
+	               }
+	             }	        		        	
+	        }
+	        return partitionList;	        
+	}
+	
+	private ArrayList<AutoscalePolicy> retreiveASPolicies(){
+		ArrayList<AutoscalePolicy> asPolicyList = new ArrayList<AutoscalePolicy>();
+		 String [] partitionsResourceList = (String [])RegistryManager.getInstance().retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.AS_POLICY_RESOURCE);
+		 
+	        for(String resourcePath : partitionsResourceList){
+	        	 Object asPolicy = RegistryManager.getInstance().retrieve(resourcePath);
+	        			 
+	        	 if (asPolicy != null) {
+	                 try {
+	                	 
+	                     Object dataObj = Deserializer
+	                             .deserializeFromByteArray((byte[]) asPolicy);
+	                     if(dataObj instanceof AutoscalePolicy) {
+	                    	 asPolicyList.add( (AutoscalePolicy) dataObj);
+	                     } else {
+	                         return null;
+	                     }
+	                 } catch (Exception e) {
+	                   String msg = "Unable to retrieve data from Registry. Hence, any historical data will not get reflected.";
+	                   log.warn(msg, e);
+	               }
+	             }	        		        	
+	        }
+	        return asPolicyList;	        
+	}
+	
+	
+	
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
index 51a10e1..5ace9d5 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
@@ -60,7 +60,10 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 		return partitionListMap.containsKey(partitionId);
 	}
 	
-	public boolean addPartition( Partition partition) throws AutoScalerException{
+	/*
+	 * Deploy a new partition to Auto Scaler.
+	 */
+	public boolean deployNewPartitoion( Partition partition) throws AutoScalerException{
 		String partitionId = partition.getId();
 		if(this.partitionExist(partition.getId()))
 			throw new AutoScalerException("A parition with the ID " +  partitionId + " already exist.");
@@ -83,6 +86,10 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 		return true;
 	}
 	
+	public void addPartitionToInformationModel(Partition partition) {
+		partitionListMap.put(partition.getId(), partition);
+	}
+	
 	
 	
 	public Partition getPartitionById(String partitionId){
@@ -98,22 +105,7 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 		
 	}
 	
-	public boolean validatePartition(Partition partition) throws PartitionValidationException{		
+	public boolean validatePartition(Partition partition) throws PartitionValidationException{				
 		return CloudControllerClient.getInstance().validatePartition(partition);
 	}
-
-	public void updatePartition(Partition newPartition,Partition oldPartition){
-		if(!oldPartition.getId().equals(newPartition.getId()))
-			throw new AutoScalerException("Can not update.Id s of the two partitions did not match.");
-		
-		oldPartition=newPartition;
-		//overwrite the registry resource.
-		try {
-			RegistryManager.getInstance().persist(
-					newPartition, this.partitionResourcePath + newPartition.getId());
-		} catch (RegistryException e) {
-			throw new AutoScalerException(e);
-		}
-	}
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/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 840f227..216f5d6 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
@@ -84,7 +84,7 @@ public class PartitionDeployer extends AbstractDeployer {
             while (it.hasNext()) {
                 Partition partition = it.next();
                 try {
-                    PartitionManager.getInstance().addPartition(partition);                  
+                    PartitionManager.getInstance().deployNewPartitoion(partition);                  
                 } catch (Exception e) {
                     String msg =
                                  "Invalid partition: " + partition.getId() + " in file: " +

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/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 65d7e59..d8a82c9 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
@@ -47,10 +47,8 @@ public class PolicyManager {
 	private static final String asResourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE+ AutoScalerConstants.AS_POLICY_RESOURCE + "/";
 	
 	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;
 	 
@@ -70,21 +68,19 @@ public class PolicyManager {
      * @param policy
      * @throws InvalidPolicyException
      */
-	public void addAutoscalePolicy(File policyFile,AutoscalePolicy policy) throws InvalidPolicyException {
-		if(autoscalePolicyfileNameMap.containsKey(policyFile)){
-			removeAutoscalePolicy(autoscalePolicyfileNameMap.get(policyFile));
-			autoscalePolicyfileNameMap.remove(policyFile);
-		} else{
-			autoscalePolicyfileNameMap.put(policyFile, policy.getId());
-		}
-		if (!autoscalePolicyListMap.containsKey(policy.getId())) {
+	public void deployAutoscalePolicy(AutoscalePolicy policy) throws InvalidPolicyException {			
+		this.persitASPolicy(asResourcePath+policy.getId(), policy);
+		this.addASPolicyToInformationModel(policy);
+	}
+	
+	public void addASPolicyToInformationModel(AutoscalePolicy asPolicy) throws InvalidPolicyException{
+		if (!autoscalePolicyListMap.containsKey(asPolicy.getId())) {
 			if(log.isDebugEnabled()){
-				log.debug("Adding policy :" + policy.getId());
-			}
-			autoscalePolicyListMap.put(policy.getId(), policy);
-			this.persitASPolicy(asResourcePath+policy.getId(), policy);
+				log.debug("Adding policy :" + asPolicy.getId());
+			}			
+			autoscalePolicyListMap.put(asPolicy.getId(), asPolicy);
 		} else {
-			throw new InvalidPolicyException("Specified policy [" + policy.getId()
+			throw new InvalidPolicyException("Specified policy [" + asPolicy.getId()
 					+ "] already exists");
 		}
 	}
@@ -96,15 +92,6 @@ public class PolicyManager {
 			throw new AutoScalerException(e);
 		}
 	}
-
-	/**
-	 * Appends the specified policy
-	 * @param policy
-	 * @throws InvalidPolicyException
-	 */
-	public void addAutoscalePolicy(AutoscalePolicy policy) throws InvalidPolicyException {
-		addAutoscalePolicy(new File(policy.getId().concat(".xml")), policy);
-	}
 	
 	/**
 	 * Removes the specified policy
@@ -123,18 +110,6 @@ public class PolicyManager {
 	}
 	
 	/**
-	 * Removes the specified policy
-	 * @param policyFile
-	 * @throws InvalidPolicyException
-	 */
-	public void removeAutoscalePolicy(File policyFile) throws InvalidPolicyException {
-		if(autoscalePolicyfileNameMap.containsKey(policyFile)){
-			removeAutoscalePolicy(autoscalePolicyfileNameMap.get(policyFile));
-			autoscalePolicyfileNameMap.remove(policyFile);
-		} 
-	}
-	
-	/**
 	 * Returns a List of the Autoscale policies contained in this manager.
 	 * @return
 	 */
@@ -157,13 +132,7 @@ public class PolicyManager {
      * @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());
-		}
+	public void addDeploymentPolicy(DeploymentPolicy policy) throws InvalidPolicyException {
 		if (!deploymentPolicyListMap.containsKey(policy.getId())) {
 			if(log.isDebugEnabled()){
 				log.debug("Adding policy :" + policy.getId());
@@ -174,16 +143,7 @@ public class PolicyManager {
 					+ "] 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
@@ -201,18 +161,6 @@ public class PolicyManager {
 	}
 	
 	/**
-	 * 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
 	 */

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/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 141e95b..861dab8 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
@@ -78,7 +78,7 @@ public class AutoscalerPolicyDeployer extends AbstractDeployer {
 			AutoscalerPolicyReader reader = new AutoscalerPolicyReader(policyFile);
 			
 			AutoscalePolicy policy = reader.read();
-			PolicyManager.getInstance().addAutoscalePolicy(policyFile,policy);
+			PolicyManager.getInstance().deployAutoscalePolicy(policy);
 
 			log.info("Successfully deployed the policy specified at "
 					+ deploymentFileData.getAbsolutePath());
@@ -95,7 +95,8 @@ public class AutoscalerPolicyDeployer extends AbstractDeployer {
 	
 	@Override
 	public void undeploy(String fileName) throws DeploymentException {
-		File policyFile = new File(fileName);
+		/*
+		 
 		String policyName = policyFile.getName().replaceAll("." + fileExt + "$", "");
 		try {
 			PolicyManager.getInstance().removeAutoscalePolicy(policyFile);
@@ -104,7 +105,7 @@ public class AutoscalerPolicyDeployer extends AbstractDeployer {
 			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/13ca853a/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 d56c4c0..0d1ac36 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
@@ -28,7 +28,6 @@ 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.deployment.policy.DeploymentPolicy;
-import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
 
 /**
@@ -78,7 +77,7 @@ public class DeploymentPolicyDeployer extends AbstractDeployer {
 			DeploymentPolicyReader reader = new DeploymentPolicyReader(policyFile);
 			
 			DeploymentPolicy policy = reader.read();
-			PolicyManager.getInstance().addDeploymentPolicy(policyFile,policy);
+			PolicyManager.getInstance().addDeploymentPolicy(policy);
 
 			log.info("Successfully deployed the policy specified at "
 					+ deploymentFileData.getAbsolutePath());
@@ -95,6 +94,7 @@ public class DeploymentPolicyDeployer extends AbstractDeployer {
 	
 	@Override
 	public void undeploy(String fileName) throws DeploymentException {
+		/*
 		File policyFile = new File(fileName);
 		String policyName = policyFile.getName().replaceAll("." + fileExt + "$", "");
 		try {
@@ -104,7 +104,7 @@ public class DeploymentPolicyDeployer extends AbstractDeployer {
 			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/13ca853a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
index 791e4da..b5ce6be 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
@@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory;
 import org.wso2.carbon.registry.core.Registry;
 import org.wso2.carbon.registry.core.Resource;
 import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
@@ -73,11 +74,29 @@ public class RegistryManager {
             }
         
         } catch (Exception e) {
-            String msg = "Failed to persist the cloud controller data in registry.";
+            String msg = "Failed to persist the data in registry.";
             registryService.rollbackTransaction();
             log.error(msg, e);
             throw new AutoScalerException(msg, e);
 
         }
     }
+    
+    public Object retrieve(String resourcePath) {
+
+        try {
+            Resource resource = registryService.get(resourcePath);
+           
+            return resource.getContent();
+
+        } catch (ResourceNotFoundException ignore) {
+            // this means, we've never persisted info in registry
+            return null;
+        } catch (RegistryException e) {
+            String msg = "Failed to retrieve data from registry.";
+            log.error(msg, e);
+            throw new AutoScalerException(msg, e);
+        }
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/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 4428336..28527f2 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
@@ -163,9 +163,6 @@ public class AutoscalerUtil {
         if (!destPartition.isPropertiesSpecified()) {
             destPartition.setProperties(srcPartition.getProperties());
         }
-        
-        // update the partitions with the extra properties in the deployment policy.
-		PartitionManager.getInstance().updatePartition(destPartition, srcPartition);
     }
 
     public static Properties getProperties(final OMElement elt) {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/13ca853a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/Deserializer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/Deserializer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/Deserializer.java
new file mode 100644
index 0000000..5c97143
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/Deserializer.java
@@ -0,0 +1,96 @@
+/*
+ * 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.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class Deserializer {
+    
+    private static final Log log = LogFactory.getLog(Deserializer.class);
+
+    /**
+     * We deserialize only if the path to the serialized object file is exists.
+     * @param filePath path to the serialized object file
+     * @return the object obtained after deserialization or null if file isn't valid.
+     * @throws Exception
+     */
+    public static Object deserialize(String filePath) throws Exception {
+
+        ObjectInputStream objIn = null; 
+        Object obj = null;
+        
+        if(!new File(filePath).isFile()){
+            return obj;
+        }
+        
+        try {
+
+            objIn = new ObjectInputStream(new FileInputStream(filePath));
+            obj = objIn.readObject();
+
+        } catch (IOException e) {
+            log.error("Failed to deserialize the file at "+filePath , e);
+            throw e;
+            
+        } catch (ClassNotFoundException e) {
+            log.error("Failed to deserialize the file at "+filePath , e);
+            throw e;
+            
+        } finally {
+            if (objIn != null) {
+                objIn.close();
+            }
+        }
+        
+        return obj;
+
+    }
+    
+    /**
+     * Deserialize a byte array and retrieve the object.
+     * @param bytes bytes to be deserialized
+     * @return the deserialized {@link Object}
+     * @throws Exception if the deserialization is failed.
+     */
+    public static Object deserializeFromByteArray(byte[] bytes) throws Exception {
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
+        ObjectInput in = null;
+        try {
+            in = new ObjectInputStream(bis);
+            Object o = in.readObject();
+
+            return o;
+
+        } finally {
+            bis.close();
+            if (in != null) {
+                in.close();
+            }
+        }
+    }
+
+}