Bug 47478 - DeltaSession ignores notifyListenersOnReplication when BackupManager is used.
Summary: DeltaSession ignores notifyListenersOnReplication when BackupManager is used.
Status: RESOLVED FIXED
Alias: None
Product: Tomcat 6
Classification: Unclassified
Component: Cluster (show other bugs)
Version: 6.0.20
Hardware: All All
: P2 normal (vote)
Target Milestone: default
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-07-06 03:05 UTC by Keiichi Fujino
Modified: 2009-07-06 08:45 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
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.