Author: kfujino Date: Mon Oct 19 04:54:22 2015 New Revision: 1709348 URL: http://svn.apache.org/viewvc?rev=1709348&view=rev Log: Optimize the session lock range in DeltaManager.requestCompleted.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1709348&r1=1709347&r2=1709348&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Mon Oct 19 04:54:22 2015 @@ -978,6 +978,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) { @@ -987,71 +988,63 @@ 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()); - } - return msg; + 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(); + } } catch (IOException x) { log.error(sm.getString("deltaManager.createMessage.unableCreateDeltaRequest",sessionId), x); return null; }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/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1709348&r1=1709347&r2=1709348&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Oct 19 04:54:22 2015 @@ -58,6 +58,14 @@ issues do not "pop up" wrt. others). --> <section name="Tomcat 7.0.66 (violetagg)"> + <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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org