Bug 49924

Summary: When non-primary node changes into a primary node, isPrimarySession is not changed to true.
Product: Tomcat 6 Reporter: Keiichi Fujino <kfujino>
Component: ClusterAssignee: Tomcat Developers Mailing List <dev>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: 6.0.29   
Target Milestone: default   
Hardware: All   
OS: All   
Attachments: I made a patch.

Description Keiichi Fujino 2010-09-14 03:23:07 UTC
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.
Comment 1 Keiichi Fujino 2010-09-14 03:26:53 UTC
Created attachment 26024 [details]
I made a patch.
Comment 2 Keiichi Fujino 2010-09-14 03:50:54 UTC
Fixed in trunk and proposed for 6.0.x
Comment 3 Keiichi Fujino 2010-10-05 01:34:45 UTC
This fix applied to 6.0, will be in 6.0.30 onwards.