Hi All,

At some circumstance we have seen following exception while using geode-1.1.0 
and trying to do Function Execution:

[severe 2018/05/22 01:32:31.964 EDT Node-7ccee253-7f00-4670-960a-3ba6e5a2365b 
<Function Execution Processor22> tid=0x58] ack read exception
org.apache.geode.ToDataException: toData failed on DataSerializable class 
org.apache.geode.internal.cache.UpdateOperation$UpdateMessage
        at 
org.apache.geode.internal.InternalDataSerializer.invokeToData(InternalDataSerializer.java:2436)
        at 
org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1446)
        at 
org.apache.geode.internal.tcp.MsgStreamer.writeMessage(MsgStreamer.java:232)
        at 
org.apache.geode.distributed.internal.direct.DirectChannel.sendToMany(DirectChannel.java:377)
        at 
org.apache.geode.distributed.internal.direct.DirectChannel.sendToOne(DirectChannel.java:237)
        at 
org.apache.geode.distributed.internal.direct.DirectChannel.send(DirectChannel.java:603)
        at 
org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.directChannelSend(GMSMembershipManager.java:1684)
        at 
org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.send(GMSMembershipManager.java:1875)
        at 
org.apache.geode.distributed.internal.DistributionChannel.send(DistributionChannel.java:82)
        at 
org.apache.geode.distributed.internal.DistributionManager.sendOutgoing(DistributionManager.java:3416)
        at 
org.apache.geode.distributed.internal.DistributionManager.sendMessage(DistributionManager.java:3453)
        at 
org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:376)
        at 
org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:442)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at 
org.apache.geode.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:621)
        at 
org.apache.geode.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:1067)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: An Exception was thrown while 
serializing.
        at 
org.apache.geode.internal.tcp.MsgStreamer.writeAsSerializedByteArray(MsgStreamer.java:930)
        at 
org.apache.geode.DataSerializer.writeObjectAsByteArray(DataSerializer.java:1305)
        at 
org.apache.geode.internal.cache.DistributedCacheOperation.writeValue(DistributedCacheOperation.java:124)
        at 
org.apache.geode.internal.cache.UpdateOperation$UpdateMessage.toData(UpdateOperation.java:419)
        at 
org.apache.geode.internal.InternalDataSerializer.invokeToData(InternalDataSerializer.java:2402)
        ... 61 more
Caused by: java.io.NotSerializableException: dataobject.PolicyInfo
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
        at 
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
        at 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
        at 
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)

At the same time, we have experienced OOM on our jvm and heapdump was 
generated. Heapdump analysis showed that nearly half of the heap (16 GB of 32 
GB) is consumed by SSLSocketImpl objects. Dominator Tree was topped by 
'Function Execution Processor22' thread, which is mentioned above in the 
stacktrace including serialization exception.


So the main question is whether having NotSerializableException exception in 
sendMessage() flow could result to leak of not closed connections. Connection 
closing calls are spread over the code and is hard to track them and I'm not 
sure If org.apache.geode.internal.tcp.MsgStreamer#close is the one that is 
responsible to close connections in this case. But if so, connections will not 
be closed here as due to abovementioned NotSerializableException flushedBytes 
will not be updated in org.apache.geode.internal.tcp.MsgStreamer#writeMessage.



Can someone assist us to understand if this exception can yield to the 
SSLSocketImpl leak or we should look into another direction?



Thanks,

Vahram.

Reply via email to