Author: kfujino Date: Mon Jul 9 10:45:43 2012 New Revision: 1359044 URL: http://svn.apache.org/viewvc?rev=1359044&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53513. Fix race condition between the processing of session sync message and transfer complete message.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java?rev=1359044&r1=1359043&r2=1359044&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java Mon Jul 9 10:45:43 2012 @@ -45,6 +45,7 @@ import org.apache.catalina.ha.session.Cl import org.apache.catalina.ha.session.DeltaManager; import org.apache.catalina.ha.session.JvmRouteBinderValve; import org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener; +import org.apache.catalina.ha.session.SessionMessage; import org.apache.catalina.ha.util.IDynamicProperty; import org.apache.catalina.tribes.Channel; import org.apache.catalina.tribes.ChannelListener; @@ -799,15 +800,20 @@ public class SimpleTcpCluster extends Li public void send(ClusterMessage msg, Member dest) { try { msg.setAddress(getLocalMember()); + int sendOptions = channelSendOptions; + if (msg instanceof SessionMessage + && ((SessionMessage)msg).getEventType() == SessionMessage.EVT_ALL_SESSION_DATA) { + sendOptions = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK|Channel.SEND_OPTIONS_USE_ACK; + } if (dest != null) { if (!getLocalMember().equals(dest)) { - channel.send(new Member[] {dest}, msg,channelSendOptions); + channel.send(new Member[] {dest}, msg, sendOptions); } else log.error("Unable to send message to local member " + msg); } else { Member[] destmembers = channel.getMembers(); if (destmembers.length>0) - channel.send(destmembers,msg,channelSendOptions); + channel.send(destmembers,msg, sendOptions); else if (log.isDebugEnabled()) log.debug("No members in cluster, ignoring message:"+msg); } Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1359044&r1=1359043&r2=1359044&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Jul 9 10:45:43 2012 @@ -86,6 +86,10 @@ Investigations showed that this option had no effect for Cluster Channel Receivers it was removed. (markt) </fix> + <fix> + <bug>53513</bug>: Fix race condition between the processing of session + sync message and transfer complete message. (kfujino) + </fix> </changelog> </subsection> <subsection name="Web applications"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org