improved testEntryTtl3
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/653acbad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/653acbad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/653acbad
Branch: refs/heads/feature/GEODE-148
Commit: 653acbad6191679b6556063713be3e157cb75790
Parents: 620aa08
Author: Darrel Schneider <dschneider@pivotal.io>
Authored: Tue Jul 21 14:24:47 2015 -0700
Committer: Darrel Schneider <dschneider@pivotal.io>
Committed: Thu Jul 23 17:14:07 2015 -0700
----------------------------------------------------------------------
.../gemfire/cache30/RegionTestCase.java | 181 ++++++-------------
1 file changed, 54 insertions(+), 127 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/653acbad/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java
index 8f20e12..acf071c 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java
@@ -2404,16 +2404,18 @@ public abstract class RegionTestCase extends CacheTestCase {
}
/**
- * Expire an entry with a ttl time. Set a new ttl time, create the
- * same entry again, make sure it observes the <em>new</em> ttl time.
+ * Configure entry expiration with a ttl time.
+ * Create an entry and records its scheduled expiration time.
+ * Then mutate the region expiration configuration and confirm
+ * that the entry's expiration time is rescheduled.
*/
public void testEntryTtl3() {
final String name = this.getUniqueName();
- final int timeout1 = 200; // ms
- final int timeout2 = 2000;
+ // test no longer waits for this expiration to happen
+ final int timeout1 = 500 * 1000; // ms
+ final int timeout2 = 2000 * 1000; // ms
final String key1 = "KEY1";
final String value1 = "VALUE1";
- final String value2 = "VALUE2";
AttributesFactory factory = new AttributesFactory(getRegionAttributes());
ExpirationAttributes expire1 =
@@ -2429,139 +2431,64 @@ public abstract class RegionTestCase extends CacheTestCase {
factory.addCacheListener(list);
RegionAttributes attrs = factory.create();
- Region region = null;
+ LocalRegion region;
System.setProperty(LocalRegion.EXPIRY_MS_PROPERTY, "true");
try {
- region = createRegion(name, attrs);
+ region = (LocalRegion) createRegion(name, attrs);
+ } finally {
+ System.getProperties().remove(LocalRegion.EXPIRY_MS_PROPERTY);
+ }
- // DebuggerSupport.waitForJavaDebugger(getLogWriter(), "Set breakpoint in
- // invalidate");
- ExpiryTask.suspendExpiration();
- Region.Entry entry = null;
- long tilt;
- eventCount = 0;
- try {
- region.create(key1, value1);
- tilt = System.currentTimeMillis() + timeout1;
- assertTrue(list.waitForInvocation(1000));
- entry = region.getEntry(key1);
- Assert.assertTrue(value1.equals(entry.getValue()));
- }
- finally {
- ExpiryTask.permitExpiration();
- }
- waitForInvalidate(entry, tilt);
- if (!getRegionAttributes().getDataPolicy().withPartitioning()) {
- // Disk regions are VERY slow, so we need to wait for the event...
- WaitCriterion wc = new WaitCriterion() {
- public boolean done() {
- return eventCount == 1;
- }
- public String description() {
- return "eventCount never became 1";
- }
- };
- DistributedTestCase.waitForCriterion(wc, 10 * 1000, 100, true);
- }
- eventCount = 0;
+ region.create(key1, value1);
+ EntryExpiryTask eet = region.getEntryExpiryTask(key1);
+ final long firstExpiryTime = eet.getExpirationTime();
- // Do it again with a put (I guess)
- ExpiryTask.suspendExpiration();
- try {
- region.put(key1, value1);
- tilt = System.currentTimeMillis() + timeout1;
- entry = region.getEntry(key1);
- Assert.assertTrue(value1.equals(entry.getValue()));
- assertTrue(list.waitForInvocation(1000));
- }
- finally {
- ExpiryTask.permitExpiration();
+ AttributesMutator mutt = region.getAttributesMutator();
+ ExpirationAttributes expire2 = new ExpirationAttributes(timeout2, ExpirationAction.INVALIDATE);
+ mutt.setEntryTimeToLive(expire2);
+ eet = region.getEntryExpiryTask(key1);
+ final long secondExpiryTime = eet.getExpirationTime();
+ if ((secondExpiryTime - firstExpiryTime) <= 0) {
+ fail("expiration time should have been greater after changing region config from 500
to 2000. firstExpiryTime=" + firstExpiryTime + " secondExpiryTime=" + secondExpiryTime);
+ }
+
+ // now set back to be more recent
+ mutt = region.getAttributesMutator();
+ ExpirationAttributes expire3 = new ExpirationAttributes(timeout1, ExpirationAction.INVALIDATE);
+ mutt.setEntryTimeToLive(expire3);
+ eet = region.getEntryExpiryTask(key1);
+ final long thirdExpiryTime = eet.getExpirationTime();
+ assertEquals(firstExpiryTime, thirdExpiryTime);
+ // confirm that it still has not expired
+ assertEquals(0, eventCount);
+
+ // now set it to a really short time and make sure it expires immediately
+ waitForExpiryClockToChange(region);
+ final Region.Entry entry = region.getEntry(key1);
+ mutt = region.getAttributesMutator();
+ ExpirationAttributes expire4 = new ExpirationAttributes(1, ExpirationAction.INVALIDATE);
+ mutt.setEntryTimeToLive(expire4);
+ WaitCriterion wc = new WaitCriterion() {
+ public boolean done() {
+ return fetchEntryValue(entry) == null;
}
- waitForInvalidate(entry, tilt);
- if (!getRegionAttributes().getDataPolicy().withPartitioning()) {
- // Disk regions are VERY slow, so we need to wait for the event...
- WaitCriterion wc = new WaitCriterion() {
- public boolean done() {
- return eventCount == 1;
- }
- public String description() {
- return "eventCount never became 1";
- }
- };
- DistributedTestCase.waitForCriterion(wc, 10 * 1000, 100, true);
+ public String description() {
+ return "entry never became invalid";
}
- eventCount = 0;
-
- // Change custom expiry for this region now...
- AttributesMutator mutt = region.getAttributesMutator();
- ExpirationAttributes expire2 = new ExpirationAttributes(timeout2,
- ExpirationAction.INVALIDATE);
- mutt.setEntryTimeToLive(expire2);
+ };
+ DistributedTestCase.waitForCriterion(wc, 10 * 1000, 10, true);
- ExpiryTask.suspendExpiration();
- try {
- region.put(key1, value2);
- tilt = System.currentTimeMillis() + timeout2;
- entry = region.getEntry(key1);
- Assert.assertTrue(value2.equals(entry.getValue()));
- assertTrue(list.waitForInvocation(1000));
- }
- finally {
- ExpiryTask.permitExpiration();
- if (region.getAttributes().getPartitionAttributes() != null)
- System.getProperties().remove(LocalRegion.EXPIRY_MS_PROPERTY);
+ WaitCriterion waitForEventCountToBeOne = new WaitCriterion() {
+ public boolean done() {
+ return eventCount == 1;
}
- waitForInvalidate(entry, tilt);
- if (!region.getAttributes().getDataPolicy().withPartitioning()) {
- // Disk regions are VERY slow, so we need to wait for the event...
- WaitCriterion wc = new WaitCriterion() {
- public boolean done() {
- return eventCount == 1;
- }
- public String description() {
- return "eventCount never became 1";
- }
- };
- DistributedTestCase.waitForCriterion(wc, 10 * 1000, 100, true);
+ public String description() {
+ return "eventCount never became 1";
}
- eventCount = 0;
-
- // Change custom expiry for this region now...
- mutt = region.getAttributesMutator();
- expire2 =
- new ExpirationAttributes(timeout2, ExpirationAction.INVALIDATE);
- mutt.setEntryTimeToLive(expire2);
-
- ExpiryTask.suspendExpiration();
- try {
- region.put(key1, value2);
- tilt = System.currentTimeMillis() + timeout2;
- entry = region.getEntry(key1);
- Assert.assertTrue(value2.equals(entry.getValue()));
- assertTrue(list.waitForInvocation(5000));
- }
- finally {
- ExpiryTask.permitExpiration();
- }
- waitForInvalidate(entry, tilt);
- if (!region.getAttributes().getDataPolicy().withPartitioning()) {
- // Disk regions are VERY slow, so we need to wait for the event...
- WaitCriterion wc = new WaitCriterion() {
- public boolean done() {
- return eventCount == 1;
- }
- public String description() {
- return "eventCount never became 1";
- }
- };
- DistributedTestCase.waitForCriterion(wc, 10 * 1000, 100, true);
- }
+ };
+ DistributedTestCase.waitForCriterion(waitForEventCountToBeOne, 10 * 1000, 10, true);
eventCount = 0;
}
- finally {
- System.getProperties().remove(LocalRegion.EXPIRY_MS_PROPERTY);
- }
- }
// /**
// * Expire an entry with a ttl time. Set a new ttl time, create the
|