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 2015/01/08 09:28:36 UTC

stratos git commit: Added basic changes needed for clustering of Autoscaler component

Repository: stratos
Updated Branches:
  refs/heads/master 22127619b -> e54f24203


Added basic changes needed for clustering of Autoscaler component


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

Branch: refs/heads/master
Commit: e54f2420333776dd29ac4b176aea3e2abd5e48aa
Parents: 2212761
Author: Shiro <sh...@wso2.com>
Authored: Thu Jan 8 13:39:12 2015 +0530
Committer: Shiro <sh...@wso2.com>
Committed: Thu Jan 8 13:45:18 2015 +0530

----------------------------------------------------------------------
 .../autoscaler/context/AutoscalerContext.java   |  45 ++++-
 .../internal/AutoscalerServerComponent.java     | 202 ++++++++++++-------
 .../autoscaler/pojo/policy/PolicyManager.java   |  15 +-
 .../autoscaler/util/ServiceReferenceHolder.java |  31 +++
 4 files changed, 216 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e54f2420/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
index 72c7734..5524c2b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
@@ -23,17 +23,29 @@ package org.apache.stratos.autoscaler.context;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
 import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
 /**
  * It holds all cluster monitors which are active in stratos.
  */
 public class AutoscalerContext {
 
+	private static final String AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP = "AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP";
+	private static final String AS_CLUSTER_ID_TO_CLUSTER_MONITOR_MAP = "AS_CLUSTER_ID_TO_CLUSTER_MONITOR_MAP";
+	private static final String AS_APPLICATION_ID_TO_APPLICATION_MONITOR_MAP = "AS_APPLICATION_ID_TO_APPLICATION_MONITOR_MAP";
+	private static final String AS_PENDING_APPLICATION_MONITOR_LIST = "AS_PENDING_APPLICATION_MONITOR_LIST";
+	private boolean clustered;
+	private boolean coordinator;
+	
     private static final AutoscalerContext INSTANCE = new AutoscalerContext();
+    private final transient DistributedObjectProvider distributedObjectProvider;
 
     // Map<ApplicationId, ApplicationContext>
     private Map<String, ApplicationContext> applicationContextMap;
@@ -45,13 +57,22 @@ public class AutoscalerContext {
     private List<String> pendingApplicationMonitors;
 
     private AutoscalerContext() {
-        applicationContextMap = readApplicationContextsFromRegistry();
+    	// Check clustering status
+        AxisConfiguration axisConfiguration = ServiceReferenceHolder.getInstance().getAxisConfiguration();
+        if ((axisConfiguration != null) && (axisConfiguration.getClusteringAgent() != null)) {
+            clustered = true;
+        }
+
+        // Initialize distributed object provider
+        distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
+    	
+    	applicationContextMap = readApplicationContextsFromRegistry();
         if(applicationContextMap == null) {
-            applicationContextMap = new ConcurrentHashMap<String, ApplicationContext>();
+            applicationContextMap = distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP);//new ConcurrentHashMap<String, ApplicationContext>();
         }
-        setClusterMonitors(new HashMap<String, ClusterMonitor>());
-        setApplicationMonitors(new HashMap<String, ApplicationMonitor>());
-        pendingApplicationMonitors = new ArrayList<String>();
+        setClusterMonitors(distributedObjectProvider.getMap(AS_CLUSTER_ID_TO_CLUSTER_MONITOR_MAP));
+        setApplicationMonitors(distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_MONITOR_MAP));
+        pendingApplicationMonitors = distributedObjectProvider.getList(AS_PENDING_APPLICATION_MONITOR_LIST);//new ArrayList<String>();
     }
 
     private Map<String, ApplicationContext> readApplicationContextsFromRegistry() {
@@ -60,7 +81,7 @@ public class AutoscalerContext {
             return null;
         }
 
-        Map<String, ApplicationContext> applicationContextMap = new ConcurrentHashMap<String, ApplicationContext>();
+        Map<String, ApplicationContext> applicationContextMap = distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP);//new ConcurrentHashMap<String, ApplicationContext>();
         for(String resourcePath : resourcePaths) {
             ApplicationContext applicationContext = RegistryManager.getInstance().getApplicationContextByResourcePath(resourcePath);
             applicationContextMap.put(applicationContext.getApplicationId(), applicationContext);
@@ -158,4 +179,16 @@ public class AutoscalerContext {
         applicationContextMap.put(applicationContext.getApplicationId(), applicationContext);
         RegistryManager.getInstance().persistApplicationContext(applicationContext);
     }
+    
+    public boolean isClustered() {
+        return clustered;
+    }
+
+    public boolean isCoordinator() {
+        return coordinator;
+    }
+
+    public void setCoordinator(boolean coordinator) {
+        this.coordinator = coordinator;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e54f2420/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 74a43f9..51095c9 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
@@ -22,6 +22,7 @@ import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.applications.ApplicationSynchronizerTaskScheduler;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.event.receiver.health.AutoscalerHealthStatEventReceiver;
 import org.apache.stratos.autoscaler.event.receiver.topology.AutoscalerTopologyEventReceiver;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
@@ -34,12 +35,16 @@ import org.apache.stratos.autoscaler.status.processor.group.GroupStatusProcessor
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.cloud.controller.stub.domain.Partition;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 import org.apache.stratos.common.threading.StratosThreadPool;
 import org.osgi.service.component.ComponentContext;
 import org.wso2.carbon.ntask.core.service.TaskService;
 import org.wso2.carbon.registry.api.RegistryException;
 import org.wso2.carbon.registry.core.service.RegistryService;
 import org.wso2.carbon.utils.CarbonUtils;
+import org.wso2.carbon.utils.ConfigurationContextService;
+
+import com.hazelcast.core.HazelcastInstance;
 
 import java.io.File;
 import java.util.Iterator;
@@ -47,16 +52,17 @@ import java.util.List;
 import java.util.concurrent.ExecutorService;
 
 /**
- * @scr.component name=org.apache.stratos.autoscaler.internal.AutoscalerServerComponent"
- * immediate="true"
- * @scr.reference name="registry.service"
- * interface=
- * "org.wso2.carbon.registry.core.service.RegistryService"
- * cardinality="1..1" policy="dynamic" bind="setRegistryService"
- * unbind="unsetRegistryService"
+ * @scr.component name=org.apache.stratos.autoscaler.internal.AutoscalerServerComponent" immediate="true"
+ * @scr.reference name="registry.service" interface="org.wso2.carbon.registry.core.service.RegistryService"
+ * 			      cardinality="1..1" policy="dynamic" bind="setRegistryService" unbind="unsetRegistryService"
  * @scr.reference name="ntask.component" interface="org.wso2.carbon.ntask.core.service.TaskService"
- * cardinality="1..1" policy="dynamic" bind="setTaskService"
- * unbind="unsetTaskService"
+ * 				  cardinality="1..1" policy="dynamic" bind="setTaskService" unbind="unsetTaskService"
+ * @scr.reference name="hazelcast.instance.service" interface="com.hazelcast.core.HazelcastInstance"
+ *                cardinality="0..1"policy="dynamic" bind="setHazelcastInstance" unbind="unsetHazelcastInstance"
+ * @scr.reference name="distributedObjectProvider" interface="org.apache.stratos.common.clustering.DistributedObjectProvider"
+ *                cardinality="1..1" policy="dynamic" bind="setDistributedObjectProvider" unbind="unsetDistributedObjectProvider"
+ * @scr.reference name="config.context.service" interface="org.wso2.carbon.utils.ConfigurationContextService"
+ *                cardinality="1..1" policy="dynamic" bind="setConfigurationContextService" unbind="unsetConfigurationContextService"
  */
 
 public class AutoscalerServerComponent {
@@ -67,85 +73,118 @@ public class AutoscalerServerComponent {
 	private static final String COMPONENTS_CONFIG = CarbonUtils.getCarbonConfigDirPath()+ File.separator+"stratos-config.xml";
 	private static final int THREAD_POOL_SIZE = 10;
 	private static final Log log = LogFactory.getLog(AutoscalerServerComponent.class);
+	private static final String AUTOSCALER_COORDINATOR_LOCK = "AUTOSCALER_COORDINATOR_LOCK";
 
 	private AutoscalerTopologyEventReceiver asTopologyReceiver;
 	private AutoscalerHealthStatEventReceiver autoscalerHealthStatEventReceiver;
-
+	private ExecutorService executorService;
 
 	protected void activate(ComponentContext componentContext) throws Exception {
 		try {
-			// Start topology receiver
+			
 			XMLConfiguration conf = ConfUtil.getInstance(COMPONENTS_CONFIG).getConfiguration();
 			int threadPoolSize = conf.getInt(THREAD_POOL_SIZE_KEY, THREAD_POOL_SIZE);
 			String threadIdentifier = conf.getString(THREAD_IDENTIFIER_KEY, DEFAULT_IDENTIFIER);
-			ExecutorService executorService = StratosThreadPool.getExecutorService(threadIdentifier, threadPoolSize);
-			asTopologyReceiver = new AutoscalerTopologyEventReceiver();
-			asTopologyReceiver.setExecutorService(executorService);
-			asTopologyReceiver.execute();
+			executorService = StratosThreadPool.getExecutorService(threadIdentifier, threadPoolSize);
+			
+			if(AutoscalerContext.getInstance().isClustered()) {
+                Thread coordinatorElectorThread = new Thread() {
+                    @Override
+                    public void run() {
+                        ServiceReferenceHolder.getInstance().getHazelcastInstance()
+                                .getLock(AUTOSCALER_COORDINATOR_LOCK).lock();
+
+                        log.info("Elected this member [" + ServiceReferenceHolder.getInstance().getHazelcastInstance()
+                                .getCluster().getLocalMember().getUuid() + "] " +
+                                "as the autoscaler coordinator for the cluster");
+
+                        AutoscalerContext.getInstance().setCoordinator(true);
+                        try {
+                        	executeStartupTasks();
+                        } catch (Throwable e) {
+                			log.error("Error in activating the autoscaler component ", e);
+                        }
+                    }
+                };
+                coordinatorElectorThread.setName("Autoscaler coordinator elector thread");
+                executorService.submit(coordinatorElectorThread);
+            } else {
+            	executeStartupTasks();
+            }
 
-			if (log.isDebugEnabled()) {
-				log.debug("Topology receiver executor service started");
+			if (log.isInfoEnabled()) {
+				log.info("Autoscaler server Component activated");
 			}
+		} catch (Throwable e) {
+			log.error("Error in activating the autoscaler component ", e);
+		}
+	}
+	
+	private void executeStartupTasks() throws Exception{
+		
+		// Start topology receiver
+		asTopologyReceiver = new AutoscalerTopologyEventReceiver();
+		asTopologyReceiver.setExecutorService(executorService);
+		asTopologyReceiver.execute();
+
+		if (log.isDebugEnabled()) {
+			log.debug("Topology receiver executor service started");
+		}
 
-			// Start health stat receiver
-			autoscalerHealthStatEventReceiver = new AutoscalerHealthStatEventReceiver();
-			autoscalerHealthStatEventReceiver.setExecutorService(executorService);
-			autoscalerHealthStatEventReceiver.execute();
-			if (log.isDebugEnabled()) {
-				log.debug("Health statistics receiver thread started");
-			}
+		// Start health stat receiver
+		autoscalerHealthStatEventReceiver = new AutoscalerHealthStatEventReceiver();
+		autoscalerHealthStatEventReceiver.setExecutorService(executorService);
+		autoscalerHealthStatEventReceiver.execute();
+		if (log.isDebugEnabled()) {
+			log.debug("Health statistics receiver thread started");
+		}
 
-            // Adding the registry stored partitions to the information model
-            List<Partition> partitions = RegistryManager.getInstance().retrievePartitions();
-            Iterator<Partition> partitionIterator = partitions.iterator();
-            while (partitionIterator.hasNext()) {
-                Partition partition = partitionIterator.next();
-//                PartitionManager.getInstance().addPartitionToInformationModel(partition);
-            }
+        // Adding the registry stored partitions to the information model
+        List<Partition> partitions = RegistryManager.getInstance().retrievePartitions();
+        Iterator<Partition> partitionIterator = partitions.iterator();
+        while (partitionIterator.hasNext()) {
+            Partition partition = partitionIterator.next();
+//            PartitionManager.getInstance().addPartitionToInformationModel(partition);
+        }
 
-            // Adding the network partitions stored in registry to the information model
-//            List<NetworkPartitionLbHolder> nwPartitionHolders = RegistryManager.getInstance().retrieveNetworkPartitionLbHolders();
-//            Iterator<NetworkPartitionLbHolder> nwPartitionIterator = nwPartitionHolders.iterator();
-//            while (nwPartitionIterator.hasNext()) {
-//                NetworkPartitionLbHolder nwPartition = nwPartitionIterator.next();
-//                PartitionManager.getInstance().addNetworkPartitionLbHolder(nwPartition);
-//            }
-
-            List<AutoscalePolicy> asPolicies = RegistryManager.getInstance().retrieveASPolicies();
-            Iterator<AutoscalePolicy> asPolicyIterator = asPolicies.iterator();
-            while (asPolicyIterator.hasNext()) {
-                AutoscalePolicy asPolicy = asPolicyIterator.next();
-                PolicyManager.getInstance().addASPolicyToInformationModel(asPolicy);
-            }
+        // Adding the network partitions stored in registry to the information model
+//        List<NetworkPartitionLbHolder> nwPartitionHolders = RegistryManager.getInstance().retrieveNetworkPartitionLbHolders();
+//        Iterator<NetworkPartitionLbHolder> nwPartitionIterator = nwPartitionHolders.iterator();
+//        while (nwPartitionIterator.hasNext()) {
+//            NetworkPartitionLbHolder nwPartition = nwPartitionIterator.next();
+//            PartitionManager.getInstance().addNetworkPartitionLbHolder(nwPartition);
+//        }
+
+        // Add AS policies to information model
+        List<AutoscalePolicy> asPolicies = RegistryManager.getInstance().retrieveASPolicies();
+        Iterator<AutoscalePolicy> asPolicyIterator = asPolicies.iterator();
+        while (asPolicyIterator.hasNext()) {
+            AutoscalePolicy asPolicy = asPolicyIterator.next();
+            PolicyManager.getInstance().addASPolicyToInformationModel(asPolicy);
+        }
 
-			List<DeploymentPolicy> depPolicies = RegistryManager.getInstance().retrieveDeploymentPolicies();
-			Iterator<DeploymentPolicy> depPolicyIterator = depPolicies.iterator();
-			while (depPolicyIterator.hasNext()) {
-				DeploymentPolicy depPolicy = depPolicyIterator.next();
-				PolicyManager.getInstance().addDeploymentPolicy(depPolicy);
-			}
+        // Add Deployment policies to information model
+		List<DeploymentPolicy> depPolicies = RegistryManager.getInstance().retrieveDeploymentPolicies();
+		Iterator<DeploymentPolicy> depPolicyIterator = depPolicies.iterator();
+		while (depPolicyIterator.hasNext()) {
+			DeploymentPolicy depPolicy = depPolicyIterator.next();
+			PolicyManager.getInstance().addDeploymentPolicy(depPolicy);
+		}
 
-			//starting the processor chain
-			ClusterStatusProcessorChain clusterStatusProcessorChain = new ClusterStatusProcessorChain();
-			ServiceReferenceHolder.getInstance().setClusterStatusProcessorChain(clusterStatusProcessorChain);
+		//starting the processor chain
+		ClusterStatusProcessorChain clusterStatusProcessorChain = new ClusterStatusProcessorChain();
+		ServiceReferenceHolder.getInstance().setClusterStatusProcessorChain(clusterStatusProcessorChain);
 
-			GroupStatusProcessorChain groupStatusProcessorChain = new GroupStatusProcessorChain();
-			ServiceReferenceHolder.getInstance().setGroupStatusProcessorChain(groupStatusProcessorChain);
+		GroupStatusProcessorChain groupStatusProcessorChain = new GroupStatusProcessorChain();
+		ServiceReferenceHolder.getInstance().setGroupStatusProcessorChain(groupStatusProcessorChain);
 
-			if (log.isInfoEnabled()) {
-				log.info("Scheduling tasks to publish applications");
-			}
-
-			ApplicationSynchronizerTaskScheduler
-					.schedule(ServiceReferenceHolder.getInstance()
-					                                .getTaskService());
-
-			if (log.isInfoEnabled()) {
-				log.info("Autoscaler server Component activated");
-			}
-		} catch (Throwable e) {
-			log.error("Error in activating the autoscaler component ", e);
+		if (log.isInfoEnabled()) {
+			log.info("Scheduling tasks to publish applications");
 		}
+
+		ApplicationSynchronizerTaskScheduler
+				.schedule(ServiceReferenceHolder.getInstance()
+				                                .getTaskService());
 	}
 
     protected void deactivate(ComponentContext context) {
@@ -186,5 +225,30 @@ public class AutoscalerServerComponent {
         }
         ServiceReferenceHolder.getInstance().setTaskService(null);
     }
+    
+    protected void setConfigurationContextService(ConfigurationContextService cfgCtxService) {
+        ServiceReferenceHolder.getInstance().setAxisConfiguration(
+                cfgCtxService.getServerConfigContext().getAxisConfiguration());
+    }
+
+    protected void unsetConfigurationContextService(ConfigurationContextService cfgCtxService) {
+        ServiceReferenceHolder.getInstance().setAxisConfiguration(null);
+    }
+
+    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+    }
+
+    public void unsetHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
+    }
+
+    protected void setDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedObjectProvider(distributedObjectProvider);
+    }
+
+    protected void unsetDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedObjectProvider(null);
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/e54f2420/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
index cce6e8c..96a9d28 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
@@ -31,6 +31,8 @@ import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
 //import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 
 /**
  * Manager class for the purpose of managing Autoscale/Deployment policy definitions.
@@ -38,10 +40,15 @@ import org.apache.stratos.autoscaler.registry.RegistryManager;
 public class PolicyManager {
 
     private static final Log log = LogFactory.getLog(PolicyManager.class);
+    
+    private static final String AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP = "AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP";
+    private static final String DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP = "DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP";
+    
+    private final transient DistributedObjectProvider distributedObjectProvider;
 
-    private static Map<String, AutoscalePolicy> autoscalePolicyListMap = new HashMap<String, AutoscalePolicy>();
+    private static Map<String, AutoscalePolicy> autoscalePolicyListMap; //= new HashMap<String, AutoscalePolicy>();
 
-    private static Map<String, DeploymentPolicy> deploymentPolicyListMap = new HashMap<String, DeploymentPolicy>();
+    private static Map<String, DeploymentPolicy> deploymentPolicyListMap; //= new HashMap<String, DeploymentPolicy>();
     
     /* An instance of a PolicyManager is created when the class is loaded. 
      * Since the class is loaded only once, it is guaranteed that an object of 
@@ -57,6 +64,10 @@ public class PolicyManager {
      }
     
     private PolicyManager() {
+    	// Initialize distributed object provider
+        distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
+        autoscalePolicyListMap = distributedObjectProvider.getMap(AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP);
+        deploymentPolicyListMap = distributedObjectProvider.getMap(DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP);
     }
 
     // Add the policy to information model and persist.

http://git-wip-us.apache.org/repos/asf/stratos/blob/e54f2420/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
index c3ce219..9930300 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
@@ -21,12 +21,16 @@ package org.apache.stratos.autoscaler.util;
 */
 
 
+import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusProcessorChain;
 import org.apache.stratos.autoscaler.status.processor.group.GroupStatusProcessorChain;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 import org.wso2.carbon.ntask.core.service.TaskService;
 import org.wso2.carbon.registry.core.Registry;
 import org.wso2.carbon.registry.core.session.UserRegistry;
 
+import com.hazelcast.core.HazelcastInstance;
+
 public class ServiceReferenceHolder {
 	
 	private static ServiceReferenceHolder instance;
@@ -34,6 +38,9 @@ public class ServiceReferenceHolder {
     private TaskService taskService;
     private ClusterStatusProcessorChain clusterStatusProcessorChain;
     private GroupStatusProcessorChain groupStatusProcessorChain;
+    private AxisConfiguration axisConfiguration;
+    private DistributedObjectProvider distributedObjectProvider;
+    private HazelcastInstance hazelcastInstance;
 
 	private ServiceReferenceHolder() {
 	}
@@ -44,6 +51,30 @@ public class ServiceReferenceHolder {
 	    }
 	        return instance;
 	}
+	
+	public void setAxisConfiguration(AxisConfiguration axisConfiguration) {
+        this.axisConfiguration = axisConfiguration;
+    }
+    
+    public AxisConfiguration getAxisConfiguration() {
+        return axisConfiguration;
+    }
+    
+    public void setDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        this.distributedObjectProvider = distributedObjectProvider;
+    }
+
+    public DistributedObjectProvider getDistributedObjectProvider() {
+        return distributedObjectProvider;
+    }
+
+    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        this.hazelcastInstance = hazelcastInstance;
+    }
+
+    public HazelcastInstance getHazelcastInstance() {
+        return hazelcastInstance;
+    }
 	 
 	public void setRegistry(UserRegistry governanceSystemRegistry) {
 		registry = governanceSystemRegistry;