I continue to have problems of this nature, although not with the exact symptom shown below. I've been able to identify some possible problems in my code that might have been causing some objects in the session to deserialize improperly. I've fixed those and have not seen those specific errors crop up again. I have another error that I'm working on now: some of my own objects serialize to/from JSON and the JSON string in the serialized session object has obviously been corrupted. I can't see how that could have happened, but I'm still working on it. So.... 2 big questions/ideas:

1) Any time the DeltaManager runs into an error deserializing the "all sessions" message, all sessions from the one with the error and later are lost. I realize it must currently be this way because once there is an error in the serialized stream there is no realistic way to find where the next session object begins in the stream. I'd like to be able to configure the Delta Manager to send the "all sessions" message in chunks of N sessions per message, where N can be configured in the XML. Doing this would limit the impact of a problematic session to only those in the same chunk. The final chunk would need some kind of marker so that the receiver knows that all sessions have been received. Any thoughts on this? I don't think it is possible in the current code. How hard would it be to make this change. If I were to code it, would it be considered for acceptance into the base code?

2) Is it possible that a session object could be accessed and used while it is being deserialized in another thread for the "all sessions" message to another host? This might explain the corruption I'm seeing.

PS - here's how I'm discovering the session objects that are in error. I have a channel interceptor that watches for the receipt of the "all sessions" message and writes it to disk then stops watching for that message. I copy that disk file to my development machine where I run a quick-and-dirty program that I wrote that emulates the processing of Delta Manager with some debugging in place so that I can see exactly which session had the problem and which attribute within that session. I'd also like to propose some updates to Delta Manager that would capture that information and put it into the error logging.


Mitch

On 09/07/2018 04:44 PM, Mitch Claborn wrote:
I'm using a cluster with the DeltaManager between two servers on Tomcat 9.0.11.  When I restart my "A" server, I sometimes see the error below. Peaking at the code in DeltaManager it appears that there is a problem in the serialized data stream when receiving all of the session data from the "B" server. Any ideas what could be causing this? It seems like that if there was something in a Session object that was not Serializable it would not even make it over the wire. Perhaps if something in a session did not serialize properly?

(From the code, it looks like all the sessions in the message after the error are lost, so this is kind of important.)

07-Sep-2018 16:09:53.220 SEVERE [Tribes-Task-Receiver[Catalina-Channel]-6] org.apache.catalina.ha.session.DeltaManager.deserializeSessions IOException while loading persisted sessions: [java.io.StreamCorruptedException: invalid type code: 00]
  java.io.StreamCorruptedException: invalid type code: 00
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1381)
    at java.io.ObjectInputStream.skipCustomData(ObjectInputStream.java:1984)     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1946)     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
    at org.apache.catalina.ha.session.DeltaSession.doReadObject(DeltaSession.java:748)     at org.apache.catalina.ha.session.DeltaSession.readObjectData(DeltaSession.java:569)     at org.apache.catalina.ha.session.DeltaManager.deserializeSessions(DeltaManager.java:613)     at org.apache.catalina.ha.session.DeltaManager.handleALL_SESSION_DATA(DeltaManager.java:1323)     at org.apache.catalina.ha.session.DeltaManager.messageReceived(DeltaManager.java:1162)     at org.apache.catalina.ha.session.DeltaManager.messageDataReceived(DeltaManager.java:917)     at org.apache.catalina.ha.session.ClusterSessionListener.messageReceived(ClusterSessionListener.java:77)     at org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:788)     at org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:771)     at org.apache.catalina.tribes.group.GroupChannel.messageReceived(GroupChannel.java:324)     at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91)     at org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor.messageReceived(TcpPingInterceptor.java:175)     at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91)     at org.apache.catalina.tribes.group.interceptors.TcpFailureDetector.messageReceived(TcpFailureDetector.java:116)     at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91)     at org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor.messageReceived(StaticMembershipInterceptor.java:96)     at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91)     at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91)     at org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor.messageReceived(ThroughputInterceptor.java:86)     at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91)     at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91)     at org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:274)     at org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:261)     at org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:213)     at org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:101)     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     at java.lang.Thread.run(Thread.java:745)





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to