You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2018/09/17 23:29:00 UTC
[jira] [Commented] (GEODE-5748) When gii failed and needs to
cleanup it should clearRegion write lock to avoid race condition with
concurrent cache operation
[ https://issues.apache.org/jira/browse/GEODE-5748?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16618278#comment-16618278 ]
ASF subversion and git services commented on GEODE-5748:
--------------------------------------------------------
Commit 15c8f04f2de43ea174b322832594e2a97fb3567b in geode's branch refs/heads/feature/GEODE-5748 from eshu
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=15c8f04 ]
GEODE-5748: Hold clearRegion write lock during cleanUpAfterFailedGII
* To avoid race with concurrent cache operation, a clearRegion write lock is needed
when clearing entries and disk region entries during cleanUpAfterFailedGII, as cache
operations hold clearRegion read lock.
> When gii failed and needs to cleanup it should clearRegion write lock to avoid race condition with concurrent cache operation
> -----------------------------------------------------------------------------------------------------------------------------
>
> Key: GEODE-5748
> URL: https://issues.apache.org/jira/browse/GEODE-5748
> Project: Geode
> Issue Type: Bug
> Components: regions
> Reporter: Eric Shu
> Assignee: Eric Shu
> Priority: Major
>
> When gii failed, it will remove all entries in AbstractRegionMap. However there could be concurrent cache operation on the same region.
> During regular clear region, a clearRegion write lock is held before clear the region, it is required here as well to prevent the race like the following.
> {noformat}
> org.apache.geode.InternalGemFireError: Bucket BucketRegion[path='/__PR/_B__partitionedRegion_27;serial=158;primary=false] size (-1648) negative after applying delta of -1656
> at org.apache.geode.internal.cache.BucketRegion.updateBucketMemoryStats(BucketRegion.java:2304)
> at org.apache.geode.internal.cache.BucketRegion.updateBucket2Size(BucketRegion.java:2292)
> at org.apache.geode.internal.cache.BucketRegion.updateSizeOnRemove(BucketRegion.java:2161)
> at org.apache.geode.internal.cache.map.RegionMapDestroy.destroyEntry(RegionMapDestroy.java:732)
> at org.apache.geode.internal.cache.map.RegionMapDestroy.destroyExistingEntry(RegionMapDestroy.java:387)
> at org.apache.geode.internal.cache.map.RegionMapDestroy.handleExistingRegionEntry(RegionMapDestroy.java:238)
> at org.apache.geode.internal.cache.map.RegionMapDestroy.destroy(RegionMapDestroy.java:149)
> at org.apache.geode.internal.cache.AbstractRegionMap.destroy(AbstractRegionMap.java:1022)
> at org.apache.geode.internal.cache.LocalRegion.mapDestroy(LocalRegion.java:6567)
> at org.apache.geode.internal.cache.LocalRegion.mapDestroy(LocalRegion.java:6541)
> at org.apache.geode.internal.cache.BucketRegion.basicDestroy(BucketRegion.java:1195)
> at org.apache.geode.internal.cache.DestroyOperation$DestroyMessage.operateOnRegion(DestroyOperation.java:87)
> at org.apache.geode.internal.cache.DistributedCacheOperation$CacheOperationMessage.basicProcess(DistributedCacheOperation.java:1196)
> at org.apache.geode.internal.cache.DistributedCacheOperation$CacheOperationMessage.process(DistributedCacheOperation.java:1096)
> at org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:369)
> at org.apache.geode.distributed.internal.DistributionMessage.schedule(DistributionMessage.java:427)
> at org.apache.geode.distributed.internal.ClusterDistributionManager.scheduleIncomingMessage(ClusterDistributionManager.java:3223)
> at org.apache.geode.distributed.internal.ClusterDistributionManager.handleIncomingDMsg(ClusterDistributionManager.java:2889)
> at org.apache.geode.distributed.internal.ClusterDistributionManager.access$1700(ClusterDistributionManager.java:112)
> at org.apache.geode.distributed.internal.ClusterDistributionManager$DMListener.messageReceived(ClusterDistributionManager.java:3992)
> at org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.dispatchMessage(GMSMembershipManager.java:1118)
> at org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.handleOrDeferMessage(GMSMembershipManager.java:1037)
> at org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager$MyDCReceiver.messageReceived(GMSMembershipManager.java:400)
> at Rorg.apache.geode.distributed.internal.direct.DirectChannel.receive(DirectChannel.java:728)
> at org.apache.geode.internal.tcp.TCPConduit.messageReceived(TCPConduit.java:868)
> at org.apache.geode.internal.tcp.Connection.dispatchMessage(Connection.java:3965)
> at org.apache.geode.internal.tcp.Connection.processNIOBuffer(Connection.java:3551)
> at org.apache.geode.internal.tcp.Connection.runNioReader(Connection.java:1827)
> at org.apache.geode.internal.tcp.Connection.run(Connection.java:1688)
> at java.lang.Thread.run(Thread.java:748)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)