This is an automated email from the ASF dual-hosted git repository. jinmeiliao pushed a commit to branch feature/GEODE-7665 in repository https://gitbox.apache.org/repos/asf/geode.git
commit d2a974201e23e0f58e90ca9acfb4b7c1f5b23cfe Author: Donal Evans <[email protected]> AuthorDate: Fri Jul 17 12:55:51 2020 -0700 GEODE-8361: Use Set instead of List to track cleared buckets (#5379) - Refactor PartitionRegionClear to use Set instead of List - Some other changes to remove warnings/alerts from PartitionedRegionClear and PartitionedRegionClearMessage Authored-by: Donal Evans <[email protected]> --- .../codeAnalysis/sanctionedDataSerializables.txt | 2 +- .../internal/cache/PartitionedRegionClear.java | 36 +++++------- .../cache/PartitionedRegionClearMessage.java | 28 +++++---- .../internal/cache/PartitionedRegionClearTest.java | 68 ++++++++++++---------- 4 files changed, 67 insertions(+), 67 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 389fdc2..1df0031 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 @@ -1080,7 +1080,7 @@ fromData,40 toData,36 org/apache/geode/internal/cache/PartitionedRegionClearMessage$PartitionedRegionClearReplyMessage,2 -fromData,29 +fromData,32 toData,28 org/apache/geode/internal/cache/PoolFactoryImpl$PoolAttributes,2 diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClear.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClear.java index 030b36e..5a0621d 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClear.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClear.java @@ -14,11 +14,9 @@ */ package org.apache.geode.internal.cache; -import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; -import java.util.Iterator; -import java.util.List; +import java.util.Set; import org.apache.logging.log4j.Logger; @@ -32,7 +30,6 @@ import org.apache.geode.distributed.internal.DistributionManager; import org.apache.geode.distributed.internal.MembershipListener; import org.apache.geode.distributed.internal.ReplyException; import org.apache.geode.distributed.internal.membership.InternalDistributedMember; -import org.apache.geode.internal.cache.versions.RegionVersionVector; import org.apache.geode.logging.internal.log4j.api.LogService; public class PartitionedRegionClear { @@ -98,10 +95,8 @@ public class PartitionedRegionClear { PartitionedRegionClearMessage.OperationType.OP_UNLOCK_FOR_PR_CLEAR); } - List clearRegion(RegionEventImpl regionEvent, boolean cacheWrite, - RegionVersionVector vector) { - List allBucketsCleared = new ArrayList(); - allBucketsCleared.addAll(clearRegionLocal(regionEvent)); + Set<Integer> clearRegion(RegionEventImpl regionEvent) { + Set<Integer> allBucketsCleared = new HashSet<>(clearRegionLocal(regionEvent)); allBucketsCleared.addAll(sendPartitionedRegionClearMessage(regionEvent, PartitionedRegionClearMessage.OperationType.OP_PR_CLEAR)); return allBucketsCleared; @@ -116,8 +111,8 @@ public class PartitionedRegionClear { if (!bucketRegion.getBucketAdvisor().hasPrimary()) { if (retryTimer.overMaximum()) { throw new PartitionedRegionPartialClearException( - "Unable to find primary bucket region during clear operation for region: " + - partitionedRegion.getName()); + "Unable to find primary bucket region during clear operation on " + + partitionedRegion.getName() + " region."); } retryTimer.waitForBucketsRecovery(); retry = true; @@ -126,8 +121,8 @@ public class PartitionedRegionClear { } while (retry); } - public ArrayList clearRegionLocal(RegionEventImpl regionEvent) { - ArrayList clearedBuckets = new ArrayList(); + public Set<Integer> clearRegionLocal(RegionEventImpl regionEvent) { + Set<Integer> clearedBuckets = new HashSet<>(); setMembershipChange(false); // Synchronized to handle the requester departure. synchronized (lockForListenerAndClientNotification) { @@ -255,7 +250,7 @@ public class PartitionedRegionClear { } } - protected List sendPartitionedRegionClearMessage(RegionEventImpl event, + protected Set<Integer> sendPartitionedRegionClearMessage(RegionEventImpl event, PartitionedRegionClearMessage.OperationType op) { RegionEventImpl eventForLocalClear = (RegionEventImpl) event.clone(); eventForLocalClear.setOperation(Operation.REGION_LOCAL_CLEAR); @@ -269,10 +264,10 @@ public class PartitionedRegionClear { } while (true); } - protected List attemptToSendPartitionedRegionClearMessage(RegionEventImpl event, + protected Set<Integer> attemptToSendPartitionedRegionClearMessage(RegionEventImpl event, PartitionedRegionClearMessage.OperationType op) throws ForceReattemptException { - List bucketsOperated = null; + Set<Integer> bucketsOperated = null; if (partitionedRegion.getPRRoot() == null) { if (logger.isDebugEnabled()) { @@ -284,17 +279,16 @@ public class PartitionedRegionClear { return bucketsOperated; } - final HashSet configRecipients = - new HashSet(partitionedRegion.getRegionAdvisor().adviseAllPRNodes()); + final Set<InternalDistributedMember> configRecipients = + new HashSet<>(partitionedRegion.getRegionAdvisor().adviseAllPRNodes()); try { final PartitionRegionConfig prConfig = partitionedRegion.getPRRoot().get(partitionedRegion.getRegionIdentifier()); if (prConfig != null) { - Iterator itr = prConfig.getNodes().iterator(); - while (itr.hasNext()) { - InternalDistributedMember idm = ((Node) itr.next()).getMemberId(); + for (Node node : prConfig.getNodes()) { + InternalDistributedMember idm = node.getMemberId(); if (!idm.equals(partitionedRegion.getMyId())) { configRecipients.add(idm); } @@ -355,7 +349,7 @@ public class PartitionedRegionClear { obtainLockForClear(regionEvent); } try { - List bucketsCleared = clearRegion(regionEvent, cacheWrite, null); + Set<Integer> bucketsCleared = clearRegion(regionEvent); if (partitionedRegion.getTotalNumberOfBuckets() != bucketsCleared.size()) { String message = "Unable to clear all the buckets from the partitioned region " diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClearMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClearMessage.java index b66ab44..b48c9ee 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClearMessage.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionClearMessage.java @@ -18,10 +18,7 @@ package org.apache.geode.internal.cache; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; import org.apache.geode.DataSerializer; import org.apache.geode.cache.CacheException; @@ -36,6 +33,7 @@ import org.apache.geode.distributed.internal.ReplyProcessor21; import org.apache.geode.distributed.internal.ReplySender; import org.apache.geode.distributed.internal.membership.InternalDistributedMember; import org.apache.geode.internal.Assert; +import org.apache.geode.internal.CopyOnWriteHashSet; import org.apache.geode.internal.NanoTimer; import org.apache.geode.internal.cache.partitioned.PartitionMessage; import org.apache.geode.internal.logging.log4j.LogMarker; @@ -57,7 +55,7 @@ public class PartitionedRegionClearMessage extends PartitionMessage { private PartitionedRegion partitionedRegion; - private ArrayList bucketsCleared; + private Set<Integer> bucketsCleared; @Override public EventID getEventID() { @@ -66,7 +64,7 @@ public class PartitionedRegionClearMessage extends PartitionMessage { public PartitionedRegionClearMessage() {} - PartitionedRegionClearMessage(Set recipients, PartitionedRegion region, + PartitionedRegionClearMessage(Set<InternalDistributedMember> recipients, PartitionedRegion region, ReplyProcessor21 processor, PartitionedRegionClearMessage.OperationType operationType, final RegionEventImpl event) { super(recipients, region.getPRId(), processor); @@ -90,11 +88,10 @@ public class PartitionedRegionClearMessage extends PartitionMessage { protected Throwable processCheckForPR(PartitionedRegion pr, DistributionManager distributionManager) { if (pr != null && !pr.getDistributionAdvisor().isInitialized()) { - Throwable thr = new ForceReattemptException( + return new ForceReattemptException( String.format("%s : could not find partitioned region with Id %s", distributionManager.getDistributionManagerId(), pr.getRegionIdentifier())); - return thr; } return null; } @@ -160,16 +157,17 @@ public class PartitionedRegionClearMessage extends PartitionMessage { * received from the "far side" */ public static class PartitionedRegionClearResponse extends ReplyProcessor21 { - CopyOnWriteArrayList bucketsCleared = new CopyOnWriteArrayList(); + CopyOnWriteHashSet<Integer> bucketsCleared = new CopyOnWriteHashSet<>(); - public PartitionedRegionClearResponse(InternalDistributedSystem system, Set initMembers) { + public PartitionedRegionClearResponse(InternalDistributedSystem system, + Set<InternalDistributedMember> initMembers) { super(system, initMembers); } @Override public void process(DistributionMessage msg) { if (msg instanceof PartitionedRegionClearReplyMessage) { - List buckets = ((PartitionedRegionClearReplyMessage) msg).bucketsCleared; + Set<Integer> buckets = ((PartitionedRegionClearReplyMessage) msg).bucketsCleared; if (buckets != null) { bucketsCleared.addAll(buckets); } @@ -194,7 +192,7 @@ public class PartitionedRegionClearMessage extends PartitionMessage { public static class PartitionedRegionClearReplyMessage extends ReplyMessage { - private ArrayList bucketsCleared; + private Set<Integer> bucketsCleared; private OperationType op; @@ -209,7 +207,7 @@ public class PartitionedRegionClearMessage extends PartitionMessage { public PartitionedRegionClearReplyMessage() {} private PartitionedRegionClearReplyMessage(int processorId, OperationType op, - ArrayList bucketsCleared, ReplyException ex) { + Set<Integer> bucketsCleared, ReplyException ex) { super(); this.bucketsCleared = bucketsCleared; this.op = op; @@ -219,7 +217,7 @@ public class PartitionedRegionClearMessage extends PartitionMessage { /** Send an ack */ public static void send(InternalDistributedMember recipient, int processorId, ReplySender dm, - OperationType op, ArrayList bucketsCleared, ReplyException ex) { + OperationType op, Set<Integer> bucketsCleared, ReplyException ex) { Assert.assertTrue(recipient != null, "partitionedRegionClearReplyMessage NULL reply message"); @@ -262,7 +260,7 @@ public class PartitionedRegionClearMessage extends PartitionMessage { DeserializationContext context) throws IOException, ClassNotFoundException { super.fromData(in, context); op = PartitionedRegionClearMessage.OperationType.values()[in.readByte()]; - bucketsCleared = DataSerializer.readArrayList(in); + bucketsCleared = DataSerializer.readObject(in); } @Override @@ -270,7 +268,7 @@ public class PartitionedRegionClearMessage extends PartitionMessage { SerializationContext context) throws IOException { super.toData(out, context); out.writeByte(op.ordinal()); - DataSerializer.writeArrayList(bucketsCleared, out); + DataSerializer.writeObject(bucketsCleared, out); } @Override diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionClearTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionClearTest.java index d8c42af..bd37d9e 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionClearTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionClearTest.java @@ -28,7 +28,6 @@ import static org.mockito.Mockito.when; import java.util.Collections; import java.util.HashSet; -import java.util.List; import java.util.Set; import org.junit.Before; @@ -45,7 +44,6 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem; import org.apache.geode.distributed.internal.MembershipListener; import org.apache.geode.distributed.internal.membership.InternalDistributedMember; import org.apache.geode.internal.cache.partitioned.RegionAdvisor; -import org.apache.geode.internal.cache.versions.RegionVersionVector; public class PartitionedRegionClearTest { @@ -74,7 +72,7 @@ public class PartitionedRegionClearTest { for (int i = 0; i < numBuckets; i++) { BucketRegion bucketRegion = mock(BucketRegion.class); when(bucketRegion.getBucketAdvisor()).thenReturn(bucketAdvisor); - when(bucketRegion.size()).thenReturn(1); + when(bucketRegion.size()).thenReturn(1).thenReturn(0); when(bucketRegion.getId()).thenReturn(i); bucketRegions.add(bucketRegion); } @@ -131,7 +129,7 @@ public class PartitionedRegionClearTest { Region<String, PartitionRegionConfig> region = mock(Region.class); when(partitionedRegion.getPRRoot()).thenReturn(region); PartitionedRegionClear spyPartitionedRegionClear = spy(partitionedRegionClear); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear) + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear) .attemptToSendPartitionedRegionClearMessage(regionEvent, PartitionedRegionClearMessage.OperationType.OP_LOCK_FOR_PR_CLEAR); InternalDistributedMember internalDistributedMember = mock(InternalDistributedMember.class); @@ -151,7 +149,7 @@ public class PartitionedRegionClearTest { Region<String, PartitionRegionConfig> region = mock(Region.class); when(partitionedRegion.getPRRoot()).thenReturn(region); PartitionedRegionClear spyPartitionedRegionClear = spy(partitionedRegionClear); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear) + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear) .attemptToSendPartitionedRegionClearMessage(regionEvent, PartitionedRegionClearMessage.OperationType.OP_UNLOCK_FOR_PR_CLEAR); InternalDistributedMember internalDistributedMember = mock(InternalDistributedMember.class); @@ -171,14 +169,13 @@ public class PartitionedRegionClearTest { Region<String, PartitionRegionConfig> region = mock(Region.class); when(partitionedRegion.getPRRoot()).thenReturn(region); PartitionedRegionClear spyPartitionedRegionClear = spy(partitionedRegionClear); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear) + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear) .attemptToSendPartitionedRegionClearMessage(regionEvent, PartitionedRegionClearMessage.OperationType.OP_PR_CLEAR); InternalDistributedMember internalDistributedMember = mock(InternalDistributedMember.class); when(distributionManager.getId()).thenReturn(internalDistributedMember); - RegionVersionVector regionVersionVector = mock(RegionVersionVector.class); - spyPartitionedRegionClear.clearRegion(regionEvent, false, regionVersionVector); + spyPartitionedRegionClear.clearRegion(regionEvent); verify(spyPartitionedRegionClear, times(1)).clearRegionLocal(regionEvent); verify(spyPartitionedRegionClear, times(1)).sendPartitionedRegionClearMessage(regionEvent, @@ -227,7 +224,7 @@ public class PartitionedRegionClearTest { assertThat(thrown) .isInstanceOf(PartitionedRegionPartialClearException.class) .hasMessage( - "Unable to find primary bucket region during clear operation for region: prRegion"); + "Unable to find primary bucket region during clear operation on prRegion region."); verify(retryTimer, times(0)).waitForBucketsRecovery(); } @@ -241,7 +238,7 @@ public class PartitionedRegionClearTest { Set<BucketRegion> buckets = setupBucketRegions(partitionedRegionDataStore, bucketAdvisor); when(partitionedRegion.getDataStore()).thenReturn(partitionedRegionDataStore); - List bucketsCleared = partitionedRegionClear.clearRegionLocal(regionEvent); + Set<Integer> bucketsCleared = partitionedRegionClear.clearRegionLocal(regionEvent); assertThat(bucketsCleared).hasSize(buckets.size()); @@ -254,25 +251,44 @@ public class PartitionedRegionClearTest { } @Test - public void clearRegionLocalRetriesClearOnLocalPrimaryBucketRegions() { + public void clearRegionLocalRetriesClearOnNonClearedLocalPrimaryBucketRegionsWhenMembershipChanges() { RegionEventImpl regionEvent = mock(RegionEventImpl.class); BucketAdvisor bucketAdvisor = mock(BucketAdvisor.class); when(bucketAdvisor.hasPrimary()).thenReturn(true); PartitionedRegionDataStore partitionedRegionDataStore = mock(PartitionedRegionDataStore.class); doNothing().when(partitionedRegionDataStore).lockBucketCreationForRegionClear(); Set<BucketRegion> buckets = setupBucketRegions(partitionedRegionDataStore, bucketAdvisor); + + final int numExtraBuckets = 3; + Set<BucketRegion> extraBuckets = new HashSet<>(); + for (int i = 0; i < numExtraBuckets; i++) { + BucketRegion bucketRegion = mock(BucketRegion.class); + when(bucketRegion.getBucketAdvisor()).thenReturn(bucketAdvisor); + when(bucketRegion.size()).thenReturn(1); + when(bucketRegion.getId()).thenReturn(i + buckets.size()); + extraBuckets.add(bucketRegion); + } + Set<BucketRegion> allBuckets = new HashSet<>(buckets); + allBuckets.addAll(extraBuckets); + + // After the first try, add 3 extra buckets to the local bucket regions + when(partitionedRegionDataStore.getAllLocalBucketRegions()).thenReturn(buckets) + .thenReturn(allBuckets); + when(partitionedRegionDataStore.getAllLocalPrimaryBucketRegions()).thenReturn(buckets) + .thenReturn(allBuckets); + when(partitionedRegion.getDataStore()).thenReturn(partitionedRegionDataStore); PartitionedRegionClear spyPartitionedRegionClear = spy(partitionedRegionClear); when(spyPartitionedRegionClear.getMembershipChange()).thenReturn(true).thenReturn(false); - List bucketsCleared = spyPartitionedRegionClear.clearRegionLocal(regionEvent); + Set<Integer> bucketsCleared = spyPartitionedRegionClear.clearRegionLocal(regionEvent); - int expectedClears = buckets.size() * 2; /* clear is called twice on each bucket */ + int expectedClears = allBuckets.size(); assertThat(bucketsCleared).hasSize(expectedClears); ArgumentCaptor<RegionEventImpl> argument = ArgumentCaptor.forClass(RegionEventImpl.class); - for (BucketRegion bucketRegion : buckets) { - verify(bucketRegion, times(2)).cmnClearRegion(argument.capture(), eq(false), eq(true)); + for (BucketRegion bucketRegion : allBuckets) { + verify(bucketRegion, times(1)).cmnClearRegion(argument.capture(), eq(false), eq(true)); RegionEventImpl bucketRegionEvent = argument.getValue(); assertThat(bucketRegionEvent.getRegion()).isEqualTo(bucketRegion); } @@ -372,7 +388,6 @@ public class PartitionedRegionClearTest { PartitionedRegionDataStore partitionedRegionDataStore = mock(PartitionedRegionDataStore.class); Set<BucketRegion> buckets = setupBucketRegions(partitionedRegionDataStore, bucketAdvisor); when(partitionedRegion.getDataStore()).thenReturn(partitionedRegionDataStore); - InternalDistributedMember member = mock(InternalDistributedMember.class); partitionedRegionClear.releaseClearLockLocal(); @@ -424,8 +439,7 @@ public class PartitionedRegionClearTest { PartitionedRegionClear spyPartitionedRegionClear = spy(partitionedRegionClear); doNothing().when(spyPartitionedRegionClear).acquireDistributedClearLock(any()); doNothing().when(spyPartitionedRegionClear).assignAllPrimaryBuckets(); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear).clearRegion(regionEvent, false, - null); + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear).clearRegion(regionEvent); spyPartitionedRegionClear.doClear(regionEvent, false); @@ -441,8 +455,7 @@ public class PartitionedRegionClearTest { PartitionedRegionClear spyPartitionedRegionClear = spy(partitionedRegionClear); doNothing().when(spyPartitionedRegionClear).acquireDistributedClearLock(any()); doNothing().when(spyPartitionedRegionClear).assignAllPrimaryBuckets(); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear).clearRegion(regionEvent, - cacheWrite, null); + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear).clearRegion(regionEvent); spyPartitionedRegionClear.doClear(regionEvent, cacheWrite); @@ -456,8 +469,7 @@ public class PartitionedRegionClearTest { PartitionedRegionClear spyPartitionedRegionClear = spy(partitionedRegionClear); doNothing().when(spyPartitionedRegionClear).acquireDistributedClearLock(any()); doNothing().when(spyPartitionedRegionClear).assignAllPrimaryBuckets(); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear).clearRegion(regionEvent, - cacheWrite, null); + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear).clearRegion(regionEvent); spyPartitionedRegionClear.doClear(regionEvent, cacheWrite); @@ -475,8 +487,7 @@ public class PartitionedRegionClearTest { doNothing().when(spyPartitionedRegionClear).assignAllPrimaryBuckets(); doNothing().when(spyPartitionedRegionClear).obtainLockForClear(regionEvent); doNothing().when(spyPartitionedRegionClear).releaseLockForClear(regionEvent); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear).clearRegion(regionEvent, - cacheWrite, null); + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear).clearRegion(regionEvent); spyPartitionedRegionClear.doClear(regionEvent, cacheWrite); @@ -495,8 +506,7 @@ public class PartitionedRegionClearTest { doNothing().when(spyPartitionedRegionClear).assignAllPrimaryBuckets(); doNothing().when(spyPartitionedRegionClear).obtainLockForClear(regionEvent); doNothing().when(spyPartitionedRegionClear).releaseLockForClear(regionEvent); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear).clearRegion(regionEvent, - cacheWrite, null); + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear).clearRegion(regionEvent); spyPartitionedRegionClear.doClear(regionEvent, cacheWrite); @@ -515,8 +525,7 @@ public class PartitionedRegionClearTest { doNothing().when(spyPartitionedRegionClear).assignAllPrimaryBuckets(); doNothing().when(spyPartitionedRegionClear).obtainLockForClear(regionEvent); doNothing().when(spyPartitionedRegionClear).releaseLockForClear(regionEvent); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear).clearRegion(regionEvent, - cacheWrite, null); + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear).clearRegion(regionEvent); spyPartitionedRegionClear.doClear(regionEvent, cacheWrite); @@ -537,8 +546,7 @@ public class PartitionedRegionClearTest { doNothing().when(spyPartitionedRegionClear).assignAllPrimaryBuckets(); doNothing().when(spyPartitionedRegionClear).obtainLockForClear(regionEvent); doNothing().when(spyPartitionedRegionClear).releaseLockForClear(regionEvent); - doReturn(Collections.EMPTY_LIST).when(spyPartitionedRegionClear).clearRegion(regionEvent, - cacheWrite, null); + doReturn(Collections.EMPTY_SET).when(spyPartitionedRegionClear).clearRegion(regionEvent); Throwable thrown = catchThrowable(() -> spyPartitionedRegionClear.doClear(regionEvent, cacheWrite));
