tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rj...@apache.org
Subject svn commit: r818062 - in /tomcat/trunk/java/org/apache/catalina/ha/session: DeltaManager.java DeltaSession.java
Date Wed, 23 Sep 2009 11:28:14 GMT
Author: rjung
Date: Wed Sep 23 11:28:14 2009
New Revision: 818062

URL: http://svn.apache.org/viewvc?rev=818062&view=rev
Log:
DeltaManager needs to replicate changed attributes even if session
gets invalidated. Otherwise session listeners will not see the right
data on the secondary nodes.

Port of r818061 from TC 5.5.x.

Modified:
    tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
    tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java

Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=818062&r1=818061&r2=818062&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Wed Sep 23 11:28:14
2009
@@ -1108,6 +1108,25 @@
      * @return a SessionMessage to be sent,
      */
     public ClusterMessage requestCompleted(String sessionId) {
+         return requestCompleted(sessionId, false);
+     }
+
+     /**
+      * When the request has been completed, the replication valve will notify
+      * the manager, and the manager will decide whether any replication is
+      * needed or not. If there is a need for replication, the manager will
+      * create a session message and that will be replicated. The cluster
+      * determines where it gets sent.
+      * 
+      * Session expiration also calls this method, but with expires == true.
+      * 
+      * @param sessionId -
+      *            the sessionId that just completed.
+      * @param expires -
+      *            whether this method has been called during session expiration
+      * @return a SessionMessage to be sent,
+      */
+     public ClusterMessage requestCompleted(String sessionId, boolean expires) {
         DeltaSession session = null;
         try {
             session = (DeltaSession) findSession(sessionId);
@@ -1129,7 +1148,7 @@
                 }  
             }
             if(!isDeltaRequest) {
-                if(!session.isPrimarySession()) {               
+                if(!expires && !session.isPrimarySession()) {
                     counterSend_EVT_SESSION_ACCESSED++;
                     msg = new SessionMessageImpl(getName(),
                                                  SessionMessage.EVT_SESSION_ACCESSED, 
@@ -1145,9 +1164,10 @@
                     log.debug(sm.getString("deltaManager.createMessage.delta",getName(),
sessionId));
                 }
             }
-            session.setPrimarySession(true);
+            if (!expires)
+                session.setPrimarySession(true);
             //check to see if we need to send out an access message
-            if ((msg == null)) {
+            if (!expires && (msg == null)) {
                 long replDelta = System.currentTimeMillis() - session.getLastTimeReplicated();
                 if (replDelta > (getMaxInactiveInterval() * 1000)) {
                     counterSend_EVT_SESSION_ACCESSED++;

Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java?rev=818062&r1=818061&r2=818062&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java Wed Sep 23 11:28:14
2009
@@ -38,7 +38,9 @@
 import org.apache.catalina.Manager;
 import org.apache.catalina.SessionListener;
 import org.apache.catalina.ha.ClusterManager;
+import org.apache.catalina.ha.CatalinaCluster;
 import org.apache.catalina.ha.ClusterSession;
+import org.apache.catalina.ha.ClusterMessage;
 import org.apache.catalina.realm.GenericPrincipal;
 import org.apache.catalina.session.StandardSession;
 import org.apache.catalina.tribes.io.ReplicationStream;
@@ -373,7 +375,24 @@
     }
 
     public void expire(boolean notify, boolean notifyCluster) {
+        if (expiring)
+            return;
         String expiredId = getIdInternal();
+
+        if(expiredId != null && manager != null &&
+           manager instanceof DeltaManager) {
+            DeltaManager dmanager = (DeltaManager)manager;
+            CatalinaCluster cluster = dmanager.getCluster();
+            ClusterMessage msg = dmanager.requestCompleted(expiredId, true);
+            if (msg != null) {
+                if(dmanager.doDomainReplication()) {
+                    cluster.sendClusterDomain(msg);
+                } else {
+                    cluster.send(msg);
+                }
+            }
+        }
+
         super.expire(notify);
 
         if (notifyCluster) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message