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 2013/12/24 17:15:22 UTC
git commit: Fixed topology event receiving logic in load balancer
topology receiver
Updated Branches:
refs/heads/master 6b8a036ce -> 58b6d9974
Fixed topology event receiving logic in load balancer topology receiver
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/58b6d997
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/58b6d997
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/58b6d997
Branch: refs/heads/master
Commit: 58b6d99746fde6020f331158518c05d00b86d830
Parents: 6b8a036
Author: Imesh Gunaratne <im...@apache.org>
Authored: Tue Dec 24 21:45:13 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Dec 24 21:45:13 2013 +0530
----------------------------------------------------------------------
.../balancer/LoadBalancerTopologyReceiver.java | 52 ++++++++++++++------
1 file changed, 36 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58b6d997/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
index 7a0d9b5..6128037 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
@@ -25,6 +25,7 @@ import org.apache.stratos.load.balancer.context.LoadBalancerContext;
import org.apache.stratos.load.balancer.context.LoadBalancerContextUtil;
import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.messaging.domain.topology.Member;
+import org.apache.stratos.messaging.domain.topology.MemberStatus;
import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.event.Event;
import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent;
@@ -84,7 +85,13 @@ public class LoadBalancerTopologyReceiver implements Runnable {
TopologyManager.acquireReadLock();
for (Service service : TopologyManager.getTopology().getServices()) {
for (Cluster cluster : service.getClusters()) {
- LoadBalancerContextUtil.addClusterToLbContext(cluster);
+ if (clusterHasActiveMembers(cluster)) {
+ LoadBalancerContextUtil.addClusterToLbContext(cluster);
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Cluster does not have any active members");
+ }
+ }
}
}
} finally {
@@ -92,9 +99,9 @@ public class LoadBalancerTopologyReceiver implements Runnable {
}
}
- private boolean hasActiveMembers(Cluster cluster) {
+ private boolean clusterHasActiveMembers(Cluster cluster) {
for (Member member : cluster.getMembers()) {
- if (member.isActive()) {
+ if (member.getStatus() == MemberStatus.Activated) {
return true;
}
}
@@ -107,14 +114,30 @@ public class LoadBalancerTopologyReceiver implements Runnable {
try {
TopologyManager.acquireReadLock();
- // Add cluster to the context when its first member is activated
+ // Add cluster to load balancer context when its first member is activated
MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent) event;
- Cluster cluster = LoadBalancerContext.getInstance().getClusterIdClusterMap().getCluster(memberActivatedEvent.getClusterId());
- if (cluster != null) {
- LoadBalancerContextUtil.addClusterToLbContext(cluster);
+ if (LoadBalancerContext.getInstance().getClusterIdClusterMap().containsCluster(memberActivatedEvent.getClusterId())) {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Cluster exists in load balancer context: [service] %s [cluster] %s",
+ memberActivatedEvent.getServiceName(), memberActivatedEvent.getClusterId()));
+ }
+ return;
+ }
+ // Cluster not found in load balancer context, add it
+ Service service = TopologyManager.getTopology().getService(memberActivatedEvent.getServiceName());
+ if (service != null) {
+ Cluster cluster = service.getCluster(memberActivatedEvent.getClusterId());
+ if (cluster != null) {
+ LoadBalancerContextUtil.addClusterToLbContext(cluster);
+ } else {
+ if (log.isErrorEnabled()) {
+ log.error(String.format("Cluster not found in topology: [service] %s [cluster] %s",
+ memberActivatedEvent.getServiceName(), memberActivatedEvent.getClusterId()));
+ }
+ }
} else {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Cluster not found in cluster id cluster map: [cluster] %s", memberActivatedEvent.getClusterId()));
+ if (log.isErrorEnabled()) {
+ log.error(String.format("Service not found in topology: [service] %s", memberActivatedEvent.getServiceName()));
}
}
} finally {
@@ -132,12 +155,11 @@ public class LoadBalancerTopologyReceiver implements Runnable {
ClusterRemovedEvent clusterRemovedEvent = (ClusterRemovedEvent) event;
Cluster cluster = LoadBalancerContext.getInstance().getClusterIdClusterMap().getCluster(clusterRemovedEvent.getClusterId());
if (cluster != null) {
- for (String hostName : cluster.getHostNames()) {
- LoadBalancerContextUtil.removeClusterFromLbContext(hostName);
- }
+ LoadBalancerContextUtil.removeClusterFromLbContext(cluster.getClusterId());
} else {
if (log.isWarnEnabled()) {
- log.warn(String.format("Cluster not found in cluster id cluster map: [cluster] %s", clusterRemovedEvent.getClusterId()));
+ log.warn(String.format("Cluster not found in load balancer context: [service] %s [cluster] %s",
+ clusterRemovedEvent.getServiceName(), clusterRemovedEvent.getClusterId()));
}
}
} finally {
@@ -156,9 +178,7 @@ public class LoadBalancerTopologyReceiver implements Runnable {
Service service = TopologyManager.getTopology().getService(serviceRemovedEvent.getServiceName());
if (service != null) {
for (Cluster cluster : service.getClusters()) {
- for (String hostName : cluster.getHostNames()) {
- LoadBalancerContextUtil.removeClusterFromLbContext(hostName);
- }
+ LoadBalancerContextUtil.removeClusterFromLbContext(cluster.getClusterId());
}
} else {
if (log.isWarnEnabled()) {