Barry Oglesby created GEODE-1819:
------------------------------------

             Summary: BucketRegionQueue size and keySet can become out of sync 
during initialization and never recover
                 Key: GEODE-1819
                 URL: https://issues.apache.org/jira/browse/GEODE-1819
             Project: Geode
          Issue Type: Bug
          Components: wan
            Reporter: Barry Oglesby


This bug is the same as GemFire Trac 48049 - One event was left behind in 
{{ParallelGatewaySenderQueue}} causing the test to hang.

The issue occurs during {{BucketRegionQueue initialize}}. This method:

- calls super initialize (which does GII)
- loads events from temp queue
- initializes eventSeqNumQueue

If a destroy event occurs (from a {{ParallelQueueRemovalMessage}}) after the 
{{super initialize}} call but before the {{BucketRegionQueue initialize}} 
method completes, then it doesn't actually get removed from the 
{{CustomEntryConcurrentHashMap}} of entries. Instead, it ends up in the 
{{UnsharedImageState destroyedEntryKeys}} in {{DESTROYED}} state. The value in 
the entry is {{Token.DESTROYED}}. This happens because {{inTokenMode==true}} 
which is the case because {{AbstractBucketRegionQueue}} overrides 
{{isInitialized}} to return a boolean field, and this field is set to true at 
the end of {{BucketRegionQueue initialize}}. See {{LocalRegion.mapDestroy}} and 
{{lockGII}}. So, in effect, the {{BucketRegionQueue}} is not initialized until 
after the temp queue is drained, and the {{eventSeqNumQueue}} is initialized. 
Events in this state never get cleaned up, so the behavior is that size returns 
1 but keySet returns empty set.





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

Reply via email to