Author: fhanik Date: Thu Aug 9 16:46:47 2007 New Revision: 564428 URL: http://svn.apache.org/viewvc?view=rev&rev=564428 Log: backport from trunk, prevent premature session expiration
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java?view=diff&rev=564428&r1=564427&r2=564428 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java Thu Aug 9 16:46:47 2007 @@ -36,12 +36,14 @@ import java.util.Enumeration; import java.util.concurrent.ConcurrentHashMap; import org.apache.catalina.util.Enumerator; +import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner; +import org.apache.catalina.ha.session.DeltaSession; /** * @author Filip Hanik * @version 1.0 */ -public class ReplicatedContext extends StandardContext implements LifecycleListener { +public class ReplicatedContext extends StandardContext implements LifecycleListener,MapOwner { private int mapSendOptions = Channel.SEND_OPTIONS_DEFAULT; public static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog( ReplicatedContext.class ); protected boolean startComplete = false; @@ -193,5 +195,10 @@ } } + + public void objectMadePrimay(Object key, Object value) { + //noop + } + } Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java?view=diff&rev=564428&r1=564427&r2=564428 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java Thu Aug 9 16:46:47 2007 @@ -28,12 +28,14 @@ import org.apache.catalina.tribes.Channel; import org.apache.catalina.tribes.io.ReplicationStream; import org.apache.catalina.tribes.tipis.LazyReplicatedMap; +import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner; +import org.apache.catalina.tribes.tipis.AbstractReplicatedMap; /** [EMAIL PROTECTED] Filip Hanik [EMAIL PROTECTED] 1.0 */ -public class BackupManager extends StandardManager implements ClusterManager +public class BackupManager extends StandardManager implements ClusterManager, MapOwner { public static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog( BackupManager.class ); @@ -133,6 +135,15 @@ //========================================================================= // OVERRIDE THESE METHODS TO IMPLEMENT THE REPLICATION //========================================================================= + public void objectMadePrimay(Object key, Object value) { + if (value!=null && value instanceof DeltaSession) { + DeltaSession session = (DeltaSession)value; + synchronized (session) { + session.access(); + session.endAccess(); + } + } + } public Session createEmptySession() { return new DeltaSession(this); Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java?view=diff&rev=564428&r1=564427&r2=564428 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java Thu Aug 9 16:46:47 2007 @@ -113,7 +113,7 @@ /** * The owner of this map, ala a SessionManager for example */ - protected transient Object mapOwner; + protected transient MapOwner mapOwner; /** * External class loaders if serialization and deserialization is to be performed successfully. */ @@ -137,7 +137,14 @@ * Readable string of the mapContextName value */ protected transient String mapname = ""; + +//------------------------------------------------------------------------------ +// map owner interface +//------------------------------------------------------------------------------ + public static interface MapOwner { + public void objectMadePrimay(Object key, Object value); + } //------------------------------------------------------------------------------ // CONSTRUCTORS @@ -152,7 +159,7 @@ * @param loadFactor float - load factor, see HashMap * @param cls - a list of classloaders to be used for deserialization of objects. */ - public AbstractReplicatedMap(Object owner, + public AbstractReplicatedMap(MapOwner owner, Channel channel, long timeout, String mapContextName, @@ -185,7 +192,7 @@ * @param channelSendOptions int * @param cls ClassLoader[] */ - protected void init(Object owner, Channel channel, String mapContextName, long timeout, int channelSendOptions,ClassLoader[] cls) { + protected void init(MapOwner owner, Channel channel, String mapContextName, long timeout, int channelSendOptions,ClassLoader[] cls) { log.info("Initializing AbstractReplicatedMap with context name:"+mapContextName); this.mapOwner = owner; this.externalLoaders = cls; @@ -741,6 +748,8 @@ entry.setProxy(false); Member[] backup = publishEntryInfo(entry.getKey(), entry.getValue()); entry.setBackupNodes(backup); + mapOwner.objectMadePrimay(entry.getKey(),entry.getValue()); + } catch (ChannelException x) { log.error("Unable to relocate[" + entry.getKey() + "] to a new backup node", x); } @@ -1420,7 +1429,7 @@ return stateTransferred; } - public Object getMapOwner() { + public MapOwner getMapOwner() { return mapOwner; } @@ -1436,7 +1445,7 @@ return accessTimeout; } - public void setMapOwner(Object mapOwner) { + public void setMapOwner(MapOwner mapOwner) { this.mapOwner = mapOwner; } Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java?view=diff&rev=564428&r1=564427&r2=564428 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java Thu Aug 9 16:46:47 2007 @@ -26,6 +26,7 @@ import org.apache.catalina.tribes.group.RpcCallback; import org.apache.catalina.tribes.util.Arrays; import org.apache.catalina.tribes.UniqueId; +import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner; /** * A smart implementation of a stateful replicated map. uses primary/secondary backup strategy. @@ -68,7 +69,7 @@ implements RpcCallback, ChannelListener, MembershipListener { protected static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(LazyReplicatedMap.class); - + //------------------------------------------------------------------------------ // CONSTRUCTORS / DESTRUCTORS @@ -81,7 +82,7 @@ * @param initialCapacity int - the size of this map, see HashMap * @param loadFactor float - load factor, see HashMap */ - public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, float loadFactor, ClassLoader[] cls) { + public LazyReplicatedMap(MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity, float loadFactor, ClassLoader[] cls) { super(owner,channel,timeout,mapContextName,initialCapacity,loadFactor, Channel.SEND_OPTIONS_DEFAULT,cls); } @@ -92,7 +93,7 @@ * @param mapContextName String - unique name for this map, to allow multiple maps per channel * @param initialCapacity int - the size of this map, see HashMap */ - public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) { + public LazyReplicatedMap(MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) { super(owner, channel,timeout,mapContextName,initialCapacity, LazyReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls); } @@ -102,7 +103,7 @@ * @param timeout long - timeout for RPC messags * @param mapContextName String - unique name for this map, to allow multiple maps per channel */ - public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) { + public LazyReplicatedMap(MapOwner owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) { super(owner, channel,timeout,mapContextName, LazyReplicatedMap.DEFAULT_INITIAL_CAPACITY,LazyReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT, cls); } Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java?view=diff&rev=564428&r1=564427&r2=564428 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java Thu Aug 9 16:46:47 2007 @@ -24,6 +24,7 @@ import org.apache.catalina.tribes.Member; import org.apache.catalina.tribes.MembershipListener; import org.apache.catalina.tribes.group.RpcCallback; +import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner; /** * All-to-all replication for a hash map implementation. Each node in the cluster will carry an identical @@ -64,7 +65,7 @@ * @param initialCapacity int - the size of this map, see HashMap * @param loadFactor float - load factor, see HashMap */ - public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity,float loadFactor, ClassLoader[] cls) { + public ReplicatedMap(MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity,float loadFactor, ClassLoader[] cls) { super(owner,channel, timeout, mapContextName, initialCapacity, loadFactor, Channel.SEND_OPTIONS_DEFAULT, cls); } @@ -75,7 +76,7 @@ * @param mapContextName String - unique name for this map, to allow multiple maps per channel * @param initialCapacity int - the size of this map, see HashMap */ - public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) { + public ReplicatedMap(MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) { super(owner,channel, timeout, mapContextName, initialCapacity, AbstractReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT, cls); } @@ -85,7 +86,7 @@ * @param timeout long - timeout for RPC messags * @param mapContextName String - unique name for this map, to allow multiple maps per channel */ - public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) { + public ReplicatedMap(MapOwner owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) { super(owner, channel, timeout, mapContextName,AbstractReplicatedMap.DEFAULT_INITIAL_CAPACITY, AbstractReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]