Return-Path: X-Original-To: apmail-geode-commits-archive@minotaur.apache.org Delivered-To: apmail-geode-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 76328185BF for ; Tue, 3 Nov 2015 19:38:51 +0000 (UTC) Received: (qmail 45550 invoked by uid 500); 3 Nov 2015 19:38:51 -0000 Delivered-To: apmail-geode-commits-archive@geode.apache.org Received: (qmail 45518 invoked by uid 500); 3 Nov 2015 19:38:51 -0000 Mailing-List: contact commits-help@geode.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@geode.incubator.apache.org Delivered-To: mailing list commits@geode.incubator.apache.org Received: (qmail 45509 invoked by uid 99); 3 Nov 2015 19:38:51 -0000 Received: from Unknown (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Nov 2015 19:38:51 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id D89321A20D0 for ; Tue, 3 Nov 2015 19:38:50 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.791 X-Spam-Level: X-Spam-Status: No, score=0.791 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-eu-west.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id C4M0zehjN3kN for ; Tue, 3 Nov 2015 19:38:36 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-eu-west.apache.org (ASF Mail Server at mx1-eu-west.apache.org) with SMTP id DED3E24E1C for ; Tue, 3 Nov 2015 19:38:34 +0000 (UTC) Received: (qmail 42882 invoked by uid 99); 3 Nov 2015 19:38:34 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Nov 2015 19:38:34 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D0DA5E0B28; Tue, 3 Nov 2015 19:38:33 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: dschneider@apache.org To: commits@geode.incubator.apache.org Date: Tue, 03 Nov 2015 19:38:37 -0000 Message-Id: <755b1c11796642ab93d93d5bead7d3de@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [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 Authored: Mon Oct 26 16:01:01 2015 -0700 Committer: Darrel Schneider 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 =