You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2022/06/08 22:42:47 UTC
[geode] 15/22: GEODE-9132: Use factory method to avoid escaped reference
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 40715edb97cc7a4e475cb88bd624fba970eb5203
Author: Kirk Lund <kl...@apache.org>
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 caafc57bc7..8419dc5969 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 b8597c17af..5f4e589d22 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 376fc8ed46..eafb99123c 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);
}