Bug 47478

Summary: DeltaSession ignores notifyListenersOnReplication when BackupManager is used.
Product: Tomcat 6 Reporter: Keiichi Fujino <fujino.keiichi>
Component: ClusterAssignee: Tomcat Developers Mailing List <dev>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: 6.0.20   
Target Milestone: default   
Hardware: All   
OS: All   

Description Keiichi Fujino 2009-07-06 03:05:17 UTC
When BackupManager is used,
DeltaSession notifies session listener even if notifyListenersOnReplication is set to false. 

The cause is in the following o.a.c.h.s.DeltaSession#applyDiff's codes. 

public void applyDiff(byte[] diff, int offset, int length) throws IOException, ClassNotFoundException {
    try {
        ...
            getDeltaRequest().execute(this);
        } finally {
            Thread.currentThread().setContextClassLoader(contextLoader);
        }
    }finally {
        unlock();
    }
}

DeltaSession always notifies the session listener regardless of the value of notifyListenersOnReplication. 
Do not notify the session listener when notifyListenersOnReplication is set to false. 

I think that I should add notifyListenersOnReplication to the second parameter 
when o.a.c.h.s.DeltaRequest#execute is invoked. 
For instance, as follows.

[start.]

Index: java/org/apache/catalina/ha/session/DeltaSession.java
===================================================================
--- java/org/apache/catalina/ha/session/DeltaSession.java	(revision 763870)
+++ java/org/apache/catalina/ha/session/DeltaSession.java	(working copy)
@@ -175,7 +175,7 @@
                     ClassLoader[] loaders = getClassLoaders();
                     if (loaders != null && loaders.length > 0)
                         Thread.currentThread().setContextClassLoader(loaders[0]);
-                    getDeltaRequest().execute(this);
+                    getDeltaRequest().execute(this, ((ClusterManager) getManager()).isNotifyListenersOnReplication());
                 } finally {
                     Thread.currentThread().setContextClassLoader(contextLoader);
                 }

[end.]

Best regards
Comment 1 Filip Hanik 2009-07-06 08:45:59 UTC
Fixed in revision 791524.
Suggested for inclusion in Tomcat 6.