geode-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dschnei...@apache.org
Subject [11/13] incubator-geode git commit: improved testEntryTtl3
Date Fri, 24 Jul 2015 00:16:22 GMT
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


Mime
View raw message