Tenant isolation for policies and partitions in Autoscalar

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

Branch: refs/heads/tenant-isolation-feature
Commit: 8e5cba6fd346fed1bab10fcdb4ab1e1f6ba9fe89
Parents: 4d7491f
Author: Shiro <[email protected]>
Authored: Fri Oct 3 01:44:25 2014 +0530
Committer: Shiro <[email protected]>
Committed: Fri Oct 3 01:44:25 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/KubernetesClusterContext.java    |   2 +-
 .../autoscaler/api/AutoScalerServiceImpl.java   |   5 +-
 .../cloud/controller/CloudControllerClient.java |  39 +-
 .../autoscaler/internal/ASBundleActivater.java  |   2 +
 .../internal/AutoscalerServerComponent.java     |  43 +-
 .../kubernetes/KubernetesManager.java           |  13 +-
 .../AutoscalerHealthStatEventReceiver.java      |   2 +-
 .../AutoscalerTopologyEventReceiver.java        |   4 +-
 .../monitor/ClusterMonitorFactory.java          |   2 +-
 .../monitor/DockerServiceClusterMonitor.java    |   2 +-
 .../autoscaler/partition/PartitionManager.java  | 163 ++++++--
 .../autoscaler/policy/PolicyManager.java        | 389 ++++++++++++++-----
 .../autoscaler/registry/RegistryManager.java    | 157 +++++---
 .../autoscaler/rule/RuleTasksDelegator.java     |   6 +-
 .../autoscaler/util/AutoScalerConstants.java    |   2 +
 .../stratos/autoscaler/util/AutoscalerUtil.java |   2 +-
 .../autoscaler/util/ServiceReferenceHolder.java |  23 +-
 .../src/main/resources/META-INF/services.xml    |   7 +-
 .../impl/CloudControllerServiceImpl.java        |   3 +-
 .../src/main/resources/META-INF/services.xml    |   5 +
 .../common/constants/StratosConstants.java      |   3 +
 .../behaviour/CartridgeMgtBehaviour.java        |   2 +-
 .../manager/client/AutoscalerServiceClient.java |  42 +-
 .../client/CloudControllerServiceClient.java    |  41 +-
 .../cartridge/DefaultCartridgeDeployer.java     |   2 +-
 .../service/ServiceDeploymentManager.java       |  16 +-
 .../multitenant/lb/DefaultLBService.java        |   4 +-
 .../multitenant/lb/ServiceAwareLBService.java   |   4 +-
 .../category/DefaultLoadBalancerCategory.java   |   4 +-
 .../ServiceLevelLoadBalancerCategory.java       |   4 +-
 .../manager/CartridgeSubscriptionManager.java   |   2 +-
 .../utils/CartridgeSubscriptionUtils.java       |   8 +-
 .../utils/ApplicationManagementUtil.java        |   2 +-
 .../rest/endpoint/services/ServiceUtils.java    |   8 +-
 .../modules/distribution/src/assembly/bin.xml   |  14 +
 .../modules/distribution/src/bin/stratos.bat    |   2 +-
 .../modules/distribution/src/bin/stratos.sh     |   2 +
 37 files changed, 774 insertions(+), 257 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
