This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a commit to branch feature/GEODE-7682
in repository https://gitbox.apache.org/repos/asf/geode.git

commit f6516a71cb69650cf6373d8809e121e526682a5d
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Thu Feb 27 16:43:45 2020 -0800

    fix-4
---
 .../apache/geode/internal/cache/PartitionedRegion.java |  8 ++++++++
 .../apache/geode/internal/cache/RegionEventImpl.java   |  6 ++++++
 .../internal/cache/partitioned/ClearPRMessage.java     | 18 +++++++++++++-----
 3 files changed, 27 insertions(+), 5 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 2f30cf8..2a58cb6 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
@@ -2280,6 +2280,9 @@ public class PartitionedRegion extends LocalRegion
             result = response.waitForResult();
           }
         }
+        if (result) {
+          return;
+        }
       } catch (ForceReattemptException prce) {
         checkReadiness();
         InternalDistributedMember lastTarget = currentTarget;
@@ -2329,6 +2332,11 @@ public class PartitionedRegion extends LocalRegion
     ArrayList<ClearPRMessage> clearMsgList = new ArrayList<>();
     for (int bucketId = 0; bucketId < this.totalNumberOfBuckets; bucketId++) {
       ClearPRMessage clearPRMessage = new ClearPRMessage(bucketId);
+      BucketRegion bucketRegion = 
this.getDataStore().getLocalBucketById(bucketId);
+      RegionEventImpl bucketRegionEventImpl =
+          new RegionEventImpl(bucketRegion, Operation.REGION_CLEAR, null, 
false,
+              getMyId(), generateEventID());
+      clearPRMessage.setRegionEvent(bucketRegionEventImpl);
       clearMsgList.add(clearPRMessage);
     }
     return clearMsgList;
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java 
b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
index 402b7f2..6110636 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
@@ -119,6 +119,12 @@ public class RegionEventImpl
     return region;
   }
 
+  public void setRegionIfAbsent(LocalRegion region) {
+    if (this.region == null) {
+      this.region = region;
+    }
+  }
+
   @Override
   public Operation getOperation() {
     return this.op;
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/ClearPRMessage.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/ClearPRMessage.java
index 07bb311..fb2b5fb 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/ClearPRMessage.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/ClearPRMessage.java
@@ -58,7 +58,9 @@ public class ClearPRMessage extends 
PartitionMessageWithDirectReply {
 
   private Integer bucketId;
 
-  /** The time in ms to wait for a lock to be obtained during doLocalClear() */
+  /**
+   * The time in ms to wait for a lock to be obtained during doLocalClear()
+   */
   public static final int LOCK_WAIT_TIMEOUT_MS = 1000;
   public static final String BUCKET_NON_PRIMARY_MESSAGE =
       "The bucket region on target member is no longer primary";
@@ -115,8 +117,7 @@ public class ClearPRMessage extends 
PartitionMessageWithDirectReply {
 
   public ClearResponse send(DistributedMember recipient, PartitionedRegion 
region)
       throws ForceReattemptException {
-    Set<InternalDistributedMember> recipients =
-        Collections.singleton((InternalDistributedMember) recipient);
+    Set recipients = Collections.singleton(recipient);
     ClearResponse clearResponse = new ClearResponse(region.getSystem(), 
recipients);
     initMessage(region, recipients, clearResponse);
     if (logger.isDebugEnabled()) {
@@ -195,6 +196,7 @@ public class ClearPRMessage extends 
PartitionMessageWithDirectReply {
       throw new ForceReattemptException(BUCKET_NON_PRIMARY_MESSAGE);
     }
     try {
+      regionEvent.setRegionIfAbsent(bucketRegion);
       bucketRegion.cmnClearRegion(regionEvent, true, true);
     } catch (Exception ex) {
       throw new ForceReattemptException(
@@ -261,12 +263,16 @@ public class ClearPRMessage extends 
PartitionMessageWithDirectReply {
     appendFields(buff);
     buff.append(" ,distTx=");
     buff.append(this.isTransactionDistributed);
+    buff.append(",event=");
+    buff.append(regionEvent);
     buff.append(")");
     return buff.toString();
   }
 
   public static class ClearReplyMessage extends ReplyMessage {
-    /** Result of the Clear operation */
+    /**
+     * Result of the Clear operation
+     */
     boolean result;
 
     @Override
@@ -287,7 +293,9 @@ public class ClearPRMessage extends 
PartitionMessageWithDirectReply {
       setException(ex);
     }
 
-    /** Send an ack */
+    /**
+     * Send an ack
+     */
     public static void send(InternalDistributedMember recipient, int 
processorId,
         ReplySender replySender,
         boolean result, ReplyException ex) {

Reply via email to