Eric Shu created GEODE-5748: ------------------------------- Summary: 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
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)