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 2020/10/28 19:14:32 UTC
[geode] 05/23: GEODE-7983: Clear region writer callbacks should not
be invoked for bucket regions (#4954)
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 d5b4a91e08e2f913bcba02638f7476c7907a0f78
Author: Xiaojian Zhou <ge...@users.noreply.github.com>
AuthorDate: Tue Apr 14 10:50:21 2020 -0700
GEODE-7983: Clear region writer callbacks should not be invoked for bucket regions (#4954)
---
.../cache/PartitionedRegionClearDUnitTest.java | 44 +++++++++++++++++++++-
.../internal/cache/partitioned/ClearPRMessage.java | 2 +-
2 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionClearDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionClearDUnitTest.java
index a5a22b9..e2e04eb 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionClearDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionClearDUnitTest.java
@@ -47,6 +47,7 @@ import org.apache.geode.test.dunit.rules.MemberVM;
public class PartitionedRegionClearDUnitTest implements Serializable {
protected static final String REGION_NAME = "testPR";
+ protected static final int TOTAL_BUCKET_NUM = 10;
protected static final int NUM_ENTRIES = 1000;
protected int locatorPort;
@@ -103,7 +104,8 @@ public class PartitionedRegionClearDUnitTest implements Serializable {
private void initDataStore(boolean withWriter) {
RegionFactory factory = getCache().createRegionFactory(getRegionShortCut())
- .setPartitionAttributes(new PartitionAttributesFactory().setTotalNumBuckets(10).create());
+ .setPartitionAttributes(
+ new PartitionAttributesFactory().setTotalNumBuckets(TOTAL_BUCKET_NUM).create());
if (withWriter) {
factory.setCacheWriter(new CountingCacheWriter());
}
@@ -169,6 +171,26 @@ public class PartitionedRegionClearDUnitTest implements Serializable {
return destroys;
};
+ SerializableCallableIF<Integer> getBucketRegionWriterClears = () -> {
+ int clears = 0;
+ for (int i = 0; i < TOTAL_BUCKET_NUM; i++) {
+ String bucketRegionName = "_B__" + REGION_NAME + "_" + i;
+ clears += clearsByRegion.get(bucketRegionName) == null ? 0
+ : clearsByRegion.get(bucketRegionName).get();
+ }
+ return clears;
+ };
+
+ SerializableCallableIF<Integer> getBucketRegionWriterDestroys = () -> {
+ int destroys = 0;
+ for (int i = 0; i < TOTAL_BUCKET_NUM; i++) {
+ String bucketRegionName = "_B__" + REGION_NAME + "_" + i;
+ destroys += destroysByRegion.get(bucketRegionName) == null ? 0
+ : destroysByRegion.get(bucketRegionName).get();
+ }
+ return destroys;
+ };
+
void configureServers(boolean dataStoreWithWriter, boolean accessorWithWriter) {
dataStore1.invoke(() -> initDataStore(dataStoreWithWriter));
dataStore2.invoke(() -> initDataStore(dataStoreWithWriter));
@@ -210,6 +232,10 @@ public class PartitionedRegionClearDUnitTest implements Serializable {
.isEqualTo(1);
assertThat(accessor.invoke(getWriterDestroys)).isEqualTo(accessor.invoke(getWriterClears))
.isEqualTo(0);
+
+ assertThat(dataStore3.invoke(getBucketRegionWriterDestroys))
+ .isEqualTo(dataStore3.invoke(getBucketRegionWriterClears))
+ .isEqualTo(0);
}
@Test
@@ -237,6 +263,10 @@ public class PartitionedRegionClearDUnitTest implements Serializable {
.isEqualTo(0);
assertThat(accessor.invoke(getWriterDestroys)).isEqualTo(accessor.invoke(getWriterClears))
.isEqualTo(1);
+
+ assertThat(accessor.invoke(getBucketRegionWriterDestroys))
+ .isEqualTo(accessor.invoke(getBucketRegionWriterClears))
+ .isEqualTo(0);
}
@Test
@@ -264,6 +294,10 @@ public class PartitionedRegionClearDUnitTest implements Serializable {
.isEqualTo(0);
assertThat(accessor.invoke(getWriterDestroys)).isEqualTo(accessor.invoke(getWriterClears))
.isEqualTo(1);
+
+ assertThat(accessor.invoke(getBucketRegionWriterDestroys))
+ .isEqualTo(accessor.invoke(getBucketRegionWriterClears))
+ .isEqualTo(0);
}
@Test
@@ -291,6 +325,10 @@ public class PartitionedRegionClearDUnitTest implements Serializable {
.isEqualTo(1);
assertThat(accessor.invoke(getWriterDestroys)).isEqualTo(accessor.invoke(getWriterClears))
.isEqualTo(0);
+
+ assertThat(dataStore3.invoke(getBucketRegionWriterDestroys))
+ .isEqualTo(dataStore3.invoke(getBucketRegionWriterClears))
+ .isEqualTo(0);
}
@Test
@@ -321,6 +359,10 @@ public class PartitionedRegionClearDUnitTest implements Serializable {
.isEqualTo(1);
assertThat(accessor.invoke(getWriterDestroys)).isEqualTo(accessor.invoke(getWriterClears))
.isEqualTo(0);
+
+ assertThat(dataStore3.invoke(getBucketRegionWriterDestroys))
+ .isEqualTo(dataStore3.invoke(getBucketRegionWriterClears))
+ .isEqualTo(0);
}
public static HashMap<String, AtomicInteger> clearsByRegion = new HashMap<>();
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 cc01920..2603b78 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
@@ -175,7 +175,7 @@ public class ClearPRMessage extends PartitionMessageWithDirectReply {
try {
RegionEventImpl regionEvent = new RegionEventImpl(bucketRegion, Operation.REGION_CLEAR, null,
false, region.getMyId(), eventID);
- bucketRegion.cmnClearRegion(regionEvent, true, true);
+ bucketRegion.cmnClearRegion(regionEvent, false, true);
} catch (PartitionOfflineException poe) {
logger.info(
"All members holding data for bucket {} are offline, no more retries will be attempted",