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;
