[ https://issues.apache.org/jira/browse/GEODE-8584?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17210348#comment-17210348 ]
Bruce J Schuchardt commented on GEODE-8584: ------------------------------------------- Here is the crux of the problem: {noformat} [info 2020/10/07 15:54:20.931 PDT <vm_3_thr_11_client2_host1_10891> tid=0x9e] BRUCE: acquired direct buffer 1a7301b8 of size 65536. requested size 65536 from: [info 2020/10/07 15:54:20.931 PDT <vm_3_thr_11_client2_host1_10891> tid=0x9e] BRUCE: acquired direct buffer 1a7301b8 of size 65536. requested size 65536 from: org.apache.geode.internal.net.BufferPool.acquireDirectSenderBuffer(BufferPool.java:92) org.apache.geode.internal.net.BufferPool.acquireDirectBuffer(BufferPool.java:286) org.apache.geode.internal.net.BufferPool.expandWriteBufferIfNeeded(BufferPool.java:270) org.apache.geode.internal.net.NioSslEngine.expandWriteBuffer(NioSslEngine.java:212) [info 2020/10/07 15:54:27.077 PDT <AsyncSocketCloser for 10.32.108.97(clientgemfire1_host1_10887:10887)<v1>:41002> tid=0x94] NioSSLEngine releasing two buffers myNetData=1a7301b8(direct), peerAppData=6fffd1b(direct) [info 2020/10/07 15:54:27.077 PDT <AsyncSocketCloser for 10.32.108.97(clientgemfire1_host1_10887:10887)<v1>:41002> tid=0x94] BRUCE: releasing direct buffer 1a7301b8 [info 2020/10/07 15:54:27.078 PDT <vm_3_thr_8_client2_host1_10891> tid=0xeb] Exception occurred while processing UpdateOperation(EntryEventImpl[op=UPDATE;region=/testRegion;key=85;callbackArg=null;originRemote=false;originMember=10.32.108.97(clientgemfire2_host1_10891:10891)<v1>:41001;callbacksInvoked;version={v42; rv571; mbr=414d94d5780a4d72-b562d4269a59a785; ds=1; time=1602111267048};id=EventID[id=44 bytes;threadID=37;sequenceID=10]]) org.apache.geode.ToDataException: toData failed on dsfid=71 msg:null at org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1509) at org.apache.geode.internal.tcp.MsgStreamer.writeMessage(MsgStreamer.java:249) at org.apache.geode.distributed.internal.direct.DirectChannel.sendToMany(DirectChannel.java:306) {noformat} The thread that's writing a serialized message to the socket is using the NioSslEngine's "myNetData" buffer. Another thread is closing the connection and has invoked the NioFilter's close() method. That method closes out the TLS session and modifies the "myNetData" buffer in the process. > Message transmission fails with IllegalStateException in socket i/o code > ------------------------------------------------------------------------ > > Key: GEODE-8584 > URL: https://issues.apache.org/jira/browse/GEODE-8584 > Project: Geode > Issue Type: Bug > Components: membership, messaging > Affects Versions: 1.12.0, 1.13.0, 1.14.0 > Reporter: Bruce J Schuchardt > Priority: Major > Labels: pull-request-available > > Transmission of an update operation failed with a toData exception caused by > an IllegalStateException in socket i/o code. It shouldn't be possible for > this exception to happen unless multiple threads are using the buffer at the > same time. > > {noformat} > org.apache.geode.ToDataException: toData failed on dsfid=71 msg:null > at > org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1509) > at > org.apache.geode.internal.tcp.MsgStreamer.writeMessage(MsgStreamer.java:249) > at > org.apache.geode.distributed.internal.direct.DirectChannel.sendToMany(DirectChannel.java:306) > at > org.apache.geode.distributed.internal.direct.DirectChannel.sendToOne(DirectChannel.java:182) > at > org.apache.geode.distributed.internal.direct.DirectChannel.send(DirectChannel.java:511) > at > org.apache.geode.distributed.internal.DistributionImpl.directChannelSend(DistributionImpl.java:346) > at > org.apache.geode.distributed.internal.DistributionImpl.send(DistributionImpl.java:291) > at > org.apache.geode.distributed.internal.ClusterDistributionManager.sendViaMembershipManager(ClusterDistributionManager.java:2053) > at > org.apache.geode.distributed.internal.ClusterDistributionManager.sendOutgoing(ClusterDistributionManager.java:1981) > at > org.apache.geode.distributed.internal.ClusterDistributionManager.sendMessage(ClusterDistributionManager.java:2018) > at > org.apache.geode.distributed.internal.ClusterDistributionManager.putOutgoing(ClusterDistributionManager.java:1083) > at > org.apache.geode.internal.cache.DistributedCacheOperation._distribute(DistributedCacheOperation.java:572) > at > org.apache.geode.internal.cache.DistributedCacheOperation.startOperation(DistributedCacheOperation.java:277) > at > org.apache.geode.internal.cache.DistributedCacheOperation.distribute(DistributedCacheOperation.java:318) > at > org.apache.geode.internal.cache.DistributedRegion.distributeUpdate(DistributedRegion.java:520) > at > org.apache.geode.internal.cache.DistributedRegion.basicPutPart3(DistributedRegion.java:498) > at > org.apache.geode.internal.cache.map.RegionMapPut.doAfterCompletionActions(RegionMapPut.java:307) > at > org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPut(AbstractRegionMapPut.java:185) > at > org.apache.geode.internal.cache.map.AbstractRegionMapPut.runWhileLockedForCacheModification(AbstractRegionMapPut.java:119) > at > org.apache.geode.internal.cache.map.RegionMapPut.runWhileLockedForCacheModification(RegionMapPut.java:161) > at > org.apache.geode.internal.cache.map.AbstractRegionMapPut.put(AbstractRegionMapPut.java:169) > at > org.apache.geode.internal.cache.AbstractRegionMap.basicPut(AbstractRegionMap.java:2044) > at > org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5599) > at > org.apache.geode.internal.cache.DistributedRegion.virtualPut(DistributedRegion.java:393) > at > org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5577) > at > org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:157) > at > org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5035) > at > org.apache.geode.internal.cache.LocalRegion.replaceWithCallbackArgument(LocalRegion.java:10600) > at > org.apache.geode.internal.cache.LocalRegion.replace(LocalRegion.java:10566) > [application code traces deleted] > Caused by: java.lang.IllegalArgumentException > at java.nio.Buffer.position(Buffer.java:244) > at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:96) > at sun.nio.ch.IOUtil.write(IOUtil.java:51) > at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:469) > at > org.apache.geode.internal.tcp.Connection.writeFully(Connection.java:2596) > at > org.apache.geode.internal.tcp.Connection.sendPreserialized(Connection.java:1866) > at > org.apache.geode.internal.tcp.MsgStreamer.realFlush(MsgStreamer.java:330) > at org.apache.geode.internal.tcp.MsgStreamer.write(MsgStreamer.java:390) > at > org.apache.geode.DataSerializer.writeByteArray(DataSerializer.java:1185) > at > org.apache.geode.DataSerializer.writeByteArray(DataSerializer.java:1153) > at > org.apache.geode.internal.cache.DistributedCacheOperation.writeValue(DistributedCacheOperation.java:137) > at > org.apache.geode.internal.cache.UpdateOperation$UpdateMessage.toData(UpdateOperation.java:417) > at > org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.invokeToData(DSFIDSerializerImpl.java:213) > at > org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.write(DSFIDSerializerImpl.java:137) > at > org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1484) > ... 37 more {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)