[geode] 01/01: GEODE-7683: introduce BR.cmnClearRegion
This is an automated email from the ASF dual-hosted git repository. nnag pushed a commit to branch feature/GEODE-7665 in repository https://gitbox.apache.org/repos/asf/geode.git commit ccb543fc2b3911304d15c84cda36b6ede0c2a41b Author: zhouxh AuthorDate: Mon Jan 27 17:02:48 2020 -0800 GEODE-7683: introduce BR.cmnClearRegion Co-authored-by: Xiaojian Zhou GEODE-7684: Create messaging class for PR Clear (#4689) * Added new message class and test Co-authored-by: Benjamin Ross Co-authored-by: Donal Evans --- .../codeAnalysis/sanctionedDataSerializables.txt | 8 + .../apache/geode/internal/cache/BucketRegion.java | 38 +- .../geode/internal/cache/DistributedRegion.java| 23 +- .../internal/cache/partitioned/ClearPRMessage.java | 388 + .../internal/cache/BucketRegionJUnitTest.java | 77 .../internal/cache/DistributedRegionJUnitTest.java | 18 + .../cache/partitioned/ClearPRMessageTest.java | 288 +++ .../serialization/DataSerializableFixedID.java | 3 + 8 files changed, 832 insertions(+), 11 deletions(-) diff --git a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt index 3076db7..d6806f2 100644 --- a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt +++ b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt @@ -1435,6 +1435,14 @@ org/apache/geode/internal/cache/partitioned/BucketSizeMessage$BucketSizeReplyMes fromData,27 toData,27 +org/apache/geode/internal/cache/partitioned/ClearPRMessage,2 +fromData,30 +toData,44 + +org/apache/geode/internal/cache/partitioned/ClearPRMessage$ClearReplyMessage,2 +fromData,17 +toData,17 + org/apache/geode/internal/cache/partitioned/ColocatedRegionDetails,2 fromData,81 toData,133 diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java index ac20526..db8c057 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java @@ -557,6 +557,36 @@ public class BucketRegion extends DistributedRegion implements Bucket { } } + @Override + public void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { +if (!getBucketAdvisor().isPrimary()) { + if (logger.isDebugEnabled()) { +logger.debug("Not primary bucket when doing clear, do nothing"); + } + return; +} + +boolean enableRVV = useRVV && getConcurrencyChecksEnabled(); +RegionVersionVector rvv = null; +if (enableRVV) { + rvv = getVersionVector().getCloneForTransmission(); +} + +// get rvvLock +Set participants = +getCacheDistributionAdvisor().adviseInvalidateRegion(); +try { + obtainWriteLocksForClear(regionEvent, participants); + // no need to dominate my own rvv. + // Clear is on going here, there won't be GII for this member + clearRegionLocally(regionEvent, cacheWrite, null); + distributeClearOperation(regionEvent, rvv, participants); + + // TODO: call reindexUserDataRegion if there're lucene indexes +} finally { + releaseWriteLocksForClear(regionEvent, participants); +} + } long generateTailKey() { long key = eventSeqNum.addAndGet(partitionedRegion.getTotalNumberOfBuckets()); @@ -2094,11 +2124,9 @@ public class BucketRegion extends DistributedRegion implements Bucket { // if GII has failed, because there is not primary. So it's safe to set these // counters to 0. oldMemValue = bytesInMemory.getAndSet(0); -} - -else { - throw new InternalGemFireError( - "Trying to clear a bucket region that was not destroyed or in initialization."); +} else { + // BucketRegion's clear is supported now + oldMemValue = bytesInMemory.getAndSet(0); } if (oldMemValue != BUCKET_DESTROYED) { partitionedRegion.getPrStats().incDataStoreEntryCount(-sizeBeforeClear); diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java index dd73b20..1465eef 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java @@ -2003,6 +2003,10 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute super.basicClear(regionEvent, cacheWrite); } + void distributeClearOperation(RegionEventImpl regionEvent, RegionVersionVector rvv, + Set participants) { +
[geode] 01/01: GEODE-7683: introduce BR.cmnClearRegion
This is an automated email from the ASF dual-hosted git repository. zhouxj pushed a commit to branch feature/GEODE-7665 in repository https://gitbox.apache.org/repos/asf/geode.git commit 15c800304a507855cd04a9948d24d61b5da54211 Author: zhouxh AuthorDate: Mon Jan 27 17:02:48 2020 -0800 GEODE-7683: introduce BR.cmnClearRegion Co-authored-by: Xiaojian Zhou GEODE-7684: Create messaging class for PR Clear (#4689) * Added new message class and test Co-authored-by: Benjamin Ross Co-authored-by: Donal Evans --- .../codeAnalysis/sanctionedDataSerializables.txt | 8 + .../apache/geode/internal/cache/BucketRegion.java | 38 +- .../geode/internal/cache/DistributedRegion.java| 23 +- .../internal/cache/partitioned/ClearPRMessage.java | 388 + .../internal/cache/BucketRegionJUnitTest.java | 77 .../internal/cache/DistributedRegionJUnitTest.java | 18 + .../cache/partitioned/ClearPRMessageTest.java | 288 +++ .../serialization/DataSerializableFixedID.java | 3 + 8 files changed, 832 insertions(+), 11 deletions(-) diff --git a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt index 3076db7..d6806f2 100644 --- a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt +++ b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt @@ -1435,6 +1435,14 @@ org/apache/geode/internal/cache/partitioned/BucketSizeMessage$BucketSizeReplyMes fromData,27 toData,27 +org/apache/geode/internal/cache/partitioned/ClearPRMessage,2 +fromData,30 +toData,44 + +org/apache/geode/internal/cache/partitioned/ClearPRMessage$ClearReplyMessage,2 +fromData,17 +toData,17 + org/apache/geode/internal/cache/partitioned/ColocatedRegionDetails,2 fromData,81 toData,133 diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java index ac20526..db8c057 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java @@ -557,6 +557,36 @@ public class BucketRegion extends DistributedRegion implements Bucket { } } + @Override + public void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { +if (!getBucketAdvisor().isPrimary()) { + if (logger.isDebugEnabled()) { +logger.debug("Not primary bucket when doing clear, do nothing"); + } + return; +} + +boolean enableRVV = useRVV && getConcurrencyChecksEnabled(); +RegionVersionVector rvv = null; +if (enableRVV) { + rvv = getVersionVector().getCloneForTransmission(); +} + +// get rvvLock +Set participants = +getCacheDistributionAdvisor().adviseInvalidateRegion(); +try { + obtainWriteLocksForClear(regionEvent, participants); + // no need to dominate my own rvv. + // Clear is on going here, there won't be GII for this member + clearRegionLocally(regionEvent, cacheWrite, null); + distributeClearOperation(regionEvent, rvv, participants); + + // TODO: call reindexUserDataRegion if there're lucene indexes +} finally { + releaseWriteLocksForClear(regionEvent, participants); +} + } long generateTailKey() { long key = eventSeqNum.addAndGet(partitionedRegion.getTotalNumberOfBuckets()); @@ -2094,11 +2124,9 @@ public class BucketRegion extends DistributedRegion implements Bucket { // if GII has failed, because there is not primary. So it's safe to set these // counters to 0. oldMemValue = bytesInMemory.getAndSet(0); -} - -else { - throw new InternalGemFireError( - "Trying to clear a bucket region that was not destroyed or in initialization."); +} else { + // BucketRegion's clear is supported now + oldMemValue = bytesInMemory.getAndSet(0); } if (oldMemValue != BUCKET_DESTROYED) { partitionedRegion.getPrStats().incDataStoreEntryCount(-sizeBeforeClear); diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java index 9964978..1a62919 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java @@ -2003,6 +2003,10 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute super.basicClear(regionEvent, cacheWrite); } + void distributeClearOperation(RegionEventImpl regionEvent, RegionVersionVector rvv, + Set participants) { +
[geode] 01/01: GEODE-7683: introduce BR.cmnClearRegion
This is an automated email from the ASF dual-hosted git repository. nnag pushed a commit to branch feature/GEODE-7665 in repository https://gitbox.apache.org/repos/asf/geode.git commit d0daa20440449b4120015554cd7b10608f6e9e81 Author: zhouxh AuthorDate: Mon Jan 27 17:02:48 2020 -0800 GEODE-7683: introduce BR.cmnClearRegion --- .../apache/geode/internal/cache/BucketRegion.java | 38 +-- .../geode/internal/cache/DistributedRegion.java| 23 +-- .../internal/cache/BucketRegionJUnitTest.java | 77 ++ .../internal/cache/DistributedRegionJUnitTest.java | 18 + 4 files changed, 145 insertions(+), 11 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java index ac20526..761c1b1 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java @@ -557,6 +557,36 @@ public class BucketRegion extends DistributedRegion implements Bucket { } } + @Override + void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { +if (!getBucketAdvisor().isPrimary()) { + if (logger.isDebugEnabled()) { +logger.debug("Not primary bucket when doing clear, do nothing"); + } + return; +} + +boolean enableRVV = useRVV && getConcurrencyChecksEnabled(); +RegionVersionVector rvv = null; +if (enableRVV) { + rvv = getVersionVector().getCloneForTransmission(); +} + +// get rvvLock +Set participants = +getCacheDistributionAdvisor().adviseInvalidateRegion(); +try { + obtainWriteLocksForClear(regionEvent, participants); + // no need to dominate my own rvv. + // Clear is on going here, there won't be GII for this member + clearRegionLocally(regionEvent, cacheWrite, null); + distributeClearOperation(regionEvent, rvv, participants); + + // TODO: call reindexUserDataRegion if there're lucene indexes +} finally { + releaseWriteLocksForClear(regionEvent, participants); +} + } long generateTailKey() { long key = eventSeqNum.addAndGet(partitionedRegion.getTotalNumberOfBuckets()); @@ -2094,11 +2124,9 @@ public class BucketRegion extends DistributedRegion implements Bucket { // if GII has failed, because there is not primary. So it's safe to set these // counters to 0. oldMemValue = bytesInMemory.getAndSet(0); -} - -else { - throw new InternalGemFireError( - "Trying to clear a bucket region that was not destroyed or in initialization."); +} else { + // BucketRegion's clear is supported now + oldMemValue = bytesInMemory.getAndSet(0); } if (oldMemValue != BUCKET_DESTROYED) { partitionedRegion.getPrStats().incDataStoreEntryCount(-sizeBeforeClear); diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java index 9964978..1a62919 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java @@ -2003,6 +2003,10 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute super.basicClear(regionEvent, cacheWrite); } + void distributeClearOperation(RegionEventImpl regionEvent, RegionVersionVector rvv, + Set participants) { +DistributedClearOperation.clear(regionEvent, rvv, participants); + } @Override void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { @@ -2025,7 +2029,7 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute obtainWriteLocksForClear(regionEvent, participants); clearRegionLocally(regionEvent, cacheWrite, null); if (!regionEvent.isOriginRemote() && regionEvent.getOperation().isDistributed()) { - DistributedClearOperation.clear(regionEvent, null, participants); + distributeClearOperation(regionEvent, null, participants); } } finally { releaseWriteLocksForClear(regionEvent, participants); @@ -2081,10 +2085,12 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute /** * obtain locks preventing generation of new versions in other members */ - private void obtainWriteLocksForClear(RegionEventImpl regionEvent, + protected void obtainWriteLocksForClear(RegionEventImpl regionEvent, Set participants) { lockLocallyForClear(getDistributionManager(), getMyId(), regionEvent); -DistributedClearOperation.lockAndFlushToOthers(regionEvent, participants); +if (!isUsedForPartitionedRegionBucket()) { +
[geode] 01/01: GEODE-7683: introduce BR.cmnClearRegion
This is an automated email from the ASF dual-hosted git repository. nnag pushed a commit to branch feature/GEODE-7665 in repository https://gitbox.apache.org/repos/asf/geode.git commit c64039411520f2925ea6f3dcfd9a35c04d794980 Author: zhouxh AuthorDate: Mon Jan 27 17:02:48 2020 -0800 GEODE-7683: introduce BR.cmnClearRegion --- .../apache/geode/internal/cache/BucketRegion.java | 38 +-- .../geode/internal/cache/DistributedRegion.java| 23 +-- .../internal/cache/BucketRegionJUnitTest.java | 77 ++ .../internal/cache/DistributedRegionJUnitTest.java | 18 + 4 files changed, 145 insertions(+), 11 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java index ac20526..761c1b1 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java @@ -557,6 +557,36 @@ public class BucketRegion extends DistributedRegion implements Bucket { } } + @Override + void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { +if (!getBucketAdvisor().isPrimary()) { + if (logger.isDebugEnabled()) { +logger.debug("Not primary bucket when doing clear, do nothing"); + } + return; +} + +boolean enableRVV = useRVV && getConcurrencyChecksEnabled(); +RegionVersionVector rvv = null; +if (enableRVV) { + rvv = getVersionVector().getCloneForTransmission(); +} + +// get rvvLock +Set participants = +getCacheDistributionAdvisor().adviseInvalidateRegion(); +try { + obtainWriteLocksForClear(regionEvent, participants); + // no need to dominate my own rvv. + // Clear is on going here, there won't be GII for this member + clearRegionLocally(regionEvent, cacheWrite, null); + distributeClearOperation(regionEvent, rvv, participants); + + // TODO: call reindexUserDataRegion if there're lucene indexes +} finally { + releaseWriteLocksForClear(regionEvent, participants); +} + } long generateTailKey() { long key = eventSeqNum.addAndGet(partitionedRegion.getTotalNumberOfBuckets()); @@ -2094,11 +2124,9 @@ public class BucketRegion extends DistributedRegion implements Bucket { // if GII has failed, because there is not primary. So it's safe to set these // counters to 0. oldMemValue = bytesInMemory.getAndSet(0); -} - -else { - throw new InternalGemFireError( - "Trying to clear a bucket region that was not destroyed or in initialization."); +} else { + // BucketRegion's clear is supported now + oldMemValue = bytesInMemory.getAndSet(0); } if (oldMemValue != BUCKET_DESTROYED) { partitionedRegion.getPrStats().incDataStoreEntryCount(-sizeBeforeClear); diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java index 9964978..1a62919 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java @@ -2003,6 +2003,10 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute super.basicClear(regionEvent, cacheWrite); } + void distributeClearOperation(RegionEventImpl regionEvent, RegionVersionVector rvv, + Set participants) { +DistributedClearOperation.clear(regionEvent, rvv, participants); + } @Override void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { @@ -2025,7 +2029,7 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute obtainWriteLocksForClear(regionEvent, participants); clearRegionLocally(regionEvent, cacheWrite, null); if (!regionEvent.isOriginRemote() && regionEvent.getOperation().isDistributed()) { - DistributedClearOperation.clear(regionEvent, null, participants); + distributeClearOperation(regionEvent, null, participants); } } finally { releaseWriteLocksForClear(regionEvent, participants); @@ -2081,10 +2085,12 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute /** * obtain locks preventing generation of new versions in other members */ - private void obtainWriteLocksForClear(RegionEventImpl regionEvent, + protected void obtainWriteLocksForClear(RegionEventImpl regionEvent, Set participants) { lockLocallyForClear(getDistributionManager(), getMyId(), regionEvent); -DistributedClearOperation.lockAndFlushToOthers(regionEvent, participants); +if (!isUsedForPartitionedRegionBucket()) { +
[geode] 01/01: GEODE-7683: introduce BR.cmnClearRegion
This is an automated email from the ASF dual-hosted git repository. zhouxj pushed a commit to branch feature/GEODE-7683 in repository https://gitbox.apache.org/repos/asf/geode.git commit debcb4ddde543f6e8396b4cdb895642b4474d27b Author: zhouxh AuthorDate: Mon Jan 27 17:02:48 2020 -0800 GEODE-7683: introduce BR.cmnClearRegion --- .../apache/geode/internal/cache/BucketRegion.java | 37 ++ .../geode/internal/cache/DistributedRegion.java| 12 --- .../lucene/internal/IndexRepositoryFactory.java| 2 +- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java index ac20526..3b8a56e 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java @@ -50,6 +50,7 @@ import org.apache.geode.cache.RegionAttributes; import org.apache.geode.cache.RegionDestroyedException; import org.apache.geode.cache.TimeoutException; import org.apache.geode.cache.partition.PartitionListener; +import org.apache.geode.distributed.DistributedLockService; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.distributed.DistributedSystem; import org.apache.geode.distributed.internal.AtomicLongWithTerminalState; @@ -557,6 +558,42 @@ public class BucketRegion extends DistributedRegion implements Bucket { } } + @Override + void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { +boolean enableRVV = useRVV && getConcurrencyChecksEnabled(); +RegionVersionVector rvv = null; +if (enableRVV) { + rvv = getVersionVector(); +} + +// lock the primary from moving +DistributedLockService lockService = DistributedLockService +.getServiceNamed(PartitionedRegionHelper.PARTITION_LOCK_SERVICE_NAME); +String lockName = this.getFullPath(); +while (!lockService.lock(lockName, 100, -1)) { + if (!getBucketAdvisor().isPrimary()) { +PartitionedRegionException pre = +new PartitionedRegionException( +"The bucket " + this.getId() + " is no longer a primary. Retry the clear"); +throw pre; + } +} + +// get rvvLock +Set participants = +getCacheDistributionAdvisor().adviseInvalidateRegion(); +try { + obtainWriteLocksForClear(regionEvent, participants); + clearRegionLocally(regionEvent, cacheWrite, null); + if (!regionEvent.isOriginRemote() && regionEvent.getOperation().isDistributed()) { +DistributedClearOperation.clear(regionEvent, rvv, participants); + } + + // TODO: call reindexUserDataRegion if there're lucene indexes +} finally { + releaseWriteLocksForClear(regionEvent, participants); +} + } long generateTailKey() { long key = eventSeqNum.addAndGet(partitionedRegion.getTotalNumberOfBuckets()); diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java index 9964978..ceb0402 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java @@ -2081,10 +2081,12 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute /** * obtain locks preventing generation of new versions in other members */ - private void obtainWriteLocksForClear(RegionEventImpl regionEvent, + protected void obtainWriteLocksForClear(RegionEventImpl regionEvent, Set participants) { lockLocallyForClear(getDistributionManager(), getMyId(), regionEvent); -DistributedClearOperation.lockAndFlushToOthers(regionEvent, participants); +if (!isUsedForPartitionedRegionBucket()) { + DistributedClearOperation.lockAndFlushToOthers(regionEvent, participants); +} } /** @@ -2121,7 +2123,7 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute /** * releases the locks obtained in obtainWriteLocksForClear */ - private void releaseWriteLocksForClear(RegionEventImpl regionEvent, + protected void releaseWriteLocksForClear(RegionEventImpl regionEvent, Set participants) { ARMLockTestHook armLockTestHook = getRegionMap().getARMLockTestHook(); @@ -2130,7 +2132,9 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute } getVersionVector().unlockForClear(getMyId()); -DistributedClearOperation.releaseLocks(regionEvent, participants); +if (!isUsedForPartitionedRegionBucket()) { + DistributedClearOperation.releaseLocks(regionEvent, participants); +} if (armLockTestHook != null) { armLockTestHook.afterRelease(this, regionEvent); diff --git