Author: kfujino Date: Wed Jun 17 08:12:35 2015 New Revision: 1685935 URL: http://svn.apache.org/r1685935 Log: When failed to replication, rather than all member is handled as a failed member, exclude the failure members from backup members.
Modified: tomcat/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java Modified: tomcat/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java?rev=1685935&r1=1685934&r2=1685935&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java (original) +++ tomcat/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java Wed Jun 17 08:12:35 2015 @@ -17,12 +17,15 @@ package org.apache.catalina.tribes.tipis; import java.io.Serializable; +import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import org.apache.catalina.tribes.Channel; import org.apache.catalina.tribes.ChannelException; +import org.apache.catalina.tribes.ChannelException.FaultyMember; import org.apache.catalina.tribes.Member; +import org.apache.catalina.tribes.RemoteProcessException; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -131,12 +134,28 @@ public class ReplicatedMap<K,V> extends if (backup == null || backup.length == 0) return null; - //publish the data out to all nodes - MapMessage msg = new MapMessage(getMapContextName(), MapMessage.MSG_COPY, false, - (Serializable) key, (Serializable) value, null,channel.getLocalMember(false), backup); - - getChannel().send(getMapMembers(), msg, getChannelSendOptions()); - + try { + + //publish the data out to all nodes + MapMessage msg = new MapMessage(getMapContextName(), MapMessage.MSG_COPY, false, + (Serializable) key, (Serializable) value, null,channel.getLocalMember(false), backup); + + getChannel().send(getMapMembers(), msg, getChannelSendOptions()); + } catch (ChannelException e) { + FaultyMember[] faultyMembers = e.getFaultyMembers(); + if (faultyMembers.length == 0) throw e; + ArrayList<Member> faulty = new ArrayList<>(); + for (FaultyMember faultyMember : faultyMembers) { + if (!(faultyMember.getCause() instanceof RemoteProcessException)) { + faulty.add(faultyMember.getMember()); + } + } + Member[] realFaultyMembers = faulty.toArray(new Member[faulty.size()]); + if (realFaultyMembers.length != 0) { + backup = excludeFromSet(realFaultyMembers, backup); + if (backup.length == 0) throw e; + } + } return backup; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org