index fa09e8a..03c9664 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
@@ -286,7 +286,7 @@ public class KubernetesClusterContext implements 
Serializable{
 
                                                        // terminate all 
containers of this cluster
                                                        try {
-                                                               
CloudControllerClient.getInstance().terminateAllContainers(clusterId);
+                                                               
CloudControllerClient.getClientWithMutualAuthHeaderSet().terminateAllContainers(clusterId);
                                                                
iterator.remove();
                                                        } catch 
(TerminationException e) {
                                                                
log.error(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/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 ecbe058..275ee38 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
@@ -34,13 +34,14 @@ import 
org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.apache.stratos.common.kubernetes.KubernetesHost;
 import org.apache.stratos.common.kubernetes.KubernetesMaster;
+import org.wso2.carbon.core.AbstractAdmin;
 
 import java.util.ArrayList;
 
 /**
  * Auto Scaler Service API is responsible getting Partitions and Policies.
  */
-public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
+public class AutoScalerServiceImpl extends AbstractAdmin implements 
AutoScalerServiceInterface {
 
     private static final Log log = 
LogFactory.getLog(AutoScalerServiceImpl.class);
     PartitionManager partitionManager = PartitionManager.getInstance();
@@ -65,7 +66,7 @@ public class AutoScalerServiceImpl implements 
AutoScalerServiceInterface {
         for (DeploymentPolicy deploymentPolicy : 
this.getAllDeploymentPolicies()) {
             try {
                 // call CC API
-                
CloudControllerClient.getInstance().validateDeploymentPolicy(cartridgeType, 
deploymentPolicy);
+                
CloudControllerClient.getClientWithMutualAuthHeaderSet().validateDeploymentPolicy(cartridgeType,
 deploymentPolicy);
                 // if this deployment policy is valid for this cartridge, add 
it.
                 validPolicies.add(deploymentPolicy);
             } catch (PartitionValidationException ignoredException) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index 2efca75..eff1158 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -19,6 +19,11 @@
 
 package org.apache.stratos.autoscaler.client.cloud.controller;
 
+import java.rmi.RemoteException;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
@@ -42,7 +47,7 @@ import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.apache.stratos.common.kubernetes.KubernetesMaster;
 
-import java.rmi.RemoteException;
+import org.wso2.carbon.context.CarbonContext;
 
 
 /**
@@ -61,7 +66,7 @@ public class CloudControllerClient {
         private static final CloudControllerClient INSTANCE = new 
CloudControllerClient(); 
     }
     
-    public static CloudControllerClient getInstance() {
+    private static CloudControllerClient getInstance() {
        return InstanceHolder.INSTANCE;
     }
     
@@ -80,6 +85,36 @@ public class CloudControllerClient {
                }
     }
     
+    /**
+     * Sets the mutual auth header with default carbon.
+     */
+    private void setMutualAuthHeader() {
+       String 
userName=CarbonContext.getThreadLocalCarbonContext().getUsername();
+       String 
tenantDomain=CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
+       String fullUserName = userName+"@"+tenantDomain;
+               
+       String mutualAuthHeader = "<tns:UserName xmlns:tns=\""+ 
StratosConstants.MUTUAL_AUTH_URL+ "\">" + fullUserName + "</tns:UserName> ";
+        try {
+               // Need to remove headers since this is a stateless client and 
this is a new request
+            stub._getServiceClient().removeHeaders();
+               
stub._getServiceClient().addHeader(AXIOMUtil.stringToOM(mutualAuthHeader));
+        } catch (XMLStreamException e) {
+            log.error("Failed to set mutualAuth Header to stub:" + stub, e);
+        }
+    }
+    
+    /**
+     * Gets the client with mutual auth header set.
+     *
+     * @return the client with mutual auth header set
+     */
+    public static CloudControllerClient getClientWithMutualAuthHeaderSet() {
+               CloudControllerClient client = 
CloudControllerClient.getInstance();
+               // Set mutual auth header for communication between Autoscalar 
and Cloud controller
+        client.setMutualAuthHeader();
+       return client;
+    }
+    
     /*
      * This will validate the given partitions against the given cartridge 
type.
      */

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/ASBundleActivater.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/ASBundleActivater.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/ASBundleActivater.java
index 2eb6191..662b97d 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/ASBundleActivater.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/ASBundleActivater.java
@@ -26,6 +26,7 @@ import 
org.apache.stratos.autoscaler.commands.PartitionsCommands;
 import org.eclipse.osgi.framework.console.CommandProvider;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
+import org.wso2.carbon.utils.Axis2ConfigurationContextObserver;
 
 public class ASBundleActivater implements BundleActivator{
 
@@ -39,6 +40,7 @@ public class ASBundleActivater implements BundleActivator{
                context.registerService(CommandProvider.class.getName(),new 
ASPolicyCommands(), null);
                context.registerService(CommandProvider.class.getName(),new 
DeploymentPolicyCommands(), null);
                context.registerService(CommandProvider.class.getName(),new 
PartitionsCommands(), null);
+               
context.registerService(Axis2ConfigurationContextObserver.class.getName(),new 
TenantArtifactLoader(), null);
        }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/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 5296635..89c69c1 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
@@ -34,6 +34,7 @@ import 
org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.osgi.service.component.ComponentContext;
+import org.wso2.carbon.context.CarbonContext;
 import org.wso2.carbon.registry.api.RegistryException;
 import org.wso2.carbon.registry.core.service.RegistryService;
 
@@ -84,37 +85,19 @@ public class AutoscalerServerComponent {
             }
 
             // 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);
-            }
+            PartitionManager.getInstance().loadPartitionsToInformationModel();
             
             // 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);
-            }
+            
PartitionManager.getInstance().loadNetworkPartitionsToInformationModel();
             
-            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().addDeploymentPolicyToInformationModel(depPolicy);
-            }
+            // Adding the registry stored autoscaling policies to the 
information model
+            PolicyManager.getInstance().loadASPoliciesToInformationModel();
+            
+            // Adding the registry stored deployment policies to the 
information model
+            
PolicyManager.getInstance().loadDeploymentPoliciesToInformationModel();
 
             // Adding KubernetesGroups stored in registry to the information 
model
-            List<KubernetesGroup> kubernetesGroupList = 
RegistryManager.getInstance().retrieveKubernetesGroups();
+            List<KubernetesGroup> kubernetesGroupList = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).retrieveKubernetesGroups();
             Iterator<KubernetesGroup> kubernetesGroupIterator = 
kubernetesGroupList.iterator();
             while (kubernetesGroupIterator.hasNext()) {
                 KubernetesGroup kubernetesGroup = 
kubernetesGroupIterator.next();
@@ -138,13 +121,7 @@ public class AutoscalerServerComponent {
         if (log.isDebugEnabled()) {
             log.debug("Setting the Registry Service");
         }
-        try {
-            
ServiceReferenceHolder.getInstance().setRegistry(registryService.getGovernanceSystemRegistry());
-        } catch (RegistryException e) {
-            String msg = "Failed when retrieving Governance System Registry.";
-            log.error(msg, e);
-            throw new AutoScalerException(msg, e);
-        }
+        ServiceReferenceHolder.getInstance().setRegistry(registryService);
     }
 
     protected void unsetRegistryService(RegistryService registryService) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
index 1c45da6..98c6515 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
@@ -29,6 +29,7 @@ import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.apache.stratos.common.kubernetes.KubernetesHost;
 import org.apache.stratos.common.kubernetes.KubernetesMaster;
+import org.wso2.carbon.context.CarbonContext;
 
 import java.util.*;
 
@@ -177,7 +178,7 @@ public class KubernetesManager {
             addKubernetesGroupToInformationModel(kubernetesGroup);
 
             // Persist the KubernetesGroup object in registry space
-            
RegistryManager.getInstance().persistKubernetesGroup(kubernetesGroup);
+            
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistKubernetesGroup(kubernetesGroup);
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Kubernetes group deployed 
successfully: [id] %s, [description] %s",
@@ -224,7 +225,7 @@ public class KubernetesManager {
             
kubernetesGroupStored.setKubernetesHosts(kubernetesHostArrayList.toArray(new 
KubernetesHost[kubernetesHostArrayList.size()]));
 
             // Persist the new KubernetesHost wrapped under KubernetesGroup 
object
-            
RegistryManager.getInstance().persistKubernetesGroup(kubernetesGroupStored);
+            
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistKubernetesGroup(kubernetesGroupStored);
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Kubernetes host deployed successfully: 
[id] %s", kubernetesGroupStored.getGroupId()));
@@ -252,7 +253,7 @@ public class KubernetesManager {
             kubernetesGroupStored.setKubernetesMaster(kubernetesMaster);
 
             // Persist the new KubernetesHost wrapped under KubernetesGroup 
object
-            
RegistryManager.getInstance().persistKubernetesGroup(kubernetesGroupStored);
+            
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistKubernetesGroup(kubernetesGroupStored);
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Kubernetes master updated 
successfully: [id] %s", kubernetesMaster.getHostId()));
@@ -284,7 +285,7 @@ public class KubernetesManager {
                     kubernetesGroupStored.getKubernetesHosts()[i] = 
kubernetesHost;
 
                     // Persist the new KubernetesHost wrapped under 
KubernetesGroup object
-                    
RegistryManager.getInstance().persistKubernetesGroup(kubernetesGroupStored);
+                    
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistKubernetesGroup(kubernetesGroupStored);
 
                     if (log.isInfoEnabled()) {
                         log.info(String.format("Kubernetes host updated 
successfully: [id] %s", kubernetesHost.getHostId()));
@@ -316,7 +317,7 @@ public class KubernetesManager {
             kubernetesGroupsMap.remove(kubernetesGroupId);
 
             // Persist the new KubernetesHost wrapped under KubernetesGroup 
object
-            
RegistryManager.getInstance().removeKubernetesGroup(kubernetesGroupStored);
+            
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).removeKubernetesGroup(kubernetesGroupStored);
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Kubernetes group removed successfully: 
[id] %s", kubernetesGroupId));
@@ -362,7 +363,7 @@ public class KubernetesManager {
             kubernetesGroupStored.setKubernetesHosts(kubernetesHostsArray);
 
             // Persist the updated KubernetesGroup object
-            
RegistryManager.getInstance().persistKubernetesGroup(kubernetesGroupStored);
+            
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistKubernetesGroup(kubernetesGroupStored);
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Kubernetes host removed successfully: 
[id] %s", kubernetesHostId));

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatEventReceiver.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatEventReceiver.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatEventReceiver.java
index ccb0f4e..b70a44f 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatEventReceiver.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatEventReceiver.java
@@ -902,7 +902,7 @@ public class AutoscalerHealthStatEventReceiver implements 
Runnable {
                     return;
                 }
                 // terminate the faulty member
-                CloudControllerClient ccClient = 
CloudControllerClient.getInstance();
+                CloudControllerClient ccClient = 
CloudControllerClient.getClientWithMutualAuthHeaderSet();
                 ccClient.terminate(memberId);
 
                 // remove from active member list

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index 4c896fe..b8dd401 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -163,7 +163,7 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
 
 
                         // terminate the shutdown ready member
-                        CloudControllerClient ccClient = 
CloudControllerClient.getInstance();
+                        CloudControllerClient ccClient = 
CloudControllerClient.getClientWithMutualAuthHeaderSet();
                         ccClient.terminate(memberId);
 
                         // remove from active member list
@@ -438,7 +438,7 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
 
 
                        // terminate the shutdown ready member
-                       CloudControllerClient ccClient = 
CloudControllerClient.getInstance();
+                       CloudControllerClient ccClient = 
CloudControllerClient.getClientWithMutualAuthHeaderSet();
                        ccClient.terminate(memberId);
 
                        // remove from active member list

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
index 70198de..24792cc 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
@@ -84,7 +84,7 @@ public class ClusterMonitorFactory {
             throw new PolicyValidationException(msg);
         }
 
-        
CloudControllerClient.getInstance().validateDeploymentPolicy(cluster.getServiceName(),
 deploymentPolicy);
+        
CloudControllerClient.getClientWithMutualAuthHeaderSet().validateDeploymentPolicy(cluster.getServiceName(),
 deploymentPolicy);
 
         VMServiceClusterMonitor clusterMonitor =
                                         new 
VMServiceClusterMonitor(cluster.getClusterId(),

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/DockerServiceClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/DockerServiceClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/DockerServiceClusterMonitor.java
index 402e6b1..789bd5c 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/DockerServiceClusterMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/DockerServiceClusterMonitor.java
@@ -85,7 +85,7 @@ public final class DockerServiceClusterMonitor extends 
ContainerClusterMonitor{
                                while (!success) {
                                        try {
 
-                                               MemberContext memberContext = 
CloudControllerClient.getInstance().createContainer(kubernetesClusterId, 
getClusterId());
+                                               MemberContext memberContext = 
CloudControllerClient.getClientWithMutualAuthHeaderSet().createContainer(kubernetesClusterId,
 getClusterId());
                                                if(null != memberContext) {
                                                        
getKubernetesClusterCtxt().addPendingMember(memberContext);
                                                        success = true;

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/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 644cc22..5b60805 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
@@ -27,12 +27,15 @@ import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClie
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
-
+import org.apache.stratos.common.constants.StratosConstants;
+import org.wso2.carbon.context.CarbonContext;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -43,8 +46,8 @@ public class PartitionManager {
 
     private static final Log log = LogFactory.getLog(PartitionManager.class);
 
-    // Partitions against partitionID
-    private static Map<String, Partition> partitions = new HashMap<String, 
Partition>();
+ // Partitions against partitionID
+       private static Map<Integer, Map<String,Partition>> partitions = new 
HashMap<Integer, Map<String, Partition>>();
 
     /*
      * Key - network partition id
@@ -64,16 +67,35 @@ public class PartitionManager {
         networkPartitionLbHolders = new HashMap<String, 
NetworkPartitionLbHolder>();
     }
 
-
-    public boolean partitionExist(String partitionId) {
-        return partitions.containsKey(partitionId);
+    /**
+     * Checks whether a given tenant's policies have been added to memory 
model.
+     *
+     * @param tenantId the tenant id
+     * @return true, if is tenant policy details in information model
+     */
+    public boolean isTenantPolicyDetailsInInformationModel(int tenantId) {
+       return (partitions.containsKey(tenantId));
     }
 
+    public boolean partitionExist(String partitionId){
+               int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+        if(partitions.containsKey(StratosConstants.PUBLIC_DEFINITION)){
+               if 
((partitions.get(StratosConstants.PUBLIC_DEFINITION)).containsKey(partitionId))
+                       return true;
+        }
+        
+        if(partitions.containsKey(tenantId)){
+               return (partitions.get(tenantId)).containsKey(partitionId);
+        }
+        
+        return false;
+       }
+
     /*
      * Deploy a new partition to Auto Scaler.
      */
     public boolean addNewPartition(Partition partition) throws 
InvalidPartitionException {
-        if (StringUtils.isEmpty(partition.getId())) {
+       if (StringUtils.isEmpty(partition.getId())){
             throw new InvalidPartitionException("Partition id can not be 
empty");
         }
         if (this.partitionExist(partition.getId())) {
@@ -82,9 +104,10 @@ public class PartitionManager {
         if (null == partition.getProvider()) {
             throw new InvalidPartitionException("Mandatory field provider has 
not be set for partition " + partition.getId());
         }
+               
         try {
             validatePartitionViaCloudController(partition);
-            RegistryManager.getInstance().persistPartition(partition);
+            
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistPartition(partition);
             addPartitionToInformationModel(partition);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Partition is deployed successfully: 
[id] %s", partition.getId()));
@@ -95,32 +118,124 @@ public class PartitionManager {
         }
     }
 
-
-    public void addPartitionToInformationModel(Partition partition) {
-        partitions.put(partition.getId(), partition);
+    public void loadPartitionsToInformationModel() {
+       List<Partition> partitions = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).retrievePartitions();
+        Iterator<Partition> partitionIterator = partitions.iterator();
+        while (partitionIterator.hasNext()) {
+            Partition partition = partitionIterator.next();
+            try{
+               addPartitionToInformationModel(partition);
+            }
+            catch(InvalidPolicyException e){
+               // ignore and move on
+            }
+        }
+    }
+    
+    /**
+     * Removes the partitions from information model.
+     *
+     * @param tenantId the tenant id
+     */
+    public void removePartitionsFromInformationModel(int tenantId) {
+       partitions.remove(tenantId);
+    }
+    
+    public void loadNetworkPartitionsToInformationModel(){
+       List<NetworkPartitionLbHolder> nwPartitionHolders = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).retrieveNetworkPartitionLbHolders();
+        Iterator<NetworkPartitionLbHolder> nwPartitionIterator = 
nwPartitionHolders.iterator();
+        while (nwPartitionIterator.hasNext()) {
+            NetworkPartitionLbHolder nwPartition = nwPartitionIterator.next();
+            
PartitionManager.getInstance().addNetworkPartitionLbHolder(nwPartition);
+        }
     }
 
-    public NetworkPartitionLbHolder getNetworkPartitionLbHolder(String 
networkPartitionId) {
-        return this.networkPartitionLbHolders.get(networkPartitionId);
+    /**
+     * Adds the partition to information model.
+     *
+     * @param partition the partition
+     * @throws InvalidPolicyException the invalid policy exception
+     */
+    public void addPartitionToInformationModel(Partition partition) throws 
InvalidPolicyException {
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+               
+        if(partition.getIsPublic()){
+               addPartitionToSpecificContainer(partition, 
StratosConstants.PUBLIC_DEFINITION);
+        }
+        else{
+               addPartitionToSpecificContainer(partition, tenantId);
+        }
+       }
+    
+    /**
+     * Adds the partition to specific container based on the container id 
which is tenant id.
+     *
+     * @param partition the partition
+     * @param tenantId the tenant id
+     * @throws InvalidPolicyException the invalid policy exception
+     */
+    private void addPartitionToSpecificContainer(Partition partition, int 
tenantId) throws InvalidPolicyException {
+       
+       Map<String, Partition> partitionDefinitions;
+       if(!partitions.containsKey(tenantId))
+       {
+               partitionDefinitions = new HashMap<String, Partition>();
+               partitions.put(tenantId, partitionDefinitions);
+       }
+       else {
+               partitionDefinitions = partitions.get(tenantId);
+       }
+       
+        if (!partitionDefinitions.containsKey(partition.getId())) {
+            if (log.isDebugEnabled()) {
+                log.debug("Adding policy :" + partition.getId());
+            }
+            partitionDefinitions.put(partition.getId(), partition);
+        } else {
+               String errMsg = "Specified policy [" + partition.getId() + "] 
already exists";
+               log.error(errMsg);
+            throw new InvalidPolicyException(errMsg);
+        }
     }
 
     public Partition getPartitionById(String partitionId) {
-        if (partitionExist(partitionId))
-            return partitions.get(partitionId);
-        else
-            return null;
-    }
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+               
+       if(partitions.containsKey(StratosConstants.PUBLIC_DEFINITION)){
+               if 
((partitions.get(StratosConstants.PUBLIC_DEFINITION)).containsKey(partitionId))
+                       return 
(partitions.get(StratosConstants.PUBLIC_DEFINITION)).get(partitionId);          
 
+        }
+       
+       if(partitions.containsKey(tenantId)){
+               if ((partitions.get(tenantId)).containsKey(partitionId))
+                       return (partitions.get(tenantId)).get(partitionId);
+        }
+       
+       return null;
+       }
 
     public Partition[] getAllPartitions() {
-        return partitions.values().toArray(new Partition[0]);
-
-    }
+               List<Partition> policyList = new ArrayList<Partition>();
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+               
+       if(partitions.containsKey(tenantId))
+               policyList.addAll(partitions.get(tenantId).values());
+               
+       if(partitions.containsKey(StratosConstants.PUBLIC_DEFINITION))
+               
policyList.addAll(partitions.get(StratosConstants.PUBLIC_DEFINITION).values());
+       
+       return policyList.toArray(new Partition[0]);
+       }
 
     public boolean validatePartitionViaCloudController(Partition partition) 
throws PartitionValidationException {
         if (log.isDebugEnabled()) {
             log.debug(String.format("Validating partition via cloud 
controller: [id] %s", partition.getId()));
         }
-        return 
CloudControllerClient.getInstance().validatePartition(partition);
+        return 
CloudControllerClient.getClientWithMutualAuthHeaderSet().validatePartition(partition);
+    }
+    
+    public NetworkPartitionLbHolder getNetworkPartitionLbHolder(String 
networkPartitionId) {
+        return this.networkPartitionLbHolders.get(networkPartitionId);
     }
 
     public List<NetworkPartitionLbHolder> 
getNetworkPartitionLbHolders(DeploymentPolicy depPolicy) {
@@ -142,7 +257,7 @@ public class PartitionManager {
                 NetworkPartitionLbHolder networkPartitionLbHolder =
                         new NetworkPartitionLbHolder(id);
                 addNetworkPartitionLbHolder(networkPartitionLbHolder);
-                
RegistryManager.getInstance().persistNetworkPartitionIbHolder(networkPartitionLbHolder);
+                
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistNetworkPartitionIbHolder(networkPartitionLbHolder);
             }
 
         }
@@ -156,7 +271,7 @@ public class PartitionManager {
                 // remove from information model
                 this.removeNetworkPartitionLbHolder(netPartCtx);
                 //remove from the registry
-                
RegistryManager.getInstance().removeNetworkPartition(this.getNetworkPartitionLbHolder(id).getNetworkPartitionId());
+                
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).removeNetworkPartition(this.getNetworkPartitionLbHolder(id).getNetworkPartitionId());
             } else {
                 String errMsg = "Network partition context not found for 
policy " + depPolicy;
                 log.error(errMsg);

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/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 3c3521a..95055ca 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
@@ -19,9 +19,13 @@
 
 package org.apache.stratos.autoscaler.policy;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
+import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -33,6 +37,7 @@ import 
org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.wso2.carbon.context.CarbonContext;
 
 /**
  * Manager class for the purpose of managing Autoscale/Deployment policy 
definitions.
@@ -41,9 +46,10 @@ public class PolicyManager {
 
     private static final Log log = LogFactory.getLog(PolicyManager.class);
 
-    private static Map<String, AutoscalePolicy> autoscalePolicyListMap = new 
HashMap<String, AutoscalePolicy>();
+    private static Map<Integer, Map<String, AutoscalePolicy>> 
autoscalePolicyListMap = new HashMap<Integer, Map<String, AutoscalePolicy>>();
 
-    private static Map<String, DeploymentPolicy> deploymentPolicyListMap = new 
HashMap<String, DeploymentPolicy>();
+    private static Map<Integer, Map<String, DeploymentPolicy>> 
deploymentPolicyListMap = new HashMap<Integer, Map<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 
@@ -60,23 +66,204 @@ public class PolicyManager {
     
     private PolicyManager() {
     }
+    
+    /**
+     * Checks and returns whether policies for tenant exists in information 
model
+     *
+     *@param tenantId
+     *@return
+     */
+    public boolean isTenantPolicyDetailsInInformationModel(int tenantId) {
+       return (autoscalePolicyListMap.containsKey(tenantId) && 
deploymentPolicyListMap.containsKey(tenantId));
+    }
+    
+    /**
+     * Loads Autoscaling policies to information model
+     *
+     */
+    public void loadASPoliciesToInformationModel() {
+       List<AutoscalePolicy> asPolicies = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).retrieveASPolicies();
+        Iterator<AutoscalePolicy> asPolicyIterator = asPolicies.iterator();
+        while (asPolicyIterator.hasNext()) {
+            AutoscalePolicy asPolicy = asPolicyIterator.next();
+               try{
+                       addASPolicyToInformationModel(asPolicy);
+               }
+               catch (InvalidPolicyException e){
+                       log.warn("Unable to load Autoscalar policy to 
information Model ["+ asPolicy.getTenantId() + "]");
+               }
+       }
+    }
+    
+    /**
+     * Loads Deployment policies to information model
+     *
+     */
+    public void loadDeploymentPoliciesToInformationModel() {
+       List<DeploymentPolicy> depPolicies = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).retrieveDeploymentPolicies();
+        Iterator<DeploymentPolicy> depPolicyIterator = depPolicies.iterator();
+        while (depPolicyIterator.hasNext()) {
+            DeploymentPolicy depPolicy = depPolicyIterator.next();
+            try{
+                       addDeploymentPolicyToInformationModel(depPolicy);
+            }
+            catch (InvalidPolicyException e){
+               log.warn("Unable to load Deployment policy to information Model 
["+ depPolicy.getTenantId() + "]");
+               }
+        }
+    }
 
-    // Add the policy to information model and persist.
+    /**
+     * Deploys the specified Autoscaling policy - Adds to information model 
and persists
+     *
+     * @param policy
+     * @throws InvalidPolicyException
+     */
     public boolean deployAutoscalePolicy(AutoscalePolicy policy) throws 
InvalidPolicyException {
-        if(StringUtils.isEmpty(policy.getId())){
+       if(StringUtils.isEmpty(policy.getId())){
             throw new AutoScalerException("AutoScaling policy id can not be 
empty");
         }
         this.addASPolicyToInformationModel(policy);
-        RegistryManager.getInstance().persistAutoscalerPolicy(policy);
+                       
+               
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistAutoscalerPolicy(policy);
         if (log.isInfoEnabled()) {
             log.info(String.format("AutoScaling policy is deployed 
successfully: [id] %s", policy.getId()));
         }
         return true;
     }
+    
+    /**
+     * Adds the specified Autoscaling policy to Information model
+     *
+     * @param policy
+     * @throws InvalidPolicyException
+     */
+    public void addASPolicyToInformationModel(AutoscalePolicy asPolicy) throws 
InvalidPolicyException {
+       
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+                 
+       if(asPolicy.getIsPublic()){
+               addASPolicyToSpecificContainer(asPolicy, 
StratosConstants.PUBLIC_DEFINITION);
+        }
+       else{
+               addASPolicyToSpecificContainer(asPolicy, tenantId);
+       }
+    }
+    
+    /**
+     * Adds the as policy to specific container.
+     *
+     * @param asPolicy the as policy
+     * @param tenantId the tenant id
+     * @throws InvalidPolicyException the invalid policy exception
+     */
+    private void addASPolicyToSpecificContainer(AutoscalePolicy asPolicy, int 
tenantId) throws InvalidPolicyException {
+       
+       Map<String, AutoscalePolicy> policies;
+       if(!autoscalePolicyListMap.containsKey(tenantId))
+       {
+               policies = new HashMap<String, AutoscalePolicy>();
+               autoscalePolicyListMap.put(tenantId, policies);
+       }
+       else {
+               policies = autoscalePolicyListMap.get(tenantId);
+       }
+       
+        if (!policies.containsKey(asPolicy.getId())) {
+            if (log.isDebugEnabled()) {
+                log.debug("Adding policy :" + asPolicy.getId());
+            }
+            policies.put(asPolicy.getId(), asPolicy);
+        } else {
+               String errMsg = "Specified policy [" + asPolicy.getId() + "] 
already exists";
+               log.error(errMsg);
+            throw new InvalidPolicyException(errMsg);
+        }
+    }
+    
+    /**
+     * Removes the specified Autoscaling policy
+     *
+     * @param policy
+     * @throws InvalidPolicyException
+     */
+    public void undeployAutoscalePolicy(String policy) throws 
InvalidPolicyException { 
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+       AutoscalePolicy policyToDelete = getAutoscalePolicy(policy);
+       
+       if((policyToDelete == null) || (policyToDelete.getTenantId() != 
tenantId))
+               throw new InvalidPolicyException("No such policy [" + policy + 
"] exists");
+       
+       if (log.isDebugEnabled()) {
+            log.debug("Removing policy :" + policy);
+        }
+        
+       
RegistryManager.getInstance(tenantId).removeAutoscalerPolicy(policyToDelete);
+       if(policyToDelete.getIsPublic()){
+               
(autoscalePolicyListMap.get(StratosConstants.PUBLIC_DEFINITION)).remove(policy);
+       }
+       else {
+               (autoscalePolicyListMap.get(tenantId)).remove(policy);
+       }
+       
+    }
+    
+    /**
+     * Returns an array of the Autoscaling policies contained in this manager.
+     *
+     * @return the autoscale policy list
+     */
+    public AutoscalePolicy[] getAutoscalePolicyList() {        
+       List<AutoscalePolicy> policyList = new ArrayList<AutoscalePolicy>();
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+       
+       if(autoscalePolicyListMap.containsKey(tenantId))
+               
policyList.addAll(autoscalePolicyListMap.get(tenantId).values());
+               
+       
if(autoscalePolicyListMap.containsKey(StratosConstants.PUBLIC_DEFINITION))
+               
policyList.addAll(autoscalePolicyListMap.get(StratosConstants.PUBLIC_DEFINITION).values());
+       
+       return policyList.toArray(new AutoscalePolicy[0]);
+    }
 
-    // Add the deployment policy to information model and persist.
+    /**
+     * Returns the Autoscaling policy to which the specified id is mapped or 
null.
+     *
+     * @param id the id
+     * @return the autoscale policy
+     */
+    public AutoscalePolicy getAutoscalePolicy(String id) {
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+       
if(autoscalePolicyListMap.containsKey(StratosConstants.PUBLIC_DEFINITION)){
+               
if((autoscalePolicyListMap.get(StratosConstants.PUBLIC_DEFINITION)).containsKey(id))
+                       return 
(autoscalePolicyListMap.get(StratosConstants.PUBLIC_DEFINITION)).get(id);
+        }
+       
+       if(autoscalePolicyListMap.containsKey(tenantId)){
+               if((autoscalePolicyListMap.get(tenantId)).containsKey(id))
+                       return (autoscalePolicyListMap.get(tenantId)).get(id);
+        }
+        
+       return null;
+    }
+    
+    /**
+     * Deletes the Autoscaling policies for specified tenantId or null.
+     *
+     * @param tenantId the tenant id
+     */
+    public void removeASPoliciesFromInformationModel(int tenantId) {
+       autoscalePolicyListMap.remove(tenantId);
+    }
+    
+    /**
+     * Deploys the specified Deployment policy - Adds to information model and 
persists
+     *
+     * @param policy
+     * @throws InvalidPolicyException
+     */
     public boolean deployDeploymentPolicy(DeploymentPolicy policy) throws 
InvalidPolicyException {
-        if(StringUtils.isEmpty(policy.getId())){
+       if(StringUtils.isEmpty(policy.getId())){
             throw new AutoScalerException("Deploying policy id can not be 
empty");
         }
         try {
@@ -88,15 +275,64 @@ public class PolicyManager {
                log.error(e);
             throw new InvalidPolicyException(String.format("Deployment policy 
is invalid: [id] %s", policy.getId()), e);
         }
-
+        
         this.addDeploymentPolicyToInformationModel(policy);
-        RegistryManager.getInstance().persistDeploymentPolicy(policy);
+        
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId()).persistDeploymentPolicy(policy);
 
         if (log.isInfoEnabled()) {
             log.info(String.format("Deployment policy is deployed 
successfully: [id] %s", policy.getId()));
         }
         return true;
     }
+    
+    /**
+     * Adds the specified Deployment policy to Information model
+     *
+     * @param policy
+     * @throws InvalidPolicyException
+     */
+    public void addDeploymentPolicyToInformationModel(DeploymentPolicy policy) 
throws InvalidPolicyException {
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+       
+        if(policy.getIsPublic()){
+               addDeploymentPolicyToSpecificContainer(policy, 
StratosConstants.PUBLIC_DEFINITION);
+        }
+        else{
+               addDeploymentPolicyToSpecificContainer(policy, tenantId);
+        }
+    }
+    
+    /**
+     * Adds the deployment policy to specific container.
+     *
+     * @param deploymentPolicy the deployment policy
+     * @param tenantId the tenant id
+     * @throws InvalidPolicyException the invalid policy exception
+     */
+    private void addDeploymentPolicyToSpecificContainer(DeploymentPolicy 
deploymentPolicy, int tenantId) throws InvalidPolicyException {
+       
+       Map<String, DeploymentPolicy> policies;
+       if(!deploymentPolicyListMap.containsKey(tenantId))
+       {
+               policies = new HashMap<String, DeploymentPolicy>();
+               deploymentPolicyListMap.put(tenantId, policies);
+       }
+       else {
+               policies = deploymentPolicyListMap.get(tenantId);
+       }
+       
+        if (!policies.containsKey(deploymentPolicy.getId())) {
+            if (log.isDebugEnabled()) {
+                log.debug("Adding policy :" + deploymentPolicy.getId());
+            }
+            policies.put(deploymentPolicy.getId(), deploymentPolicy);
+        } else {
+               String errMsg = "Specified policy [" + deploymentPolicy.getId() 
+ "] already exists";
+               log.error(errMsg);
+            throw new InvalidPolicyException(errMsg);
+        }
+    }
+
 
     private void fillPartitions(DeploymentPolicy deploymentPolicy) throws 
InvalidPartitionException {
         PartitionManager partitionMgr = PartitionManager.getInstance();
@@ -127,111 +363,78 @@ public class PolicyManager {
         destPartition.setProperties(srcPartition.getProperties());
     }
 
-    public void addASPolicyToInformationModel(AutoscalePolicy asPolicy) throws 
InvalidPolicyException {
-        if (!autoscalePolicyListMap.containsKey(asPolicy.getId())) {
-            if (log.isDebugEnabled()) {
-                log.debug("Adding policy :" + asPolicy.getId());
-            }
-            autoscalePolicyListMap.put(asPolicy.getId(), asPolicy);
-        } else {
-               String errMsg = "Specified policy [" + asPolicy.getId() + "] 
already exists";
-               log.error(errMsg);
-            throw new InvalidPolicyException(errMsg);
-        }
-    }
-
     /**
-     * Removes the specified policy
+     * Removes the specified Deployment policy
      *
      * @param policy
      * @throws InvalidPolicyException
      */
-    public void undeployAutoscalePolicy(String policy) throws 
InvalidPolicyException {
-        if (autoscalePolicyListMap.containsKey(policy)) {
-            if (log.isDebugEnabled()) {
-                log.debug("Removing policy :" + policy);
-            }
-            autoscalePolicyListMap.remove(policy);
-            
RegistryManager.getInstance().removeAutoscalerPolicy(this.getAutoscalePolicy(policy));
-        } else {
-            throw new InvalidPolicyException("No such policy [" + policy + "] 
exists");
+    public void undeployDeploymentPolicy(String policy) throws 
InvalidPolicyException {
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+       DeploymentPolicy policyToDelete = getDeploymentPolicy(policy);
+       
+       if((policyToDelete == null) || (policyToDelete.getTenantId() != 
tenantId))
+               throw new InvalidPolicyException("No such policy [" + policy + 
"] exists");
+       
+       if (log.isDebugEnabled()) {
+            log.debug("Removing policy :" + policy);
         }
+        
+       
RegistryManager.getInstance(tenantId).removeDeploymentPolicy(policyToDelete);
+       if(policyToDelete.getIsPublic()){
+               
(deploymentPolicyListMap.get(StratosConstants.PUBLIC_DEFINITION)).remove(policy);
+       }
+       else {
+              (deploymentPolicyListMap.get(tenantId)).remove(policy);
+       }
     }
 
     /**
-     * Returns an array of the Autoscale policies contained in this manager.
+     * Returns an array of the Deployment policies contained in this manager.
      *
-     * @return
+     * @return the deployment policy list
      */
-    public AutoscalePolicy[] getAutoscalePolicyList() {        
-        return autoscalePolicyListMap.values().toArray(new AutoscalePolicy[0]);
+    public DeploymentPolicy[] getDeploymentPolicyList() {        
+       List<DeploymentPolicy> policyList = new ArrayList<DeploymentPolicy>();
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+       
+       if(deploymentPolicyListMap.containsKey(tenantId))
+                       
policyList.addAll(deploymentPolicyListMap.get(CarbonContext.getThreadLocalCarbonContext().getTenantId()).values());
+               
+       
if(deploymentPolicyListMap.containsKey(StratosConstants.PUBLIC_DEFINITION))
+                       
policyList.addAll(deploymentPolicyListMap.get(StratosConstants.PUBLIC_DEFINITION).values());
+       
+       return policyList.toArray(new DeploymentPolicy[0]);
     }
 
     /**
-     * Returns the autoscale policy to which the specified id is mapped or null
+     * Returns the deployment policy to which the specified id is mapped or 
null.
      *
-     * @param id
-     * @return
+     * @param id the id
+     * @return the deployment policy
      */
-    public AutoscalePolicy getAutoscalePolicy(String id) {
-        return autoscalePolicyListMap.get(id);
-    }
-
-    // Add the deployment policy to As in memmory information model. Does not 
persist.
-    public void addDeploymentPolicyToInformationModel(DeploymentPolicy policy) 
throws InvalidPolicyException {
-        if (!deploymentPolicyListMap.containsKey(policy.getId())) {
-            if (log.isDebugEnabled()) {
-                log.debug("Adding policy :" + policy.getId());
-            }
-            PartitionManager.getInstance().deployNewNetworkPartitions(policy);
-            deploymentPolicyListMap.put(policy.getId(), policy);
-        } else {
-               String errMsg = "Specified policy [" + policy.getId()+ "] 
already exists";
-               log.error(errMsg);
-            throw new InvalidPolicyException(errMsg);
+    public DeploymentPolicy getDeploymentPolicy(String id) {
+       int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+       
if(deploymentPolicyListMap.containsKey(StratosConstants.PUBLIC_DEFINITION)){
+               
if((deploymentPolicyListMap.get(StratosConstants.PUBLIC_DEFINITION)).containsKey(id))
+                       return 
(deploymentPolicyListMap.get(StratosConstants.PUBLIC_DEFINITION)).get(id);
         }
-    }
-
-    /**
-     * Removes the specified policy
-     *
-     * @param policy
-     * @throws InvalidPolicyException
-     */
-    public void undeployDeploymentPolicy(String policy) throws 
InvalidPolicyException {
-        if (deploymentPolicyListMap.containsKey(policy)) {
-            if (log.isDebugEnabled()) {
-                log.debug("Removing deployment policy :" + policy);
-            }
-            DeploymentPolicy depPolicy = this.getDeploymentPolicy(policy);
-            // undeploy network partitions this deployment policy.
-            
PartitionManager.getInstance().undeployNetworkPartitions(depPolicy);
-            // undeploy the deployment policy.
-            RegistryManager.getInstance().removeDeploymentPolicy(depPolicy);
-            // remove from the infromation model.
-            deploymentPolicyListMap.remove(policy);
-        } else {
-            throw new InvalidPolicyException("No such policy [" + policy + "] 
exists");
+       
+       if(deploymentPolicyListMap.containsKey(tenantId)){
+               if((deploymentPolicyListMap.get(tenantId)).containsKey(id))
+                       return (deploymentPolicyListMap.get(tenantId)).get(id);
         }
+       
+       return null;
     }
-
-    /**
-     * Returns an array of the Deployment policies contained in this manager.
-     *
-     * @return
-     */
-    public DeploymentPolicy[] getDeploymentPolicyList() {        
-        return deploymentPolicyListMap.values().toArray(new 
DeploymentPolicy[0]);
-    }
-
+    
     /**
-     * Returns the deployment policy to which the specified id is mapped or 
null
+     * Deletes the deployment policies for specified tenantId .
      *
-     * @param id
-     * @return
+     * @param tenantId the tenant id
      */
-    public DeploymentPolicy getDeploymentPolicy(String id) {
-        return deploymentPolicyListMap.get(id);
+    public void removeDeploymentPoliciesFromInformationModel(int tenantId) {
+       deploymentPolicyListMap.remove(tenantId);
     }
 
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/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 df8cfd1..943ac9e 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
@@ -33,24 +33,41 @@ import org.apache.stratos.autoscaler.util.Serializer;
 import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
+import org.wso2.carbon.context.CarbonContext;
+import org.wso2.carbon.registry.api.RegistryException;
+import org.wso2.carbon.registry.api.RegistryService;
 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 java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 public class RegistryManager {
 
     private final static Log log = LogFactory.getLog(RegistryManager.class);
-    private static Registry registryService;
+    private static RegistryService registryService;
     private static RegistryManager registryManager;
-
-    public static RegistryManager getInstance() {
-
-        registryService = ServiceReferenceHolder.getInstance().getRegistry();
-
+    private static Registry registry;
+   
+    /**
+     * Gets the single instance of RegistryManager where the registry is for 
the current tenant.
+     *
+     * @param tenantId the tenant id
+     * @return single instance of RegistryManager
+     */
+    public static RegistryManager getInstance(int tenantId) {
+       try {
+               registryService = 
ServiceReferenceHolder.getInstance().getRegistry();
+               registry = (Registry) 
registryService.getGovernanceSystemRegistry(tenantId);
+       }
+       catch(RegistryException e){
+               String msg = "Failed when retrieving Governance System 
Registry.";
+            log.error(msg, e);
+            throw new AutoScalerException(msg, e);
+       } 
+        
         synchronized (RegistryManager.class) {
             if (registryManager == null) {
                 if (registryService == null) {
@@ -65,9 +82,9 @@ public class RegistryManager {
 
     private RegistryManager() {
         try {
-            if 
(!registryService.resourceExists(AutoScalerConstants.AUTOSCALER_RESOURCE)) {
-                registryService.put(AutoScalerConstants.AUTOSCALER_RESOURCE,
-                        registryService.newCollection());
+            if 
(!registry.resourceExists(AutoScalerConstants.AUTOSCALER_RESOURCE)) {
+               registry.put(AutoScalerConstants.AUTOSCALER_RESOURCE,
+                               registry.newCollection());
             }
         } catch (RegistryException e) {
             String msg =
@@ -87,16 +104,16 @@ public class RegistryManager {
     private void persist(Object dataObj, String resourcePath) throws 
AutoScalerException {
 
         try {
-            registryService.beginTransaction();
+               registry.beginTransaction();
 
-            Resource nodeResource = registryService.newResource();
+            Resource nodeResource = registry.newResource();
             nodeResource.setContent(Serializer.serializeToByteArray(dataObj));
 
-            registryService.put(resourcePath, nodeResource);
-            registryService.commitTransaction();
+            registry.put(resourcePath, nodeResource);
+            registry.commitTransaction();
         } catch (Exception e) {
             try {
-                registryService.rollbackTransaction();
+               registry.rollbackTransaction();
             } catch (RegistryException e1) {
                 if (log.isErrorEnabled()) {
                     log.error("Could not rollback transaction", e);
@@ -107,7 +124,12 @@ public class RegistryManager {
     }
 
     public void persistPartition(Partition partition) {
-        String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.PARTITION_RESOURCE + "/" + partition.getId();
+       String resourcePath;
+       if(!partition.getIsPublic()) {
+               resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.PARTITION_RESOURCE + "/" + 
AutoScalerConstants.TENANT_RESOURCE + "/" + partition.getId();
+       } else {
+               resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.PARTITION_RESOURCE + "/" + 
AutoScalerConstants.PUBLIC_RESOURCE + "/" + partition.getId();
+       }
         persist(partition, resourcePath);
         if (log.isDebugEnabled()) {
             log.debug(String.format("Partition written to registry: [id] %s 
[provider] %s [min] %d [max] %d",
@@ -125,7 +147,12 @@ public class RegistryManager {
     }
 
     public void persistAutoscalerPolicy(AutoscalePolicy autoscalePolicy) {
-        String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getId();
+       String resourcePath;
+       if(!autoscalePolicy.getIsPublic()) {
+               resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.AS_POLICY_RESOURCE + "/" + 
AutoScalerConstants.TENANT_RESOURCE + "/" + autoscalePolicy.getId();
+       } else {
+               resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.AS_POLICY_RESOURCE + "/" + 
AutoScalerConstants.PUBLIC_RESOURCE + "/" + autoscalePolicy.getId();
+       }
         persist(autoscalePolicy, resourcePath);
         if (log.isDebugEnabled()) {
             log.debug(String.format("Autoscaler policy written to registry: 
[id] %s [name] %s [description] %s",
@@ -134,7 +161,12 @@ public class RegistryManager {
     }
 
     public void persistDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
-        String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + "/" + deploymentPolicy.getId();
+       String resourcePath;
+       if(!deploymentPolicy.getIsPublic()) {
+               resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + "/" + 
AutoScalerConstants.TENANT_RESOURCE + "/" + deploymentPolicy.getId();
+       } else {
+               resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + "/" + 
AutoScalerConstants.PUBLIC_RESOURCE + "/" + deploymentPolicy.getId();
+       }
         persist(deploymentPolicy, resourcePath);
         if (log.isDebugEnabled()) {
             log.debug(deploymentPolicy.toString());
@@ -143,7 +175,7 @@ public class RegistryManager {
 
     private Object retrieve(String resourcePath) {
         try {
-            Resource resource = registryService.get(resourcePath);
+            Resource resource = registry.get(resourcePath);
 
             return resource.getContent();
 
@@ -158,13 +190,20 @@ public class RegistryManager {
     }
 
     public List<Partition> retrievePartitions() {
-        List<Partition> partitionList = new ArrayList<Partition>();
-        RegistryManager registryManager = RegistryManager.getInstance();
-        String[] partitionsResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.PARTITION_RESOURCE);
-
-        if (partitionsResourceList != null) {
+       List<Partition> partitionList = new ArrayList<Partition>();
+        RegistryManager registryManager = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId());
+        String[] partitionsResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.PARTITION_RESOURCE + AutoScalerConstants.TENANT_RESOURCE);
+        String[] publicPartitionsResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.PARTITION_RESOURCE + AutoScalerConstants.PUBLIC_RESOURCE);
+        
+        ArrayList<String> allPartitions = new ArrayList<String>();
+        if(partitionsResourceList != null)
+               allPartitions.addAll(Arrays.asList(partitionsResourceList));
+        if(publicPartitionsResourceList != null)
+               
allPartitions.addAll(Arrays.asList(publicPartitionsResourceList));
+
+        if (allPartitions != null) {
             Partition partition;
-            for (String resourcePath : partitionsResourceList) {
+            for (String resourcePath : allPartitions) {
                 Object serializedObj = registryManager.retrieve(resourcePath);
                 if (serializedObj != null) {
                     try {
@@ -192,7 +231,7 @@ public class RegistryManager {
 
     public List<NetworkPartitionLbHolder> retrieveNetworkPartitionLbHolders() {
         List<NetworkPartitionLbHolder> nwPartitionLbHolderList = new 
ArrayList<NetworkPartitionLbHolder>();
-        RegistryManager registryManager = RegistryManager.getInstance();
+        RegistryManager registryManager = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId());
         String[] partitionsResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE +
                 AutoScalerConstants.NETWORK_PARTITION_LB_HOLDER_RESOURCE);
 
@@ -224,13 +263,20 @@ public class RegistryManager {
     }
 
     public List<AutoscalePolicy> retrieveASPolicies() {
-        List<AutoscalePolicy> asPolicyList = new ArrayList<AutoscalePolicy>();
-        RegistryManager registryManager = RegistryManager.getInstance();
-        String[] partitionsResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.AS_POLICY_RESOURCE);
-
-        if (partitionsResourceList != null) {
+       List<AutoscalePolicy> asPolicyList = new ArrayList<AutoscalePolicy>();
+        RegistryManager registryManager = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId());
+        String[] asPolicyResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.AS_POLICY_RESOURCE + AutoScalerConstants.TENANT_RESOURCE);
+        String[] publicAsPolicyResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.AS_POLICY_RESOURCE + AutoScalerConstants.PUBLIC_RESOURCE);
+        
+        ArrayList<String> allAsPolicies = new ArrayList<String>();
+        if(asPolicyResourceList != null)
+               allAsPolicies.addAll(Arrays.asList(asPolicyResourceList));
+        if(publicAsPolicyResourceList != null)
+               allAsPolicies.addAll(Arrays.asList(publicAsPolicyResourceList));
+        
+        if (allAsPolicies != null) {
             AutoscalePolicy asPolicy;
-            for (String resourcePath : partitionsResourceList) {
+            for (String resourcePath : allAsPolicies) {
                 Object serializedObj = registryManager.retrieve(resourcePath);
                 if (serializedObj != null) {
                     try {
@@ -256,13 +302,20 @@ public class RegistryManager {
     }
 
     public List<DeploymentPolicy> retrieveDeploymentPolicies() {
-        List<DeploymentPolicy> depPolicyList = new 
ArrayList<DeploymentPolicy>();
-        RegistryManager registryManager = RegistryManager.getInstance();
-        String[] depPolicyResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE);
-
-        if (depPolicyResourceList != null) {
+       List<DeploymentPolicy> depPolicyList = new 
ArrayList<DeploymentPolicy>();
+        RegistryManager registryManager = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId());
+        String[] depPolicyResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + 
AutoScalerConstants.TENANT_RESOURCE);
+        String[] publicDepPolicyResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + 
AutoScalerConstants.PUBLIC_RESOURCE);
+        
+        ArrayList<String> allDepPolicies = new ArrayList<String>();
+        if(depPolicyResourceList != null)
+               allDepPolicies.addAll(Arrays.asList(depPolicyResourceList));
+        if(publicDepPolicyResourceList != null)
+               
allDepPolicies.addAll(Arrays.asList(publicDepPolicyResourceList));
+
+        if (allDepPolicies != null) {
             DeploymentPolicy depPolicy;
-            for (String resourcePath : depPolicyResourceList) {
+            for (String resourcePath : allDepPolicies) {
                 Object serializedObj = registryManager.retrieve(resourcePath);
                 if (serializedObj != null) {
                     try {
@@ -287,7 +340,14 @@ public class RegistryManager {
     }
 
     public void removeAutoscalerPolicy(AutoscalePolicy autoscalePolicy) {
-        String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getId();
+       String resourcePath;
+               if(!autoscalePolicy.getIsPublic()) {
+                       resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE 
+ AutoScalerConstants.AS_POLICY_RESOURCE + "/" + 
AutoScalerConstants.TENANT_RESOURCE + "/" + autoscalePolicy.getId();
+               }
+               else {
+                       resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE 
+ AutoScalerConstants.AS_POLICY_RESOURCE + "/" + 
AutoScalerConstants.PUBLIC_RESOURCE + "/" +autoscalePolicy.getId();
+               }
+       
         this.delete(resourcePath);
         if (log.isDebugEnabled()) {
             log.debug(String.format("Autoscaler policy deleted from registry: 
[id] %s [name] %s [description] %s",
@@ -297,7 +357,14 @@ public class RegistryManager {
     }
 
     public void removeDeploymentPolicy(DeploymentPolicy depPolicy) {
-        String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE;
+       String resourcePath;
+               if(!depPolicy.getIsPublic()) {
+                       resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE 
+ AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + "/" + 
AutoScalerConstants.TENANT_RESOURCE + "/" + depPolicy.getId();
+               }
+               else {
+                       resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE 
+ AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + "/" + 
AutoScalerConstants.PUBLIC_RESOURCE + "/" +depPolicy.getId();
+               }
+       
         this.delete(resourcePath);
         if (log.isDebugEnabled()) {
             log.debug(String.format("Deployment policy deleted from registry: 
[id] %s",
@@ -317,12 +384,12 @@ public class RegistryManager {
 
     private void delete(String resourcePath) {
         try {
-            registryService.beginTransaction();
-            registryService.delete(resourcePath);
-            registryService.commitTransaction();
+               registry.beginTransaction();
+               registry.delete(resourcePath);
+               registry.commitTransaction();
         } catch (RegistryException e) {
             try {
-                registryService.rollbackTransaction();
+               registry.rollbackTransaction();
             } catch (RegistryException e1) {
                 if (log.isErrorEnabled()) {
                     log.error("Could not rollback transaction", e);
@@ -345,7 +412,7 @@ public class RegistryManager {
 
     public List<KubernetesGroup> retrieveKubernetesGroups() {
         List<KubernetesGroup> kubernetesGroupList = new 
ArrayList<KubernetesGroup>();
-        RegistryManager registryManager = RegistryManager.getInstance();
+        RegistryManager registryManager = 
RegistryManager.getInstance(CarbonContext.getThreadLocalCarbonContext().getTenantId());
         String[] kubernetesGroupResourceList = (String[]) 
registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
AutoScalerConstants.KUBERNETES_RESOURCE);
 
         if (kubernetesGroupResourceList != null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index 94def43..268e89c 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -85,7 +85,7 @@ public class RuleTasksDelegator {
                                                           
.getNetworkPartitionLbHolder(nwPartitionId);
             String lbClusterId = getLbClusterId(lbRefType, partitionContext, 
lbHolder);
             MemberContext memberContext =
-                                         CloudControllerClient.getInstance()
+                                         
CloudControllerClient.getClientWithMutualAuthHeaderSet()
                                                               
.spawnAnInstance(partitionContext.getPartition(),
                                                                       
clusterId,
                                                                       
lbClusterId, partitionContext.getNetworkPartitionId(),
@@ -184,7 +184,7 @@ public class RuleTasksDelegator {
 
     public void terminateObsoleteInstance(String memberId) {
         try {
-            CloudControllerClient.getInstance().terminate(memberId);
+            
CloudControllerClient.getClientWithMutualAuthHeaderSet().terminate(memberId);
         } catch (Throwable e) {
             log.error("Cannot terminate instance", e);
         }
@@ -193,7 +193,7 @@ public class RuleTasksDelegator {
        public void delegateTerminateAll(String clusterId) {
            try {
 
-               
CloudControllerClient.getInstance().terminateAllInstances(clusterId);
+               
CloudControllerClient.getClientWithMutualAuthHeaderSet().terminateAllInstances(clusterId);
            } catch (Throwable e) {
                log.error("Cannot terminate instance", e);
            }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
index c150f75..9ea9787 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
@@ -39,6 +39,8 @@ public final class AutoScalerConstants {
        public static final String NETWORK_PARTITION_LB_HOLDER_RESOURCE = 
"/network-partitions";
        public static final String AS_POLICY_RESOURCE = 
"/policies/autoscalingPolicies";
        public static final String DEPLOYMENT_POLICY_RESOURCE = 
"/policies/deploymentPolicies";
+       public static final String PUBLIC_RESOURCE = "/public";
+       public static final String TENANT_RESOURCE = "/tenant";
 
 
     /**

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/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 4f58e8d..90a11be 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
@@ -110,7 +110,7 @@ public class AutoscalerUtil {
 //            throw new PolicyValidationException(msg);
 //        }
 //
-//        
CloudControllerClient.getInstance().validateDeploymentPolicy(cluster.getServiceName(),
 deploymentPolicy);
+//        
CloudControllerClient.getClientWithMutualAuthHeaderSet().validateDeploymentPolicy(cluster.getServiceName(),
 deploymentPolicy);
 //
 //        ClusterMonitor clusterMonitor =
 //                                        new 
ClusterMonitor(cluster.getClusterId(),

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/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 00629dc..3e3e904 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,13 +21,14 @@ package org.apache.stratos.autoscaler.util;
 */
 
 
-import org.wso2.carbon.registry.core.Registry;
-import org.wso2.carbon.registry.core.session.UserRegistry;
+import org.wso2.carbon.registry.api.RegistryService;
+import org.wso2.carbon.user.core.service.RealmService;
 
 public class ServiceReferenceHolder {
        
        private static ServiceReferenceHolder instance;
-       private Registry registry;      
+       private RegistryService registryService;        
+       private RealmService realmService;      
 
        private ServiceReferenceHolder() {
        }
@@ -39,11 +40,19 @@ public class ServiceReferenceHolder {
                return instance;
        }
         
-       public void setRegistry(UserRegistry governanceSystemRegistry) {
-               registry = governanceSystemRegistry;
+       public void setRegistry(RegistryService registrySerivice) {
+               this.registryService = registrySerivice;
        }
 
-    public Registry getRegistry() {
-               return registry;
+    public RegistryService getRegistry() {
+               return this.registryService;
        }
+    
+    public void setRealmService(RealmService realmService) {
+       this.realmService = realmService;
+    }
+    
+    public RealmService getRealmService() {
+       return this.realmService;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/services.xml
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/services.xml
 
b/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/services.xml
index 02d1b27..21359d9 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/services.xml
+++ 
b/components/org.apache.stratos.autoscaler/src/main/resources/META-INF/services.xml
@@ -22,7 +22,12 @@
 
 <serviceGroup>
     <service name="AutoScalerService" scope="application">
-        <parameter 
name="ServiceClass">org.apache.stratos.autoscaler.api.AutoScalerServiceImpl</parameter>
+        <parameter name="ServiceClass" 
locked="false">org.apache.stratos.autoscaler.api.AutoScalerServiceImpl</parameter>
+           <transports>
+            <transport>https</transport>
+        </transports>
+        <parameter name="adminService" locked="true">true</parameter>
+        <parameter name="hiddenService" locked="true">true</parameter>        
         <messageReceivers>
                <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"; 
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
                <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out"; 
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 7abc6b7..b14adf2 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -55,6 +55,7 @@ import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.domain.NodeMetadataBuilder;
 import org.jclouds.compute.domain.Template;
 import org.jclouds.rest.ResourceNotFoundException;
+import org.wso2.carbon.core.AbstractAdmin;
 import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
 import java.util.*;
@@ -68,7 +69,7 @@ import java.util.concurrent.Future;
  * terminating already started instances, providing pending instance count etc.
  * 
  */
-public class CloudControllerServiceImpl implements CloudControllerService {
+public class CloudControllerServiceImpl extends AbstractAdmin implements 
CloudControllerService {
 
        private static final Log log = LogFactory
                        .getLog(CloudControllerServiceImpl.class);

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
 
b/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
index c78bd62..4a5a57b 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
@@ -23,6 +23,11 @@
 <serviceGroup>
     <service name="CloudControllerService" scope="application">
         <parameter 
name="ServiceClass">org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl</parameter>
+        <transports>
+               <transport>https</transport>
+       </transports>
+        <parameter name="adminService" locked="true">true</parameter>
+        <parameter name="hiddenService" locked="true">true</parameter>
         <messageReceivers>
         <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"; 
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
         <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out"; 
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
index 1e36c15..bf3e670 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
@@ -155,5 +155,8 @@ public class StratosConstants {
 
     // Policy and definition related constants
     public static final int PUBLIC_DEFINITION = 0;
+    
+    // Authentication related constants
+    public static final String MUTUAL_AUTH_URL = 
"http://mutualssl.carbon.wso2.org";;
 
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8e5cba6f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
index d1063e7..258d457 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
@@ -155,7 +155,7 @@ public abstract class CartridgeMgtBehaviour implements 
Serializable {
         log.info("Instance Cleanup Notification sent to Cluster:  " + 
clusterId);
 
         try {
-            
CloudControllerServiceClient.getServiceClient().unregisterService(clusterId);
+            
CloudControllerServiceClient.getClientWithMutualAuthHeaderSet().unregisterService(clusterId);
 
         } catch (Exception e) {
             String errorMsg = "Error in unregistering service cluster with 
domain " + clusterId;

Reply via email to