[ https://issues.apache.org/jira/browse/GEODE-4957?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16451293#comment-16451293 ]
ASF subversion and git services commented on GEODE-4957: -------------------------------------------------------- Commit c020dc9aeaf68f91d9da1182cec78930550b5d6b in geode's branch refs/heads/feature/GEODE-925 from [~dschneider] [ https://gitbox.apache.org/repos/asf?p=geode.git;h=c020dc9 ] GEODE-4957: fix race in concurrent create on region (#1836) Reverted the revert of GEODE-4957. Only cleanup if basicPut created a new region entry and its value at the end is still REMOVED_PHASE1 > The key used in a putIfAbsent call that returns null may not be the one in > the RegionEntry > ------------------------------------------------------------------------------------------ > > Key: GEODE-4957 > URL: https://issues.apache.org/jira/browse/GEODE-4957 > Project: Geode > Issue Type: Bug > Components: regions > Reporter: Barry Oglesby > Assignee: Darrel Schneider > Priority: Major > Labels: pull-request-available > Fix For: 1.7.0 > > Time Spent: 40m > Remaining Estimate: 0h > > With simultaneous putIfAbsent calls, sometimes the thread that returns null > is not the thread that actually creates the RegionEntry. > Below is some logging that shows this behavior. > Thread-77 returns null from the putIfAbsent call (which means there was no > previous value). 1 ms before Thread-77's putEntryIfAbsent call, Thread-9 > creates the RegionEntry. You can see that because not only is oldRe=null for > Thread-9, but also the event's key (eventKey) and entry's key (reKey) are > identical. But Thread-9 returns a non-null old value. > {noformat} > Thread-77 at 1522187267493: AbstractRegionMap.putEntryIfAbsent > regionEntry=VersionedStatsDiskLRURegionEntryHeapObjectKey@6a8119a0 > (key=ComplexKey[identity=1682369152; key=key]; rawValue=REMOVED_PHASE1; > version=\{v0; rv0; ds=0; time=0};member=null); > oldRe=VersionedStatsDiskLRURegionEntryHeapObjectKey@1aac7604 > (key=ComplexKey[identity=342592289; key=key]; rawValue=REMOVED_PHASE1; > version=\{v0; rv0; ds=0; time=0};member=null) > Thread-77 at 1522187267493: AbstractRegionMap.basicPut > eventKey=ComplexKey[identity=1682369152; key=key]; > reKey=ComplexKey[identity=342592289; key=key] > Thread-77 at 1522187267500: LocalRegion.putIfAbsent returning null > {noformat} > {noformat} > Thread-9 at 1522187267492: AbstractRegionMap.putEntryIfAbsent > regionEntry=VersionedStatsDiskLRURegionEntryHeapObjectKey@1aac7604 > (key=ComplexKey[identity=342592289; key=key]; rawValue=REMOVED_PHASE1; > version=\{v0; rv0; ds=0; time=0};member=null); oldRe=null > Thread-9 at 1522187267495: AbstractRegionMap.basicPut > eventKey=ComplexKey[identity=342592289; key=key]; > reKey=ComplexKey[identity=342592289; key=key] > Thread-9 at 1522187267504: LocalRegion.putIfAbsent returning v1 > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)