Repository: incubator-stratos
Updated Branches:
  refs/heads/master 1f615a1b0 -> 102c997df


Fixed concurrent modification error in CompleteTopologyMessageProcessor


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

Branch: refs/heads/master
Commit: 1c9ad1cac1910d94abd10427e7ae66febe98ee7c
Parents: d926386
Author: Imesh Gunaratne <[email protected]>
Authored: Tue Mar 4 00:10:20 2014 -0500
Committer: Imesh Gunaratne <[email protected]>
Committed: Tue Mar 4 00:10:20 2014 -0500

----------------------------------------------------------------------
 .../CompleteTopologyMessageProcessor.java       | 27 ++++++++++++++------
 1 file changed, 19 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1c9ad1ca/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/CompleteTopologyMessageProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/CompleteTopologyMessageProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/CompleteTopologyMessageProcessor.java
index 2a8850a..3ca0370 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/CompleteTopologyMessageProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/CompleteTopologyMessageProcessor.java
@@ -31,6 +31,9 @@ import 
org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilte
 import org.apache.stratos.messaging.message.processor.MessageProcessor;
 import org.apache.stratos.messaging.util.Util;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class CompleteTopologyMessageProcessor extends MessageProcessor {
 
     private static final Log log = 
LogFactory.getLog(CompleteTopologyMessageProcessor.class);
@@ -74,12 +77,16 @@ public class CompleteTopologyMessageProcessor extends 
MessageProcessor {
             // Apply cluster filter
             if (TopologyClusterFilter.getInstance().isActive()) {
                 for (Service service : topology.getServices()) {
+                    List<Cluster> clustersToRemove = new ArrayList<Cluster>();
                     for (Cluster cluster : service.getClusters()) {
                         if 
(TopologyClusterFilter.getInstance().clusterIdExcluded(cluster.getClusterId())) 
{
-                            service.removeCluster(cluster.getClusterId());
-                            if (log.isDebugEnabled()) {
-                                log.debug(String.format("Cluster is excluded: 
[cluster] %s", cluster.getClusterId()));
-                            }
+                            clustersToRemove.add(cluster);
+                        }
+                    }
+                    for(Cluster cluster : clustersToRemove) {
+                        service.removeCluster(cluster);
+                        if (log.isDebugEnabled()) {
+                            log.debug(String.format("Cluster is excluded: 
[cluster] %s", cluster.getClusterId()));
                         }
                     }
                 }
@@ -89,12 +96,16 @@ public class CompleteTopologyMessageProcessor extends 
MessageProcessor {
             if (TopologyMemberFilter.getInstance().isActive()) {
                 for (Service service : topology.getServices()) {
                     for (Cluster cluster : service.getClusters()) {
+                        List<Member> membersToRemove = new ArrayList<Member>();
                         for(Member member : cluster.getMembers()) {
                             
if(TopologyMemberFilter.getInstance().lbClusterIdExcluded(member.getLbClusterId()))
 {
-                                if (log.isDebugEnabled()) {
-                                    log.debug(String.format("Member is 
excluded: [member] %s [lb-cluster-id] %s", member.getMemberId(), 
member.getLbClusterId()));
-                                }
-                                cluster.removeMember(member);
+                                membersToRemove.add(member);
+                            }
+                        }
+                        for(Member member : membersToRemove) {
+                            cluster.removeMember(member);
+                            if (log.isDebugEnabled()) {
+                                log.debug(String.format("Member is excluded: 
[member] %s [lb-cluster-id] %s", member.getMemberId(), 
member.getLbClusterId()));
                             }
                         }
                     }

Reply via email to