Repository: stratos Updated Branches: refs/heads/master 1d88fdf45 -> 44b8fc5c4
Adding hazelcast instance service reference to cloud controller Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/44b8fc5c Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/44b8fc5c Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/44b8fc5c Branch: refs/heads/master Commit: 44b8fc5c464a883c3d976de75606f83529fc8d40 Parents: 1d88fdf Author: Imesh Gunaratne <[email protected]> Authored: Sat Nov 29 22:15:04 2014 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Sat Nov 29 22:15:04 2014 +0530 ---------------------------------------------------------------------- .../context/CloudControllerContext.java | 63 +++++++++++--------- .../CloudControllerServiceComponent.java | 34 ++++++++--- .../internal/ServiceReferenceHolder.java | 10 ++++ 3 files changed, 70 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/44b8fc5c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java index f2b25b9..c967680 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java @@ -40,10 +40,9 @@ import java.util.concurrent.ScheduledFuture; public class CloudControllerContext implements Serializable{ private static final long serialVersionUID = -2662307358852779897L; - private static final Log log = LogFactory.getLog(CloudControllerContext.class); - private static volatile CloudControllerContext ctxt; + private static volatile CloudControllerContext instance; /* We keep following maps in order to make the look up time, small. */ @@ -51,33 +50,31 @@ public class CloudControllerContext implements Serializable{ * Key - cluster id * Value - list of {@link MemberContext} */ - private Map<String, List<MemberContext>> clusterIdToMemberContext = new ConcurrentHashMap<String, List<MemberContext>>(); - + private Map<String, List<MemberContext>> clusterIdToMemberContext; /** * Key - member id * Value - {@link MemberContext} */ - private Map<String, MemberContext> memberIdToContext = new ConcurrentHashMap<String, MemberContext>(); + private Map<String, MemberContext> memberIdToContext; /** * Key - member id * Value - ScheduledFuture task */ - private transient Map<String, ScheduledFuture<?>> memberIdToScheduledTask = new ConcurrentHashMap<String, ScheduledFuture<?>>(); + private transient Map<String, ScheduledFuture<?>> memberIdToScheduledTask; /** * Key - Kubernetes cluster id * Value - {@link org.apache.stratos.cloud.controller.domain.KubernetesClusterContext} */ - private Map<String, KubernetesClusterContext> kubClusterIdToKubClusterContext = - new ConcurrentHashMap<String, KubernetesClusterContext>(); + private Map<String, KubernetesClusterContext> kubClusterIdToKubClusterContext; /** * Key - cluster id * Value - {@link org.apache.stratos.cloud.controller.domain.ClusterContext} */ - private Map<String, ClusterContext> clusterIdToContext = new ConcurrentHashMap<String, ClusterContext>(); + private Map<String, ClusterContext> clusterIdToContext; /** * This works as a cache to hold already validated partitions against a cartridge type. @@ -106,45 +103,46 @@ public class CloudControllerContext implements Serializable{ */ private List<IaasProvider> iaasProviders; - private String serializationDir; private boolean enableBAMDataPublisher; private transient DataPublisherConfig dataPubConfig; private boolean enableTopologySync; private transient TopologyConfig topologyConfig; - private transient AsyncDataPublisher dataPublisher; private String streamId; private boolean isPublisherRunning; private boolean isTopologySyncRunning; - + private boolean clustered; + + private CloudControllerContext() { + clusterIdToMemberContext = new ConcurrentHashMap<String, List<MemberContext>>(); + memberIdToContext = new ConcurrentHashMap<String, MemberContext>(); + memberIdToScheduledTask = new ConcurrentHashMap<String, ScheduledFuture<?>>(); + kubClusterIdToKubClusterContext = new ConcurrentHashMap<String, KubernetesClusterContext>(); + clusterIdToContext = new ConcurrentHashMap<String, ClusterContext>(); + cartridgeTypeToPartitionIds = new ConcurrentHashMap<String, List<String>>(); + + cartridges = new ArrayList<Cartridge>(); + serviceGroups = new ArrayList<ServiceGroup>(); + } public static CloudControllerContext getInstance() { - - if (ctxt == null) { + if (instance == null) { synchronized (CloudControllerContext.class) { - if (ctxt == null && RegistryManager.getInstance() != null) { - + if (instance == null && RegistryManager.getInstance() != null) { Object obj = RegistryManager.getInstance().retrieve(); if (obj != null) { if (obj instanceof CloudControllerContext) { - ctxt = (CloudControllerContext) obj; + instance = (CloudControllerContext) obj; } } } - if(ctxt == null) { - ctxt = new CloudControllerContext(); + if(instance == null) { + instance = new CloudControllerContext(); } } } - - return ctxt; - } - - private CloudControllerContext() { - - cartridges = new ArrayList<Cartridge>(); - serviceGroups = new ArrayList<ServiceGroup>(); + return instance; } public List<Cartridge> getCartridges() { @@ -334,7 +332,7 @@ public class CloudControllerContext implements Serializable{ } if(log.isDebugEnabled()) { - log.debug("Removed Member Context from the information model. "+ctxt); + log.debug("Removed Member Context from the information model. "+ instance); } return ctxts; } @@ -475,5 +473,12 @@ public class CloudControllerContext implements Serializable{ public void setMemberIdToScheduledTask(Map<String, ScheduledFuture<?>> memberIdToScheduledTask) { this.memberIdToScheduledTask = memberIdToScheduledTask; } - + + public void setClustered(boolean clustered) { + this.clustered = clustered; + } + + public boolean isClustered() { + return clustered; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/44b8fc5c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java index 56f9d26..9b99e7a 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java @@ -21,8 +21,11 @@ package org.apache.stratos.cloud.controller.internal; */ +import com.hazelcast.core.HazelcastInstance; +import org.apache.axis2.clustering.ClusteringAgent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.cloud.controller.context.CloudControllerContext; import org.apache.stratos.cloud.controller.messaging.receiver.application.ApplicationTopicReceiver; import org.apache.stratos.cloud.controller.messaging.receiver.cluster.status.ClusterStatusTopicReceiver; import org.apache.stratos.cloud.controller.exception.CloudControllerException; @@ -45,16 +48,15 @@ import org.wso2.carbon.utils.ConfigurationContextService; * Registering Cloud Controller Service. * * @scr.component name="org.apache.stratos.cloud.controller" immediate="true" + * @scr.reference name="hazelcast.instance.service" interface="com.hazelcast.core.HazelcastInstance" + * cardinality="0..1"policy="dynamic" bind="setHazelcastInstance" unbind="unsetHazelcastInstance" * @scr.reference name="distributedMapProvider" interface="org.wso2.carbon.caching.impl.DistributedMapProvider" - * cardinality="1..1" policy="dynamic" bind="setDistributedMapProvider" unbind="unsetDistributedMapProvider" - * @scr.reference name="ntask.component" - * interface="org.wso2.carbon.ntask.core.service.TaskService" + * cardinality="0..1" policy="dynamic" bind="setDistributedMapProvider" unbind="unsetDistributedMapProvider" + * @scr.reference name="ntask.component" interface="org.wso2.carbon.ntask.core.service.TaskService" * cardinality="1..1" policy="dynamic" bind="setTaskService" unbind="unsetTaskService" - * @scr.reference name="registry.service" - * interface="org.wso2.carbon.registry.core.service.RegistryService" + * @scr.reference name="registry.service" interface="org.wso2.carbon.registry.core.service.RegistryService" * cardinality="1..1" policy="dynamic" bind="setRegistryService" unbind="unsetRegistryService" - * @scr.reference name="config.context.service" - * interface="org.wso2.carbon.utils.ConfigurationContextService" + * @scr.reference name="config.context.service" interface="org.wso2.carbon.utils.ConfigurationContextService" * cardinality="1..1" policy="dynamic" bind="setConfigurationContextService" unbind="unsetConfigurationContextService" */ public class CloudControllerServiceComponent { @@ -66,6 +68,14 @@ public class CloudControllerServiceComponent { protected void activate(ComponentContext context) { try { + ClusteringAgent clusteringAgent = ServiceReferenceHolder.getInstance().getAxisConfiguration().getClusteringAgent(); + boolean clusteringEnabled = (clusteringAgent != null); + CloudControllerContext.getInstance().setClustered(clusteringEnabled); + + if(log.isInfoEnabled()) { + log.info(String.format("Cloud controller clustering is %s", (clusteringEnabled ? "enabled" : "disabled"))); + } + applicationTopicReceiver = new ApplicationTopicReceiver(); Thread tApplicationTopicReceiver = new Thread(applicationTopicReceiver); tApplicationTopicReceiver.start(); @@ -139,7 +149,7 @@ public class CloudControllerServiceComponent { protected void unsetRegistryService(RegistryService registryService) { if (log.isDebugEnabled()) { - log.debug("Unsetting the Registry Service"); + log.debug("Un-setting the Registry Service"); } ServiceReferenceHolder.getInstance().setRegistry(null); } @@ -153,6 +163,14 @@ public class CloudControllerServiceComponent { ServiceReferenceHolder.getInstance().setAxisConfiguration(null); } + public void setHazelcastInstance(HazelcastInstance hazelcastInstance) { + ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance); + } + + public void unsetHazelcastInstance(HazelcastInstance hazelcastInstance) { + ServiceReferenceHolder.getInstance().setHazelcastInstance(null); + } + protected void setDistributedMapProvider(DistributedMapProvider mapProvider) { ServiceReferenceHolder.getInstance().setDistributedMapProvider(mapProvider); } http://git-wip-us.apache.org/repos/asf/stratos/blob/44b8fc5c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java index 780722d..609e1a9 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java @@ -18,6 +18,7 @@ */ package org.apache.stratos.cloud.controller.internal; +import com.hazelcast.core.HazelcastInstance; import org.apache.axis2.engine.AxisConfiguration; import org.wso2.carbon.caching.impl.DistributedMapProvider; import org.wso2.carbon.ntask.core.service.TaskService; @@ -34,6 +35,7 @@ public class ServiceReferenceHolder { private Registry registry; private AxisConfiguration axisConfiguration; private DistributedMapProvider distributedMapProvider; + private HazelcastInstance hazelcastInstance; private ServiceReferenceHolder() { } @@ -76,4 +78,12 @@ public class ServiceReferenceHolder { public DistributedMapProvider getDistributedMapProvider() { return distributedMapProvider; } + + public void setHazelcastInstance(HazelcastInstance hazelcastInstance) { + this.hazelcastInstance = hazelcastInstance; + } + + public HazelcastInstance getHazelcastInstance() { + return hazelcastInstance; + } }
