Author: markt
Date: Mon Sep  6 12:07:42 2010
New Revision: 993007

URL: http://svn.apache.org/viewvc?rev=993007&view=rev
Log:
If a ping message fails, removed the failed members from the map rather than 
propagating the exception

Modified:
    
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java?rev=993007&r1=993006&r2=993007&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java 
(original)
+++ 
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java 
Mon Sep  6 12:07:42 2010
@@ -34,6 +34,7 @@ import java.util.concurrent.ConcurrentHa
 
 import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.ChannelException.FaultyMember;
 import org.apache.catalina.tribes.ChannelListener;
 import org.apache.catalina.tribes.Heartbeat;
 import org.apache.catalina.tribes.Member;
@@ -253,14 +254,22 @@ public abstract class AbstractReplicated
                                         channel.getLocalMember(false),
                                         null);
         if ( channel.getMembers().length > 0 ) {
-            //send a ping, wait for all nodes to reply
-            Response[] resp = rpcChannel.send(channel.getMembers(), 
-                                              msg, RpcChannel.ALL_REPLY, 
-                                              (channelSendOptions),
-                                              (int) accessTimeout);
-            for (int i = 0; i < resp.length; i++) {
-                memberAlive(resp[i].getSource());
-            } //for
+            try {
+                //send a ping, wait for all nodes to reply
+                Response[] resp = rpcChannel.send(channel.getMembers(), 
+                                                  msg, RpcChannel.ALL_REPLY, 
+                                                  (channelSendOptions),
+                                                  (int) accessTimeout);
+                for (int i = 0; i < resp.length; i++) {
+                    memberAlive(resp[i].getSource());
+                }
+            } catch (ChannelException ce) {
+                // Handle known failed membersq
+                FaultyMember[] faultyMembers = ce.getFaultyMembers();
+                for (FaultyMember faultyMember : faultyMembers) {
+                    memberDisappeared(faultyMember.getMember());
+                }
+            }            
         }
         //update our map of members, expire some if we didn't receive a ping 
back
         synchronized (mapMembers) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to