[ 
https://issues.apache.org/jira/browse/GEODE-1999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15572672#comment-15572672
 ] 

ASF subversion and git services commented on GEODE-1999:
--------------------------------------------------------

Commit 08adacd2cfb93533ec016a82a0f71d7110e1819d in incubator-geode's branch 
refs/heads/develop from [~eshu]
[ https://git-wip-us.apache.org/repos/asf?p=incubator-geode.git;h=08adacd ]

GEODE-1999: Fix offheap memory leak when exception is thrown during 
basicDestroy call to remove GatewaySenderEventImpl from the sender queue

Using try and finally to make sure the offheap reference will be released.
Make similar changes for the parrellel wan queue as well.
Also release offheap memory if a virtualPut failed to put the 
GatewaySenderEvent into the sender queue.


> offheap memory leak could occur in GatewaySenderQueue
> -----------------------------------------------------
>
>                 Key: GEODE-1999
>                 URL: https://issues.apache.org/jira/browse/GEODE-1999
>             Project: Geode
>          Issue Type: Bug
>          Components: offheap
>            Reporter: Eric Shu
>            Assignee: Eric Shu
>
> When GatewaySenderEventImpl is removing from the sender queue, it is put into 
> an EntryEventImpl. The offheap reference will be removed late once the 
> basicDestory call is done.
>      protected void basicDestroy(final EntryEventImpl event,
>          final boolean cacheWrite, Object expectedOldValue)
>          throws EntryNotFoundException, CacheWriterException, 
> TimeoutException {
>     super.basicDestroy(event, cacheWrite, expectedOldValue);
>     GatewaySenderEventImpl.release(event.getRawOldValue());
>      }
> The following exception is thrown during the basicDestroy call, and the 
> GatewaySenderEventImpl removed from the queue in the basicDestroy failed to 
> remove offheap reference.
> [info 2016/10/11 11:07:38.312 PDT bridgegemfire_1_1_elmax_2881 
> <ServerConnection on port 29381 Thread 1> tid=0x76] 
> org.apache.geode.distributed.DistributedSystemDisconnectedException: 
> DistributedSystem is shutting down, caused by 
> org.apache.geode.ForcedDisconnectException: Member isn't responding to 
> heartbeat requests
>         at 
> org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.directChannelSend(GMSMembershipManager.java:1701)
>         at 
> org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.send(GMSMembershipManager.java:1861)
>         at 
> org.apache.geode.distributed.internal.DistributionChannel.send(DistributionChannel.java:88)
>         at 
> org.apache.geode.distributed.internal.DistributionManager.sendOutgoing(DistributionManager.java:3402)
>         at 
> org.apache.geode.distributed.internal.DistributionManager.sendMessage(DistributionManager.java:3443)
>         at 
> org.apache.geode.distributed.internal.DistributionManager.putOutgoing(DistributionManager.java:1806)
>         at 
> org.apache.geode.internal.cache.DistributedCacheOperation.distribute(DistributedCacheOperation.java:509)
>         at 
> org.apache.geode.internal.cache.DistributedRegion.distributeDestroy(DistributedRegion.java:1779)
>         at 
> org.apache.geode.internal.cache.DistributedRegion.basicDestroyPart3(DistributedRegion.java:1770)
>         at 
> org.apache.geode.internal.cache.AbstractRegionMap.destroy(AbstractRegionMap.java:1527)
>         at 
> org.apache.geode.internal.cache.LocalRegion.mapDestroy(LocalRegion.java:7019)
>         at 
> org.apache.geode.internal.cache.LocalRegion.mapDestroy(LocalRegion.java:6991)
>         at 
> org.apache.geode.internal.cache.LocalRegionDataView.destroyExistingEntry(LocalRegionDataView.java:55)
>         at 
> org.apache.geode.internal.cache.LocalRegion.basicDestroy(LocalRegion.java:6956)
>         at 
> org.apache.geode.internal.cache.DistributedRegion.basicDestroy(DistributedRegion.java:1738)
>         at 
> org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderQueue$SerialGatewaySenderQueueMetaRegion.basicDestroy(SerialGatewaySenderQueue.java:1298)
>         at 
> org.apache.geode.internal.cache.LocalRegion.validatedDestroy(LocalRegion.java:1150)
>         at 
> org.apache.geode.internal.cache.DistributedRegion.validatedDestroy(DistributedRegion.java:1024)
>         at 
> org.apache.geode.internal.cache.LocalRegion.destroy(LocalRegion.java:1134)
>         at 
> org.apache.geode.internal.cache.AbstractRegion.destroy(AbstractRegion.java:276)
>         at 
> org.apache.geode.internal.cache.LocalRegion.remove(LocalRegion.java:9587)
>         at 
> org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderQueue.removeOldEntry(SerialGatewaySenderQueue.java:657)
>         at 
> org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderQueue.putAndGetKey(SerialGatewaySenderQueue.java:279)
>         at 
> org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderQueue.put(SerialGatewaySenderQueue.java:252)
>         at 
> org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderEventProcessor.queuePrimaryEvent(SerialGatewaySenderEventProcessor.java:467)
>         at 
> org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderEventProcessor.enqueueEvent(SerialGatewaySenderEventProcessor.java:436)
>         at 
> org.apache.geode.internal.cache.wan.AbstractGatewaySender.distribute(AbstractGatewaySender.java:959)
>         at 
> org.apache.geode.internal.cache.LocalRegion.notifyGatewaySender(LocalRegion.java:6599)
>         at 
> org.apache.geode.internal.cache.BucketRegion.notifyGatewaySender(BucketRegion.java:673)
>         at 
> org.apache.geode.internal.cache.LocalRegion.basicPutPart2(LocalRegion.java:6136)
>         at 
> org.apache.geode.internal.cache.BucketRegion.basicPutPart2(BucketRegion.java:663)
>         at 
> org.apache.geode.internal.cache.AbstractRegionMap.basicPut(AbstractRegionMap.java:2807)
>         at 
> org.apache.geode.internal.cache.BucketRegion.virtualPut(BucketRegion.java:504)
>         at 
> org.apache.geode.internal.cache.PartitionedRegionDataStore.putLocally(PartitionedRegionDataStore.java:1275)
>         at 
> org.apache.geode.internal.cache.PartitionedRegion.putInBucket(PartitionedRegion.java:2809)
>         at 
> org.apache.geode.internal.cache.PartitionedRegion.virtualPut(PartitionedRegion.java:1973)
>         at 
> org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:132)
>         at 
> org.apache.geode.internal.cache.LocalRegion.basicUpdate(LocalRegion.java:5930)
>         at 
> org.apache.geode.internal.cache.LocalRegion.basicBridgePut(LocalRegion.java:5548)
>         at 
> org.apache.geode.internal.cache.tier.sockets.command.Put65.cmdExecute(Put65.java:367)
>         at 
> org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:147)
>         at 
> org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:783)
>         at 
> org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:913)
>         at 
> org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1143)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>         at 
> org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:546)
>         at java.lang.Thread.run(Thread.java:745)
>   Caused by: org.apache.geode.ForcedDisconnectException: Member isn't 
> responding to heartbeat requests
>         at 
> org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.forceDisconnect(GMSMembershipManager.java:2502)
>         at 
> org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave.forceDisconnect(GMSJoinLeave.java:971)
>         at 
> org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave.processRemoveRequest(GMSJoinLeave.java:618)
>         at 
> org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave.processMessage(GMSJoinLeave.java:1654)
>         at 
> org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger$JGroupsReceiver.receive(JGroupsMessenger.java:1269)
>         at org.jgroups.JChannel.invokeCallback(JChannel.java:816)
>         at org.jgroups.JChannel.up(JChannel.java:741)
>         at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:1030)
>         at org.jgroups.protocols.FRAG2.up(FRAG2.java:165)
>         at org.jgroups.protocols.FlowControl.up(FlowControl.java:390)
>         at org.jgroups.protocols.UNICAST3.deliverMessage(UNICAST3.java:1070)
>         at 
> org.jgroups.protocols.UNICAST3.handleDataReceived(UNICAST3.java:785)
>         at org.jgroups.protocols.UNICAST3.up(UNICAST3.java:426)
>         at 
> org.apache.geode.distributed.internal.membership.gms.messenger.StatRecorder.up(StatRecorder.java:75)
>         at 
> org.apache.geode.distributed.internal.membership.gms.messenger.AddressManager.up(AddressManager.java:75)
>         at org.jgroups.protocols.TP.passMessageUp(TP.java:1601)
>         at org.jgroups.protocols.TP$SingleMessageHandler.run(TP.java:1817)
>         at org.jgroups.util.DirectExecutor.execute(DirectExecutor.java:10)
>         at org.jgroups.protocols.TP.handleSingleMessage(TP.java:1729)
>         at org.jgroups.protocols.TP.receive(TP.java:1654)
>         at 
> org.apache.geode.distributed.internal.membership.gms.messenger.Transport.receive(Transport.java:162)
>         at org.jgroups.protocols.UDP$PacketReceiver.run(UDP.java:701)
>         ... 1 more



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to