You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2015/11/03 20:38:37 UTC
[05/35] incubator-geode git commit: GEODE-361: fix expiry races in
unit test
GEODE-361: fix expiry races in unit test
The test now uses WaitCriterion when waiting
for an expiration. Also it now configures
millisecond expiry so the test runs faster.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/5cf63899
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/5cf63899
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/5cf63899
Branch: refs/heads/develop
Commit: 5cf63899ca5270d736339e1ad1192751a97cf66c
Parents: 82966c4
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Mon Oct 26 16:01:01 2015 -0700
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Mon Oct 26 16:02:10 2015 -0700
----------------------------------------------------------------------
.../gemstone/gemfire/cache30/CacheTestCase.java | 10 +++
.../cache30/RegionReliabilityTestCase.java | 84 ++++++++++++--------
2 files changed, 60 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5cf63899/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java
index 3ef9c27..23bb89d 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java
@@ -551,6 +551,16 @@ public abstract class CacheTestCase extends DistributedTestCase {
throws RegionExistsException, TimeoutException {
return getCache().createRegion(rootName, attrs);
}
+ public final Region createExpiryRootRegion(String rootName, RegionAttributes attrs)
+ throws RegionExistsException, TimeoutException {
+ System.setProperty(LocalRegion.EXPIRY_MS_PROPERTY, "true");
+ try {
+ return createRootRegion(rootName, attrs);
+ } finally {
+ System.getProperties().remove(LocalRegion.EXPIRY_MS_PROPERTY);
+ }
+ }
+
/**
* send an unordered message requiring an ack to all connected members
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5cf63899/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java
index 1f89bd2..f197425 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java
@@ -26,7 +26,9 @@ import com.gemstone.gemfire.distributed.internal.membership.*;
import com.gemstone.gemfire.internal.cache.*;
import java.util.concurrent.locks.Lock;
+
import dunit.*;
+import dunit.DistributedTestCase.WaitCriterion;
import java.io.*;
import java.util.*;
@@ -526,7 +528,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
fac.setScope(getRegionScope());
fac.setStatisticsEnabled(true);
RegionAttributes attr = fac.create();
- Region region = createRootRegion(name, attr);
+ final Region region = createExpiryRootRegion(name, attr);
// wait for memberTimeout to expire
waitForMemberTimeout();
@@ -557,7 +559,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
AttributesMutator mutator = region.getAttributesMutator();
mutator.setEntryTimeToLive(
new ExpirationAttributes(1, ExpirationAction.LOCAL_DESTROY));
- sleep(2000);
+ sleep(200);
// make sure no values were expired
Set entries = ((LocalRegion) region).basicEntries(false);
@@ -573,10 +575,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
}
});
- // sleep and make sure value expires
- sleep(2000);
- assertEquals(null, region.get("expireMe"));
- assertTrue(region.size() == 0);
+ waitForEntryDestroy(region, "expireMe");
}
/**
@@ -610,7 +609,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
fac.setScope(getRegionScope());
fac.setStatisticsEnabled(true);
RegionAttributes attr = fac.create();
- Region region = createRootRegion(name, attr);
+ final Region region = createExpiryRootRegion(name, attr);
// wait for memberTimeout to expire
waitForMemberTimeout();
@@ -620,7 +619,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
new ExpirationAttributes(1, ExpirationAction.LOCAL_DESTROY));
// sleep and make sure region does not expire
- sleep(2000);
+ sleep(200);
assertFalse(region.isDestroyed());
// create region in vm1
@@ -634,9 +633,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
}
});
- // sleep and make sure region expires
- sleep(2000);
- assertTrue(region.isDestroyed());
+ waitForRegionDestroy(region);
}
/**
@@ -753,8 +750,8 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
fac.setScope(getRegionScope());
fac.setStatisticsEnabled(true);
RegionAttributes attr = fac.create();
- Region region = createRootRegion(name, attr);
-
+ final Region region = createExpiryRootRegion(name, attr);
+
// wait for memberTimeout to expire
waitForMemberTimeout();
@@ -784,12 +781,16 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
AttributesMutator mutator = region.getAttributesMutator();
mutator.setEntryTimeToLive(
new ExpirationAttributes(1, ExpirationAction.LOCAL_DESTROY));
- sleep(2000);
+ WaitCriterion wc1 = new WaitCriterion() {
+ public boolean done() {
+ return ((LocalRegion) region).basicEntries(false).size() == 0;
+ }
+ public String description() {
+ return "expected zero entries but have " + ((LocalRegion) region).basicEntries(false).size();
+ }
+ };
+ DistributedTestCase.waitForCriterion(wc1, 30*1000, 10, true);
- // make sure values was expired
- Set entries = ((LocalRegion) region).basicEntries(false);
- assertTrue(entries.size() == 0);
-
// create region again
Host.getHost(0).getVM(1).invoke(new CacheSerializableRunnable("Create Region") {
public void run2() throws CacheException {
@@ -801,11 +802,8 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
});
region.put("expireMe", "expireMe");
- assertTrue(region.size() == 1);
- // sleep and make sure value expires again
- sleep(2000);
- assertEquals(null, region.get("expireMe"));
+ waitForEntryDestroy(region, "expireMe");
assertTrue(region.size() == 0);
}
@@ -840,7 +838,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
fac.setScope(getRegionScope());
fac.setStatisticsEnabled(true);
RegionAttributes attr = fac.create();
- Region region = createRootRegion(name, attr);
+ final Region region = createExpiryRootRegion(name, attr);
// wait for memberTimeout to expire
waitForMemberTimeout();
@@ -849,9 +847,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
mutator.setRegionTimeToLive(
new ExpirationAttributes(1, ExpirationAction.LOCAL_DESTROY));
- // sleep and make sure region does expire
- sleep(2000);
- assertTrue(region.isDestroyed());
+ waitForRegionDestroy(region);
}
/**
@@ -948,7 +944,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
fac.setScope(getRegionScope());
fac.setStatisticsEnabled(true);
RegionAttributes attr = fac.create();
- Region region = createRootRegion(name, attr);
+ final Region region = createExpiryRootRegion(name, attr);
// wait for memberTimeout to expire
waitForMemberTimeout();
@@ -961,13 +957,35 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
AttributesMutator mutator = region.getAttributesMutator();
mutator.setEntryTimeToLive(
new ExpirationAttributes(1, ExpirationAction.LOCAL_DESTROY));
- sleep(2000);
- // make sure value was expired
- assertNull(region.get("expireMe"));
+ waitForEntryDestroy(region, "expireMe");
assertTrue(region.size() == 0);
}
+ public static void waitForRegionDestroy(final Region region) {
+ WaitCriterion wc = new WaitCriterion() {
+ public boolean done() {
+ return region.isDestroyed();
+ }
+ public String description() {
+ return "expected region " + region + " to be destroyed";
+ }
+ };
+ DistributedTestCase.waitForCriterion(wc, 30*1000, 10, true);
+ }
+
+ public static void waitForEntryDestroy(final Region region, final Object key) {
+ WaitCriterion wc = new WaitCriterion() {
+ public boolean done() {
+ return region.get(key) == null;
+ }
+ public String description() {
+ return "expected entry " + key + " to not exist but it has the value " + region.get(key);
+ }
+ };
+ DistributedTestCase.waitForCriterion(wc, 30*1000, 10, true);
+ }
+
/**
* Tests affect of FULL_ACCESS on local region expiration actions.
*/
@@ -998,7 +1016,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
fac.setScope(getRegionScope());
fac.setStatisticsEnabled(true);
RegionAttributes attr = fac.create();
- Region region = createRootRegion(name, attr);
+ final Region region = createExpiryRootRegion(name, attr);
// wait for memberTimeout to expire
waitForMemberTimeout();
@@ -1007,9 +1025,7 @@ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase {
mutator.setRegionTimeToLive(
new ExpirationAttributes(1, ExpirationAction.LOCAL_DESTROY));
- // sleep and make sure region does expire
- sleep(2000);
- assertTrue(region.isDestroyed());
+ waitForRegionDestroy(region);
}
protected static Boolean[] detectedDeparture_testCommitDistributionException =