Project: Tomcat
Bug 49924 When non-primary node changes into a primary node, isPrimarySession is not changed to true.
Reported: 2010-09-14 03:23:07 | Status: resolved fixed

If BackupManager is used, when a primary node is switched, DeltaSession#isPrimarySession is not changed to true. Non-primary node changes into a primary node when a primary node is stopped or we get a non-primary session. If a primary node is stopped, a primary node is switched. In AbstractReplicatedMap, when a primary node is switched, MapOwner(BackupManager)#objectMadePrimay is called. However, isPrimarySession does not change to true in this method. =====BackupManager#objectMadePrimay===== public void objectMadePrimay(Object key, Object value) { if (value!=null && value instanceof DeltaSession) { DeltaSession session = (DeltaSession)value; synchronized (session) { session.access(); session.endAccess(); } } } ===== If we get a non-primary session, a primary node is switched. However, isPrimarySession does not change to true. It is only a change of primary node. I made a patch. It contains the following. isPrimarySession is set to true in BackupManager#objectMadePrimay. When get() is called in non-primary node, MapOwner#objectMadePrimay is called. Best regards.

Files changed in fix:
java/org/apache/catalina/ha/session/BackupManager.java java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java