From 8895c8629391a0cab6ed6b7f2167f7e218ffd1ef Mon Sep 17 00:00:00 2001 From: Eric Shu Date: Mon, 23 Sep 2019 11:26:35 -0700 Subject: [PATCH] GEODE-7230: Avoid verification occurred before commit is finished. --- ...verTransactionFailoverDistributedTest.java | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClientServerTransactionFailoverDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClientServerTransactionFailoverDistributedTest.java index e73a43dc0c8b..ff5652e26c90 100644 --- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClientServerTransactionFailoverDistributedTest.java +++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClientServerTransactionFailoverDistributedTest.java @@ -51,6 +51,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientHealthMonitor; import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID; import org.apache.geode.internal.logging.LogService; +import org.apache.geode.test.awaitility.GeodeAwaitility; import org.apache.geode.test.dunit.AsyncInvocation; import org.apache.geode.test.dunit.VM; import org.apache.geode.test.dunit.rules.CacheRule; @@ -127,6 +128,12 @@ private int createServerRegion(int totalNumBuckets, boolean isAccessor) throws E private int createServerRegion(int totalNumBuckets, boolean isAccessor, int redundancy) throws Exception { + return createServerRegion(totalNumBuckets, isAccessor, redundancy, false); + } + + private int createServerRegion(int totalNumBuckets, boolean isAccessor, int redundancy, + boolean setMaximumTimeBetweenPingsLargerThanDefaultTimeout) + throws Exception { PartitionAttributesFactory factory = new PartitionAttributesFactory(); factory.setTotalNumBuckets(totalNumBuckets).setRedundantCopies(redundancy); if (isAccessor) { @@ -138,6 +145,12 @@ private int createServerRegion(int totalNumBuckets, boolean isAccessor, int redu CacheServer server = cacheRule.getCache().addCacheServer(); server.setPort(0); + if (setMaximumTimeBetweenPingsLargerThanDefaultTimeout) { + // set longer than GeodeAwaitility.DEFAULT_TIMEOUT to avoid GII triggered by + // region synchronize with. + // This ensures the commit is brought into replicas by the CommitProcessQueryMessage. + server.setMaximumTimeBetweenPings((int) GeodeAwaitility.getTimeout().getValueInMS() + 60000); + } server.start(); return server.getPort(); } @@ -356,7 +369,7 @@ public void txCommitGetsAppliedOnAllTheReplicasAfterHostIsShutDownAndIfOneOfTheN getBlackboard().initBlackboard(); VM client = server4; - port1 = server1.invoke(() -> createServerRegion(1, false, 2)); + port1 = server1.invoke(() -> createServerRegion(1, false, 2, true)); server1.invoke(() -> { Region region = cacheRule.getCache().getRegion(regionName); @@ -364,9 +377,9 @@ public void txCommitGetsAppliedOnAllTheReplicasAfterHostIsShutDownAndIfOneOfTheN region.put("Key-2", "Value-2"); }); - port2 = server2.invoke(() -> createServerRegion(1, false, 2)); + port2 = server2.invoke(() -> createServerRegion(1, false, 2, true)); - server3.invoke(() -> createServerRegion(1, false, 2)); + server3.invoke(() -> createServerRegion(1, false, 2, true)); client.invoke(() -> createClientRegion(true, port1, port2)); @@ -433,14 +446,18 @@ public void beforeProcessMessage(ClusterDistributionManager dm, server2.invoke(() -> { Region region = cacheRule.getCache().getRegion(regionName); - assertThat(region.get("TxKey-1")).isEqualTo("TxValue-1"); - assertThat(region.get("TxKey-2")).isEqualTo("TxValue-2"); + await().untilAsserted(() -> { + assertThat(region.get("TxKey-1")).isEqualTo("TxValue-1"); + assertThat(region.get("TxKey-2")).isEqualTo("TxValue-2"); + }); }); server3.invoke(() -> { Region region = cacheRule.getCache().getRegion(regionName); - assertThat(region.get("TxKey-1")).isEqualTo("TxValue-1"); - assertThat(region.get("TxKey-2")).isEqualTo("TxValue-2"); + await().untilAsserted(() -> { + assertThat(region.get("TxKey-1")).isEqualTo("TxValue-1"); + assertThat(region.get("TxKey-2")).isEqualTo("TxValue-2"); + }); }); client.invoke(() -> {