You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kf...@apache.org on 2015/10/19 06:51:36 UTC

svn commit: r1709347 - in /tomcat/tc8.0.x/trunk: java/org/apache/catalina/ha/session/DeltaManager.java webapps/docs/changelog.xml

Author: kfujino
Date: Mon Oct 19 04:51:36 2015
New Revision: 1709347

URL: http://svn.apache.org/viewvc?rev=1709347&view=rev
Log:
Optimize the session lock range in DeltaManager.requestCompleted.

Modified:
    tomcat/tc8.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
    tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1709347&r1=1709346&r2=1709347&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Mon Oct 19 04:51:36 2015
@@ -982,6 +982,7 @@ public class DeltaManager extends Cluste
       */
      public ClusterMessage requestCompleted(String sessionId, boolean expires) {
         DeltaSession session = null;
+        SessionMessage msg = null;
         try {
             session = (DeltaSession) findSession(sessionId);
             if (session == null) {
@@ -991,67 +992,16 @@ public class DeltaManager extends Cluste
             }
             DeltaRequest deltaRequest = session.getDeltaRequest();
             session.lock();
-            SessionMessage msg = null;
-            boolean isDeltaRequest = false ;
-            synchronized(deltaRequest) {
-                isDeltaRequest = deltaRequest.getSize() > 0 ;
-                if (isDeltaRequest) {
-                    counterSend_EVT_SESSION_DELTA++;
-                    byte[] data = serializeDeltaRequest(session,deltaRequest);
-                    msg = new SessionMessageImpl(getName(),
-                                                 SessionMessage.EVT_SESSION_DELTA,
-                                                 data,
-                                                 sessionId,
-                                                 sessionId + "-" + System.currentTimeMillis());
-                    session.resetDeltaRequest();
-                }
-            }
-            if(!isDeltaRequest) {
-                if(!expires && !session.isPrimarySession()) {
-                    counterSend_EVT_SESSION_ACCESSED++;
-                    msg = new SessionMessageImpl(getName(),
-                                                 SessionMessage.EVT_SESSION_ACCESSED,
-                                                 null,
-                                                 sessionId,
-                                                 sessionId + "-" + System.currentTimeMillis());
-                    if (log.isDebugEnabled()) {
-                        log.debug(sm.getString("deltaManager.createMessage.accessChangePrimary",
-                                getName(), sessionId));
-                    }
-                }
-            } else { // log only outside synch block!
-                if (log.isDebugEnabled()) {
-                    log.debug(sm.getString("deltaManager.createMessage.delta",
-                            getName(), sessionId));
-                }
-            }
-            if (!expires)
-                session.setPrimarySession(true);
-            //check to see if we need to send out an access message
-            if (!expires && (msg == null)) {
-                long replDelta = System.currentTimeMillis() - session.getLastTimeReplicated();
-                if (session.getMaxInactiveInterval() >=0 &&
-                        replDelta > (session.getMaxInactiveInterval() * 1000L)) {
-                    counterSend_EVT_SESSION_ACCESSED++;
-                    msg = new SessionMessageImpl(getName(),
-                                                 SessionMessage.EVT_SESSION_ACCESSED,
-                                                 null,
-                                                 sessionId,
-                                                 sessionId + "-" + System.currentTimeMillis());
-                    if (log.isDebugEnabled()) {
-                        log.debug(sm.getString("deltaManager.createMessage.access",
-                                getName(),sessionId));
-                    }
-                }
-
-            }
-
-            //update last replicated time
-            if (msg != null){
-               session.setLastTimeReplicated(System.currentTimeMillis());
-               msg.setTimestamp(session.getLastTimeReplicated());
+            if (deltaRequest.getSize() > 0) {
+                counterSend_EVT_SESSION_DELTA++;
+                byte[] data = serializeDeltaRequest(session,deltaRequest);
+                msg = new SessionMessageImpl(getName(),
+                                             SessionMessage.EVT_SESSION_DELTA,
+                                             data,
+                                             sessionId,
+                                             sessionId + "-" + System.currentTimeMillis());
+                session.resetDeltaRequest();
             }
-            return msg;
         } catch (IOException x) {
             log.error(sm.getString("deltaManager.createMessage.unableCreateDeltaRequest",
                     sessionId), x);
@@ -1059,7 +1009,49 @@ public class DeltaManager extends Cluste
         } finally {
             if (session!=null) session.unlock();
         }
+        if(msg == null) {
+            if(!expires && !session.isPrimarySession()) {
+                counterSend_EVT_SESSION_ACCESSED++;
+                msg = new SessionMessageImpl(getName(),
+                                             SessionMessage.EVT_SESSION_ACCESSED,
+                                             null,
+                                             sessionId,
+                                             sessionId + "-" + System.currentTimeMillis());
+                if (log.isDebugEnabled()) {
+                    log.debug(sm.getString("deltaManager.createMessage.accessChangePrimary",
+                            getName(), sessionId));
+                }
+            }
+        } else { // log only outside synch block!
+            if (log.isDebugEnabled()) {
+                log.debug(sm.getString("deltaManager.createMessage.delta", getName(), sessionId));
+            }
+        }
+        if (!expires) session.setPrimarySession(true);
+        //check to see if we need to send out an access message
+        if (!expires && (msg == null)) {
+            long replDelta = System.currentTimeMillis() - session.getLastTimeReplicated();
+            if (session.getMaxInactiveInterval() >=0 &&
+                    replDelta > (session.getMaxInactiveInterval() * 1000L)) {
+                counterSend_EVT_SESSION_ACCESSED++;
+                msg = new SessionMessageImpl(getName(),
+                                             SessionMessage.EVT_SESSION_ACCESSED,
+                                             null,
+                                             sessionId,
+                                             sessionId + "-" + System.currentTimeMillis());
+                if (log.isDebugEnabled()) {
+                    log.debug(sm.getString("deltaManager.createMessage.access",
+                            getName(),sessionId));
+                }
+            }
+        }
 
+        //update last replicated time
+        if (msg != null) {
+           session.setLastTimeReplicated(System.currentTimeMillis());
+           msg.setTimestamp(session.getLastTimeReplicated());
+        }
+        return msg;
     }
     /**
      * Reset manager statistics

Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1709347&r1=1709346&r2=1709347&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Mon Oct 19 04:51:36 2015
@@ -45,6 +45,14 @@
   issues do not "pop up" wrt. others).
 -->
 <section name="Tomcat 8.0.29 (markt)" rtext="in development">
+  <subsection name="Cluster">
+    <changelog>
+      <fix>
+        Optimize the session lock range in DeltaManager.requestCompleted.
+        (kfujino)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="jdbc-pool">
     <changelog>
       <fix>



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