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 7597335edd26706069e98886c5752b353f888287 Author: Kirk Lund <[email protected]> AuthorDate: Thu Apr 22 11:42:09 2021 -0700 GEODE-9132: Use factory method to avoid escaped reference --- .../geode/internal/cache/PartitionedRegion.java | 2 +- .../internal/cache/PartitionedRegionClear.java | 28 +++++++++++++++++----- .../internal/cache/PartitionedRegionClearTest.java | 4 ++-- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java index d26cdd5..c5d84a4 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java @@ -319,7 +319,7 @@ public class PartitionedRegion extends LocalRegion } }; - private final PartitionedRegionClear partitionedRegionClear = new PartitionedRegionClear(this); + private final PartitionedRegionClear partitionedRegionClear = PartitionedRegionClear.create(this); /** * Global Region for storing PR config ( PRName->PRConfig). This region would be used to resolve 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 b8597c1..5f4e589 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 @@ -64,7 +64,27 @@ public class PartitionedRegionClear { private final AssignBucketsToPartitions assignBucketsToPartitions; private final UpdateAttributesProcessorFactory updateAttributesProcessorFactory; - public PartitionedRegionClear(PartitionedRegion partitionedRegion) { + public static PartitionedRegionClear create(PartitionedRegion partitionedRegion) { + PartitionedRegionClear partitionedRegionClear = new PartitionedRegionClear(partitionedRegion); + partitionedRegionClear.initialize(); + return partitionedRegionClear; + } + + @VisibleForTesting + static PartitionedRegionClear create(PartitionedRegion partitionedRegion, + DistributedLockService distributedLockService, + ColocationLeaderRegionProvider colocationLeaderRegionProvider, + AssignBucketsToPartitions assignBucketsToPartitions, + UpdateAttributesProcessorFactory updateAttributesProcessorFactory) { + PartitionedRegionClear partitionedRegionClear = + new PartitionedRegionClear(partitionedRegion, distributedLockService, + colocationLeaderRegionProvider, assignBucketsToPartitions, + updateAttributesProcessorFactory); + partitionedRegionClear.initialize(); + return partitionedRegionClear; + } + + private PartitionedRegionClear(PartitionedRegion partitionedRegion) { this(partitionedRegion, partitionedRegion.getPartitionedRegionLockService(), ColocationHelper::getLeaderRegion, @@ -72,8 +92,7 @@ public class PartitionedRegionClear { pr -> new UpdateAttributesProcessor(pr, true)); } - @VisibleForTesting - PartitionedRegionClear(PartitionedRegion partitionedRegion, + private PartitionedRegionClear(PartitionedRegion partitionedRegion, DistributedLockService distributedLockService, ColocationLeaderRegionProvider colocationLeaderRegionProvider, AssignBucketsToPartitions assignBucketsToPartitions, @@ -83,9 +102,6 @@ public class PartitionedRegionClear { this.colocationLeaderRegionProvider = colocationLeaderRegionProvider; this.assignBucketsToPartitions = assignBucketsToPartitions; this.updateAttributesProcessorFactory = updateAttributesProcessorFactory; - - // TODO: initialize needs to move out of constructor to prevent escape of reference to 'this' - initialize(); } private void initialize() { 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 376fc8e..eafb991 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 @@ -115,8 +115,8 @@ public class PartitionedRegionClearTest { doNothing().when(distributedLockService).unlock(anyString()); - partitionedRegionClear = new PartitionedRegionClear(partitionedRegion, distributedLockService, - colocationLeaderRegionProvider, assignBucketsToPartitions, + partitionedRegionClear = PartitionedRegionClear.create(partitionedRegion, + distributedLockService, colocationLeaderRegionProvider, assignBucketsToPartitions, updateAttributesProcessorFactory); }
