From 2de4822a1682b69b0aebd81408b435a8cf37bbe0 Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 6 Sep 2010 12:07:42 +0000 Subject: [PATCH] If a ping message fails, removed the failed members from the map rather than propagating the exception git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@993007 13f79535-47bb-0310-9956-ffa450edef68 --- .../tribes/tipis/AbstractReplicatedMap.java | 25 +++++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java b/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java index 0a5e695ed..c4f469789 100644 --- a/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java +++ b/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java @@ -34,6 +34,7 @@ import java.util.concurrent.ConcurrentHashMap; 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 AbstractReplicatedMap extends ConcurrentHashMap implements 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) { -- 2.11.0