You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/12/02 03:14:54 UTC

stratos git commit: Updating load balancer to use distributed object provider osgi service

Repository: stratos
Updated Branches:
  refs/heads/master 248e4d6b1 -> 7978da463


Updating load balancer to use distributed object provider osgi service


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

Branch: refs/heads/master
Commit: 7978da4637d0a508eb7762874d717365c2a882f8
Parents: 248e4d6
Author: Imesh Gunaratne <im...@apache.org>
Authored: Tue Dec 2 07:44:30 2014 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Dec 2 07:44:50 2014 +0530

----------------------------------------------------------------------
 .../context/map/AlgorithmContextMap.java        | 97 ++------------------
 .../internal/LoadBalancerServiceComponent.java  | 25 ++---
 .../internal/ServiceReferenceHolder.java        | 22 ++---
 3 files changed, 21 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/7978da46/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/AlgorithmContextMap.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/AlgorithmContextMap.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/AlgorithmContextMap.java
index 49ecf2f..2c03ccb 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/AlgorithmContextMap.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/AlgorithmContextMap.java
@@ -19,18 +19,12 @@
 
 package org.apache.stratos.load.balancer.context.map;
 
-import com.hazelcast.core.HazelcastInstance;
-import com.hazelcast.core.ILock;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.load.balancer.context.LoadBalancerContext;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 import org.apache.stratos.load.balancer.internal.ServiceReferenceHolder;
-import org.wso2.carbon.caching.impl.DistributedMapProvider;
-import org.wso2.carbon.caching.impl.MapEntryListener;
 
