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);
   }