This is an automated email from the ASF dual-hosted git repository.
bschuchardt pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 1e5e7dc GEODE-6326 versionTestConcurrentEventsOnEmptyRegion fails in
CI in multiple configurations
1e5e7dc is described below
commit 1e5e7dc5551d8ad94f15fc2d1efa9069b55b7e11
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Tue Jan 29 09:04:07 2019 -0800
GEODE-6326 versionTestConcurrentEventsOnEmptyRegion fails in CI in multiple
configurations
Added slow-GII processing to, I hope, cause the image-transfer problem
to happen more frequently.
Added a dump of region contents, including version stamps to give us
better artifacts to show that it is an image-transfer problem.
---
.../geode/cache30/MultiVMRegionTestCase.java | 85 +++++++++++++---------
1 file changed, 52 insertions(+), 33 deletions(-)
diff --git
a/geode-dunit/src/main/java/org/apache/geode/cache30/MultiVMRegionTestCase.java
b/geode-dunit/src/main/java/org/apache/geode/cache30/MultiVMRegionTestCase.java
index 108d9e4..b2f5bc89 100644
---
a/geode-dunit/src/main/java/org/apache/geode/cache30/MultiVMRegionTestCase.java
+++
b/geode-dunit/src/main/java/org/apache/geode/cache30/MultiVMRegionTestCase.java
@@ -91,6 +91,7 @@ import org.apache.geode.cache.util.CacheListenerAdapter;
import org.apache.geode.cache.util.TxEventTestUtil;
import org.apache.geode.distributed.ConfigurationProperties;
import org.apache.geode.distributed.internal.DMStats;
+import org.apache.geode.distributed.internal.DistributionConfig;
import
org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.internal.AvailablePortHelper;
import org.apache.geode.internal.HeapDataOutputStream;
@@ -100,6 +101,7 @@ import org.apache.geode.internal.Version;
import org.apache.geode.internal.cache.EntryExpiryTask;
import org.apache.geode.internal.cache.ExpiryTask;
import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.internal.cache.InitialImageOperation;
import org.apache.geode.internal.cache.LocalRegion;
import org.apache.geode.internal.cache.PartitionedRegion;
import org.apache.geode.internal.cache.RegionEntry;
@@ -122,6 +124,7 @@ import org.apache.geode.test.dunit.SerializableRunnableIF;
import org.apache.geode.test.dunit.ThreadUtils;
import org.apache.geode.test.dunit.VM;
import org.apache.geode.test.dunit.Wait;
+import org.apache.geode.test.dunit.internal.DUnitLauncher;
/**
* Abstract superclass of {@link Region} tests that involve more than one VM.
@@ -8222,17 +8225,25 @@ public abstract class MultiVMRegionTestCase extends
RegionTestCase {
SerializableRunnable createRegion = new SerializableRunnable("Create
Region") {
@Override
public void run() {
+ // set log-level to fine so we'll see InitialImageOperation keys in
the log for
+ // GEODE-6326
+ System.setProperty(DistributionConfig.LOG_LEVEL_NAME, "fine");
try {
final RegionFactory<?, ?> f;
if (VM.getCurrentVMNum() == 0) {
f = getCache().createRegionFactory(
getRegionAttributes(RegionShortcut.REPLICATE_PROXY.toString()));
} else {
+ if (VM.getCurrentVMNum() == 2) {
+ InitialImageOperation.slowImageProcessing = 1;
+ }
f = getCache().createRegionFactory(getRegionAttributes());
}
CCRegion = (LocalRegion) f.create(name);
} catch (CacheException ex) {
fail("While creating region", ex);
+ } finally {
+ System.setProperty(DistributionConfig.LOG_LEVEL_NAME,
DUnitLauncher.logLevel);
}
}
};
@@ -8278,41 +8289,49 @@ public abstract class MultiVMRegionTestCase extends
RegionTestCase {
}
// For no-ack regions, messages may still be in flight between replicas at
this point
- await("Wait for the members to eventually be consistent")
- .untilAsserted(() -> {
-
- // check consistency of the regions
- Map r1Contents =
vm1.invoke(MultiVMRegionTestCase::getCCRegionContents);
- Map r2Contents =
vm2.invoke(MultiVMRegionTestCase::getCCRegionContents);
- Map r3Contents =
vm3.invoke(MultiVMRegionTestCase::getCCRegionContents);
-
- for (int i = 0; i < 10; i++) {
- String key = "cckey" + i;
- assertThat(r2Contents.get(key)).describedAs(
- "r2 contents are not consistent with r1 for " + key)
- .isEqualTo(r1Contents.get(key));
- assertThat(r3Contents.get(key)).describedAs(
- "r3 contents are not consistent with r2 for " + key)
- .isEqualTo(r2Contents.get(key));
- for (int subi = 1; subi < 3; subi++) {
- String subkey = key + "-" + subi;
- if (r1Contents.containsKey(subkey)) {
- assertThat(r2Contents.get(subkey)).describedAs(
- "r2 contents are not consistent with r1 for subkey " +
subkey).isEqualTo(
- r1Contents.get(subkey));
- assertThat(r3Contents.get(subkey)).describedAs(
- "r3 contents are not consistent with r2 for subkey " +
subkey).isEqualTo(
- r2Contents.get(subkey));
- } else {
- assertThat(r2Contents.containsKey(subkey))
- .describedAs("r2 contains subkey " + subkey + " that r1
does not").isFalse();
- assertThat(r3Contents.containsKey(subkey))
- .describedAs("r3 contains subkey " + subkey + " that r1
does not").isFalse();
+ try {
+ await("Wait for the members to eventually be consistent")
+ .untilAsserted(() -> {
+
+ // check consistency of the regions
+ Map r1Contents =
vm1.invoke(MultiVMRegionTestCase::getCCRegionContents);
+ Map r2Contents =
vm2.invoke(MultiVMRegionTestCase::getCCRegionContents);
+ Map r3Contents =
vm3.invoke(MultiVMRegionTestCase::getCCRegionContents);
+
+ for (int i = 0; i < 10; i++) {
+ String key = "cckey" + i;
+ assertThat(r2Contents.get(key)).describedAs(
+ "r2 contents are not consistent with r1 for " + key)
+ .isEqualTo(r1Contents.get(key));
+ assertThat(r3Contents.get(key)).describedAs(
+ "r3 contents are not consistent with r2 for " + key)
+ .isEqualTo(r2Contents.get(key));
+ for (int subi = 1; subi < 3; subi++) {
+ String subkey = key + "-" + subi;
+ if (r1Contents.containsKey(subkey)) {
+ assertThat(r2Contents.get(subkey)).describedAs(
+ "r2 contents are not consistent with r1 for subkey " +
subkey).isEqualTo(
+ r1Contents.get(subkey));
+ assertThat(r3Contents.get(subkey)).describedAs(
+ "r3 contents are not consistent with r2 for subkey " +
subkey).isEqualTo(
+ r2Contents.get(subkey));
+ } else {
+ assertThat(r2Contents.containsKey(subkey))
+ .describedAs("r2 contains subkey " + subkey + " that r1
does not").isFalse();
+ assertThat(r3Contents.containsKey(subkey))
+ .describedAs("r3 contains subkey " + subkey + " that r1
does not").isFalse();
+ }
}
}
- }
- });
-
+ });
+ } finally {
+ vm1.invoke("dump region contents", () -> CCRegion.dumpBackingMap());
+ vm2.invoke("dump region contents", () -> {
+ CCRegion.dumpBackingMap();
+ InitialImageOperation.slowImageProcessing = 0;
+ });
+ vm3.invoke("dump region contents", () -> CCRegion.dumpBackingMap());
+ }
}
private void doOpsLoop(int runTimeMs, boolean includeClear) {