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