https://bz.apache.org/bugzilla/show_bug.cgi?id=62773
Bug ID: 62773
Summary: Change DeltaManager to handle session deserialization
problems more robustly
Product: Tomcat 9
Version: 9.0.12
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P2
Component: Cluster
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: -----
See discussion at
http://mail-archives.apache.org/mod_mbox/tomcat-dev/201809.mbox/%3C694b5737-fb87-a976-440f-2ed0719c1e1a%40claborn.net%3E
Problems:
1. When processing a received "all sessions" message, and there is an Exception
when deserializing a session, there is no logging of what session field or
attribute caused the error. This makes it very difficult for the application
developer to diagnose and correct problems in the application that caused the
error.
2. When such an exception occurs, the session in error and all remaining
sessions in that chunk (sendAllSessionsSize) are discarded by the receiving
node. There would be significantly less user impact if only the session in
error was discarded.
I am working on a patch that will address these issues in DeltaManager. Changes
in that patch:
1. Update
org.apache.catalina.ha.session.DeltaManager.deserializeSessions(byte[])
and
org.apache.catalina.ha.session.DeltaSession.doReadObject(ObjectInput)
to produce a more detailed error message when a session is in
error. New error message includes: the session index in the list of
sessions, the session ID, the last field or attribute that was
attempted to be read.
2. Introduce new XML attribute verifySerializedSessions for DeltaManager with a
default value of false (since the true setting will result in significant
overhead when sending all sessions).
3. If verifySerializedSessions="true",
org.apache.catalina.ha.session.DeltaManager.serializeSessions(Session[])
will first serialize each session then immediately deserialize it.
If all is good, send the session as usual. If any errors are
encountered, create and send a dummy session with a known session ID
instead. (This keeps the session count, which has already been put
in the output stream, correct for the receiving node.)
4. Update
org.apache.catalina.ha.session.DeltaManager.deserializeSessions(byte[])
to discard any received session that has the known dummy session ID.
I'll will attach the patch here when it is ready.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]