gesterzhou commented on a change in pull request #4987:
URL: https://github.com/apache/geode/pull/4987#discussion_r416954212



##########
File path: 
geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
##########
@@ -10373,4 +10377,27 @@ void updatePartitionRegionConfig(
   public SenderIdMonitor getSenderIdMonitor() {
     return senderIdMonitor;
   }
+
+  protected ClearPartitionedRegion getClearPartitionedRegion() {
+    return clearPartitionedRegion;
+  }
+
+  @Override
+  void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean 
useRVV) {
+    // Synchronized to avoid other threads invoking clear on this vm/node.
+    synchronized (clearLock) {
+      clearPartitionedRegion.doClear(regionEvent, cacheWrite, this);

Review comment:
       I wonder before calling doClear(), we need to call: final TXStateProxy 
tx = cache.getTXMgr().pauseTransaction();
   
   Since we will get rvvLock for all buckets before clear, there's no 
guaranteed sequence for getting rvvlock for buckets, if some on-going tx 
requested some rvvLock on some buckets (such as bucket1) and is requesting 
rvvLock on bucket2. If clear thread did not pause the transaction, there could 
be deadlock. 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to