Author: kfujino Date: Mon Oct 19 04:31:07 2015 New Revision: 1709343 URL: http://svn.apache.org/viewvc?rev=1709343&view=rev Log: Optimize the session lock range in DeltaManager.requestCompleted.
Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.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=1709343&r1=1709342&r2=1709343&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Mon Oct 19 04:31:07 2015 @@ -983,6 +983,8 @@ public class DeltaManager extends Cluste */ public ClusterMessage requestCompleted(String sessionId, boolean expires) { DeltaSession session = null; + SessionMessage msg = null; + boolean isDeltaRequest = false ; try { session = (DeltaSession) findSession(sessionId); if (session == null) { @@ -992,8 +994,6 @@ 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) { @@ -1007,52 +1007,6 @@ public class DeltaManager extends Cluste 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; } catch (IOException x) { log.error(sm.getString("deltaManager.createMessage.unableCreateDeltaRequest", sessionId), x); @@ -1060,7 +1014,50 @@ public class DeltaManager extends Cluste } finally { if (session!=null) session.unlock(); } + 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; } /** * Reset manager statistics --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org