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;
+    }
 }

Reply via email to