[ 
https://issues.apache.org/jira/browse/GEODE-8501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bruce J Schuchardt updated GEODE-8501:
--------------------------------------
    Component/s: membership

> Thread waiting for a response hangs due to a deserialization error
> ------------------------------------------------------------------
>
>                 Key: GEODE-8501
>                 URL: https://issues.apache.org/jira/browse/GEODE-8501
>             Project: Geode
>          Issue Type: Improvement
>          Components: membership, messaging
>    Affects Versions: 1.14.0
>            Reporter: Bruce J Schuchardt
>            Priority: Major
>
> There was a failure that caused a hang due to a FetchEntryMessage reply 
> failing to deserialize.  This reply message had already deserialized its 
> reply processor ID, so there's no reason that the waiting thread couldn't 
> have been notified of the error so that it could wake up and process the 
> problem.
>  
> {noformat}
> [fatal 2020/09/16 14:04:59.318 PDT <P2P message reader for 
> rs-GEM-3059-QQ1128-1a0i32xlarge-hydra-client-36(peergemfire_2_3_host1_14238:14238)<ec><v37>:41011(version:VersionOrdinal[ordinal=125])
>  shared unordered uid=1 local port=50589 remote port=51132> tid=0x46] Error 
> deserializing message[fatal 2020/09/16 14:04:59.318 PDT <P2P message reader 
> for 
> rs-GEM-3059-QQ1128-1a0i32xlarge-hydra-client-36(peergemfire_2_3_host1_14238:14238)<ec><v37>:41011(version:VersionOrdinal[ordinal=125])
>  shared unordered uid=1 local port=50589 remote port=51132> tid=0x46] Error 
> deserializing messagejava.io.IOException: Could not create an instance of 
> org.apache.geode.internal.cache.partitioned.FetchEntryMessage$FetchEntryReplyMessage
>  . at 
> org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.invokeFromData(DSFIDSerializerImpl.java:330)
>  at 
> org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.create(DSFIDSerializerImpl.java:368)
>  at org.apache.geode.internal.DSFIDFactory.create(DSFIDFactory.java:1024) at 
> org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2387)
>  at 
> org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2401)
>  at 
> org.apache.geode.internal.tcp.Connection.readMessage(Connection.java:2930) at 
> org.apache.geode.internal.tcp.Connection.processInputBuffer(Connection.java:2751)
>  at 
> org.apache.geode.internal.tcp.Connection.readMessages(Connection.java:1619) 
> at org.apache.geode.internal.tcp.Connection.run(Connection.java:1456) at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>  at java.lang.Thread.run(Thread.java:748)Caused by: java.io.IOException: 
> Unknown header byte 109 at 
> org.apache.geode.internal.serialization.DscodeHelper.toDSCODE(DscodeHelper.java:40)
>  at 
> org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2494)
>  at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864) at 
> org.apache.geode.DataSerializer.readLinkedList(DataSerializer.java:2096) at 
> org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2574)
>  at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864) at 
> org.apache.geode.internal.cache.NonLocalRegionEntry.fromData(NonLocalRegionEntry.java:159)
>  at 
> org.apache.geode.internal.cache.EntrySnapshot.fromData(EntrySnapshot.java:282)
>  at 
> org.apache.geode.internal.cache.EntrySnapshot.<init>(EntrySnapshot.java:253) 
> at 
> org.apache.geode.internal.cache.partitioned.FetchEntryMessage$FetchEntryReplyMessage.fromData(FetchEntryMessage.java:309)
>  at 
> org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.invokeFromData(DSFIDSerializerImpl.java:317)
>  ... 11 more {noformat}
> Deserialization code for cache operations in Connection.java already handles 
> this sort of thing by using a thread local that is updated by the fromData 
> method of each cache operation.  ReplyMessage could do the same thing with a 
> new thread local and Connection.java could check that thread local in the 
> event of a deserialization error.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to