Dan Smith created GEODE-1813:
--------------------------------
Summary: Queued events are not removed when using an
AsyncEventListener with a fixed partitioned region
Key: GEODE-1813
URL: https://issues.apache.org/jira/browse/GEODE-1813
Project: Geode
Issue Type: Bug
Components: wan
Reporter: Dan Smith
Using an AsyncEventListener with a fixed partitioned region results in
IllegalStateExceptions in the log and events not getting removed.
{noformat}
[vm_1][warn 2016/08/23 09:51:35.871 PDT <Event Processor for
GatewaySender_AsyncEventQueue_ln_0> tid=0x3d] An Exception occurred. The
dispatcher will continue.
[vm_1]java.lang.IllegalStateException: For FixedPartitionedRegion
"AsyncEventQueue_ln_PARALLEL_GATEWAY_SENDER_QUEUE", FixedPartitionResolver is
not available (neither through the partition attribute partition-resolver nor
key/callbackArg implementing FixedPartitionResolver)
[vm_1] at
com.gemstone.gemfire.internal.cache.PartitionedRegionHelper.getHashKey(PartitionedRegionHelper.java:626)
[vm_1] at
com.gemstone.gemfire.internal.cache.PartitionedRegionHelper.getHashKey(PartitionedRegionHelper.java:546)
[vm_1] at
com.gemstone.gemfire.internal.cache.PartitionedRegion.getKeyInfo(PartitionedRegion.java:10133)
[vm_1] at
com.gemstone.gemfire.internal.cache.EntryEventImpl.<init>(EntryEventImpl.java:237)
[vm_1] at
com.gemstone.gemfire.internal.cache.EntryEventImpl.create(EntryEventImpl.java:394)
[vm_1] at
com.gemstone.gemfire.internal.cache.EntryEventImpl.create(EntryEventImpl.java:328)
[vm_1] at
com.gemstone.gemfire.internal.cache.LocalRegion.newDestroyEntryEvent(LocalRegion.java:1167)
[vm_1] at
com.gemstone.gemfire.internal.cache.BucketRegionQueue.destroyKey(BucketRegionQueue.java:502)
[vm_1] at
com.gemstone.gemfire.internal.cache.wan.parallel.ParallelGatewaySenderQueue.destroyEventFromQueue(ParallelGatewaySenderQueue.java:1128)
[vm_1] at
com.gemstone.gemfire.internal.cache.wan.parallel.ParallelGatewaySenderQueue.remove(ParallelGatewaySenderQueue.java:1109)
[vm_1] at
com.gemstone.gemfire.internal.cache.wan.parallel.ParallelGatewaySenderQueue.remove(ParallelGatewaySenderQueue.java:1543)
[vm_1] at
com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySenderEventProcessor.eventQueueRemove(AbstractGatewaySenderEventProcessor.java:238)
[vm_1] at
com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySenderEventProcessor.handleSuccessfulBatchDispatch(AbstractGatewaySenderEventProcessor.java:910)
[vm_1] at
com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySenderEventProcessor.processQueue(AbstractGatewaySenderEventProcessor.java:635)
[vm_1] at
com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySenderEventProcessor.run(AbstractGatewaySenderEventProcessor.java:1058){noformat}
Analysis from [~barry.oglesby]:
This issue happens after the event has been processed by the
AsyncEventListener. When the event is removed from the BucketRegionQueue, an
EntryEventImpl is created. The EntryEventImpl constructor attempts to get the
appropriate bucket from which to remove the entry even though this has already
been decided by the data PR. For fixed partitioning, the getHashKey method
requires a FixedPartitionResolver, and since one has not been set in the
BucketRegionQueue, an exception is thrown. In the non-fixed partitioning case,
no PartitionResolver is necessary, so the fact that there isn't one set doesn't
matter.
The reason the getHashKey method goes down the fixed partitioning code path is
the colocated BucketRegionQueue's fixed partitioning attributes are set in the
PartitionedRegion constructor based on the parent's fixed partitioning
attributes. This is unnecessary in the BucketRegionQueue case.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)