-import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Algorithm context map is a singleton class for managing load balancing algorithm context
@@ -43,46 +37,13 @@ public class AlgorithmContextMap {
     private static AlgorithmContextMap instance;
 
     private final Map<String, Integer> clusterMemberIndexMap;
+    private final DistributedObjectProvider distributedObjectProvider;
 
     private AlgorithmContextMap() {
-        if (LoadBalancerContext.getInstance().isClustered()) {
-            DistributedMapProvider distributedMapProvider = ServiceReferenceHolder.getInstance().getDistributedMapProvider();
-            clusterMemberIndexMap = distributedMapProvider.getMap(LOAD_BALANCER_ALGORITHM_CONTEXT_MAP,
-                    new MapEntryListener() {
-                        @Override
-                        public <X> void entryAdded(X x) {
-                            if(log.isDebugEnabled()) {
-                                log.debug("Entry added to distributed algorithm context map: " + x);
-                            }
-                        }
-
-                        @Override
-                        public <X> void entryRemoved(X x) {
-                            if(log.isDebugEnabled()) {
-                                log.debug("Entry removed from distributed algorithm context map: " + x);
-                            }
-                        }
-
-                        @Override
-                        public <X> void entryUpdated(X x) {
-                            if(log.isDebugEnabled()) {
-                                log.debug("Entry updated in distributed algorithm context map: " + x);
-                            }
-                        }
-                    });
-            if (clusterMemberIndexMap != null) {
-                if (log.isInfoEnabled()) {
-                    log.info("Load balancer context map initialized in distributed mode");
-                }
-            } else {
-                log.error("Could not initialize algorithm context map from distributed map provider");
-            }
-        } else {
-            clusterMemberIndexMap = new ConcurrentHashMap<String, Integer>();
-            if (log.isInfoEnabled()) {
-                log.info("Load balancer context map initialized locally");
-            }
-        }
+        // Initialize distributed object provider
+        distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
+        // Initialize cluster->memberIndex map
+        clusterMemberIndexMap = distributedObjectProvider.getMap(LOAD_BALANCER_ALGORITHM_CONTEXT_MAP);
     }
 
     public static AlgorithmContextMap getInstance() {
@@ -100,56 +61,14 @@ public class AlgorithmContextMap {
         return String.format("%s-%s", serviceName, clusterId);
     }
 
-    private com.hazelcast.core.ILock acquireDistributedLock(Object object) {
-        if (log.isDebugEnabled()) {
-            log.debug("Acquiring distributed lock for algorithm context map...");
-        }
-        HazelcastInstance hazelcastInstance = ServiceReferenceHolder.getInstance().getHazelcastInstance();
-        ILock lock = hazelcastInstance.getLock(object);
-        if (log.isDebugEnabled()) {
-            log.debug("Distributed lock acquired for algorithm context map");
-        }
-        return lock;
-    }
-
-    private void releaseDistributedLock(ILock lock) {
-        if (log.isDebugEnabled()) {
-            log.debug("Releasing distributed lock for algorithm context map...");
-        }
-        lock.forceUnlock();
-        if (log.isDebugEnabled()) {
-            log.debug("Distributed lock released for algorithm context map");
-        }
-    }
-
     public void putCurrentMemberIndex(String serviceName, String clusterId, int currentMemberIndex) {
         String key = constructKey(serviceName, clusterId);
-        if (LoadBalancerContext.getInstance().isClustered()) {
-            ILock lock = null;
-            try {
-                lock = acquireDistributedLock(clusterMemberIndexMap);
-                clusterMemberIndexMap.put(key, currentMemberIndex);
-            } finally {
-                releaseDistributedLock(lock);
-            }
-        } else {
-            clusterMemberIndexMap.put(key, currentMemberIndex);
-        }
+        distributedObjectProvider.putToMap(clusterMemberIndexMap, key, currentMemberIndex);
     }
 
     public void removeCluster(String serviceName, String clusterId) {
         String key = constructKey(serviceName, clusterId);
-        if (LoadBalancerContext.getInstance().isClustered()) {
-            ILock lock = null;
-            try {
-                lock = acquireDistributedLock(clusterMemberIndexMap);
-                clusterMemberIndexMap.remove(key);
-            } finally {
-                releaseDistributedLock(lock);
-            }
-        } else {
-            clusterMemberIndexMap.remove(key);
-        }
+        distributedObjectProvider.removeFromMap(clusterMemberIndexMap, key);
     }
 
     public int getCurrentMemberIndex(String serviceName, String clusterId) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/7978da46/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
index 579512e..aa5e2ef 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
@@ -19,12 +19,12 @@
 
 package org.apache.stratos.load.balancer.internal;
 
-import com.hazelcast.core.HazelcastInstance;
 import org.apache.axis2.clustering.ClusteringAgent;
 import org.apache.axis2.deployment.DeploymentEngine;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 import org.apache.stratos.load.balancer.endpoint.EndpointDeployer;
 import org.apache.stratos.load.balancer.messaging.LoadBalancerTenantEventReceiver;
 import org.apache.stratos.load.balancer.messaging.LoadBalancerTopologyEventReceiver;
@@ -45,7 +45,6 @@ import org.apache.synapse.core.SynapseEnvironment;
 import org.apache.synapse.deployers.SynapseArtifactDeploymentStore;
 import org.apache.synapse.endpoints.Endpoint;
 import org.osgi.service.component.ComponentContext;
-import org.wso2.carbon.caching.impl.DistributedMapProvider;
 import org.wso2.carbon.mediation.dependency.mgt.services.DependencyManagementService;
 import org.wso2.carbon.mediation.initializer.ServiceBusConstants;
 import org.wso2.carbon.mediation.initializer.ServiceBusUtils;
@@ -64,10 +63,8 @@ import java.util.Set;
 
 /**
  * @scr.component name="org.apache.stratos.load.balancer.internal.LoadBalancerServiceComponent" 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="0..1" policy="dynamic" bind="setDistributedMapProvider" unbind="unsetDistributedMapProvider"
+ * @scr.reference name="distributedObjectProvider" interface="org.apache.stratos.common.clustering.DistributedObjectProvider"
+ *                cardinality="1..1" policy="dynamic" bind="setDistributedObjectProvider" unbind="unsetDistributedObjectProvider"
  * @scr.reference name="configuration.context.service" interface="org.wso2.carbon.utils.ConfigurationContextService"
  *                cardinality="1..1" policy="dynamic" bind="setConfigurationContextService" unbind="unsetConfigurationContextService"
  * @scr.reference name="synapse.config.service" interface="org.wso2.carbon.mediation.initializer.services.SynapseConfigurationService"
@@ -417,19 +414,11 @@ public class LoadBalancerServiceComponent {
         ServiceReferenceHolder.getInstance().setRealmService(null);
     }
 
-    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
-        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+    protected void setDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedObjectProvider(distributedObjectProvider);
     }
 
-    public void unsetHazelcastInstance(HazelcastInstance hazelcastInstance) {
-        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
-    }
-
-    protected void setDistributedMapProvider(DistributedMapProvider mapProvider) {
-        ServiceReferenceHolder.getInstance().setDistributedMapProvider(mapProvider);
-    }
-
-    protected void unsetDistributedMapProvider(DistributedMapProvider mapProvider) {
-        ServiceReferenceHolder.getInstance().setDistributedMapProvider(null);
+    protected void unsetDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedObjectProvider(null);
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/7978da46/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/ServiceReferenceHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/ServiceReferenceHolder.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/ServiceReferenceHolder.java
index 719eb10..54e9f25 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/ServiceReferenceHolder.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/ServiceReferenceHolder.java
@@ -19,14 +19,13 @@
 
 package org.apache.stratos.load.balancer.internal;
 
-import com.hazelcast.core.HazelcastInstance;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 import org.apache.stratos.load.balancer.exception.TenantAwareLoadBalanceEndpointException;
 import org.apache.synapse.config.SynapseConfiguration;
-import org.wso2.carbon.caching.impl.DistributedMapProvider;
 import org.wso2.carbon.mediation.dependency.mgt.services.DependencyManagementService;
 import org.wso2.carbon.registry.core.session.UserRegistry;
 import org.wso2.carbon.user.core.service.RealmService;
@@ -45,9 +44,8 @@ public class ServiceReferenceHolder {
     private UserRegistry configRegistry;
     private UserRegistry governanceRegistry;
     private DependencyManagementService dependencyManager;
-    private DistributedMapProvider distributedMapProvider;
-    private HazelcastInstance hazelcastInstance;
     private RealmService realmService;
+    private DistributedObjectProvider distributedObjectProvider;
 
     private ServiceReferenceHolder() {
     }
@@ -130,19 +128,11 @@ public class ServiceReferenceHolder {
         this.configCtxt = configCtxt;
     }
 
-    public void setDistributedMapProvider(DistributedMapProvider distributedMapProvider) {
-        this.distributedMapProvider = distributedMapProvider;
+    public void setDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        this.distributedObjectProvider = distributedObjectProvider;
     }
 
-    public DistributedMapProvider getDistributedMapProvider() {
-        return distributedMapProvider;
-    }
-
-    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
-        this.hazelcastInstance = hazelcastInstance;
-    }
-
-    public HazelcastInstance getHazelcastInstance() {
-        return hazelcastInstance;
+    public DistributedObjectProvider getDistributedObjectProvider() {
+        return distributedObjectProvider;
     }
 }