This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit c013959ed35fdd58ba8f9f4709b6e225d53e2fe8 Author: Mark Thomas <ma...@apache.org> AuthorDate: Thu May 16 10:48:17 2019 +0100 Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=63441 Further streamline the processing of session creation messages in the DeltaManager to reduce the possibility of a session update message being processed before the session has been created. --- .../apache/catalina/ha/session/DeltaManager.java | 5 +++- .../apache/catalina/ha/session/DeltaSession.java | 32 ++++++++++------------ webapps/docs/changelog.xml | 10 +++++++ 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/java/org/apache/catalina/ha/session/DeltaManager.java b/java/org/apache/catalina/ha/session/DeltaManager.java index 321193b..065e5af 100644 --- a/java/org/apache/catalina/ha/session/DeltaManager.java +++ b/java/org/apache/catalina/ha/session/DeltaManager.java @@ -474,13 +474,16 @@ public class DeltaManager extends ClusterManagerBase{ */ @Override public Session createEmptySession() { - return getNewDeltaSession() ; + return new DeltaSession(this); } /** * Get new session class to be used in the doLoad() method. * @return a new session + * + * @deprecated Unused. This will be removed in Tomcat 10. */ + @Deprecated protected DeltaSession getNewDeltaSession() { return new DeltaSession(this); } diff --git a/java/org/apache/catalina/ha/session/DeltaSession.java b/java/org/apache/catalina/ha/session/DeltaSession.java index 3e375f3..231b1be 100644 --- a/java/org/apache/catalina/ha/session/DeltaSession.java +++ b/java/org/apache/catalina/ha/session/DeltaSession.java @@ -101,7 +101,9 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus */ public DeltaSession(Manager manager) { super(manager); - this.resetDeltaRequest(); + boolean recordAllActions = manager instanceof ClusterManagerBase && + ((ClusterManagerBase)manager).isRecordAllActions(); + deltaRequest = new DeltaRequest(getIdInternal(), recordAllActions); } // ----------------------------------------------------- ReplicatedMapEntry @@ -291,7 +293,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus public void setMaxInactiveInterval(int interval, boolean addDeltaRequest) { super.maxInactiveInterval = interval; - if (addDeltaRequest && (deltaRequest != null)) { + if (addDeltaRequest) { lock(); try { deltaRequest.setMaxInactiveInterval(interval); @@ -314,7 +316,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus public void setNew(boolean isNew, boolean addDeltaRequest) { super.setNew(isNew); - if (addDeltaRequest && (deltaRequest != null)){ + if (addDeltaRequest){ lock(); try { deltaRequest.setNew(isNew); @@ -342,7 +344,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus lock(); try { super.setPrincipal(principal); - if (addDeltaRequest && (deltaRequest != null)) + if (addDeltaRequest) deltaRequest.setPrincipal(principal); } finally { unlock(); @@ -364,8 +366,9 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus lock(); try { super.setAuthType(authType); - if (addDeltaRequest && (deltaRequest != null)) + if (addDeltaRequest) { deltaRequest.setAuthType(authType); + } } finally { unlock(); } @@ -510,7 +513,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus lock(); try { super.addSessionListener(listener); - if (addDeltaRequest && deltaRequest != null && listener instanceof ReplicatedSessionListener) { + if (addDeltaRequest && listener instanceof ReplicatedSessionListener) { deltaRequest.addSessionListener(listener); } } finally { @@ -527,7 +530,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus lock(); try { super.removeSessionListener(listener); - if (addDeltaRequest && deltaRequest != null && listener instanceof ReplicatedSessionListener) { + if (addDeltaRequest && listener instanceof ReplicatedSessionListener) { deltaRequest.removeSessionListener(listener); } } finally { @@ -592,21 +595,14 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus public void resetDeltaRequest() { lock(); try { - if (deltaRequest == null) { - boolean recordAllActions = manager instanceof ClusterManagerBase && - ((ClusterManagerBase)manager).isRecordAllActions(); - deltaRequest = new DeltaRequest(getIdInternal(), recordAllActions); - } else { - deltaRequest.reset(); - deltaRequest.setSessionId(getIdInternal()); - } + deltaRequest.reset(); + deltaRequest.setSessionId(getIdInternal()); } finally{ unlock(); } } public DeltaRequest getDeltaRequest() { - if (deltaRequest == null) resetDeltaRequest(); return deltaRequest; } @@ -682,7 +678,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus lock(); try { super.setAttribute(name,value, notify); - if (addDeltaRequest && deltaRequest != null && !exclude(name, value)) { + if (addDeltaRequest && !exclude(name, value)) { deltaRequest.setAttribute(name, value); } } finally { @@ -881,7 +877,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus if (value == null) return; super.removeAttributeInternal(name,notify); - if (addDeltaRequest && deltaRequest != null && !exclude(name, null)) { + if (addDeltaRequest && !exclude(name, null)) { deltaRequest.removeAttribute(name); } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 51daa4b..522757a 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -72,6 +72,16 @@ </fix> </changelog> </subsection> + <subsection name="Cluster"> + <changelog> + <fix> + <bug>63441</bug>: Further streamline the processing of session creation + messages in the <code>DeltaManager</code> to reduce the possibility of a + session update message being processed before the session has been + created. (markt) + </fix> + </changelog> + </subsection> <subsection name="Other"> <changelog> <update> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org