added shutdownAll unit test that hangs if it waits for cache create to finish
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/2cb9aa08 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/2cb9aa08 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/2cb9aa08 Branch: refs/heads/feature/GEM-983 Commit: 2cb9aa081ee5e6f16e0a66be91cf300c5dda71fe Parents: b5b42bf Author: Darrel Schneider <dschnei...@pivotal.io> Authored: Thu Nov 3 15:05:09 2016 -0700 Committer: Darrel Schneider <dschnei...@pivotal.io> Committed: Thu Nov 3 15:05:09 2016 -0700 ---------------------------------------------------------------------- .../cache/partitioned/ShutdownAllDUnitTest.java | 53 ++++++++++++++++++++ 1 file changed, 53 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2cb9aa08/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ShutdownAllDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ShutdownAllDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ShutdownAllDUnitTest.java index 1bb06f1..304604e 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ShutdownAllDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ShutdownAllDUnitTest.java @@ -21,8 +21,12 @@ import java.io.IOException; import java.util.Set; import java.util.TreeSet; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; +import com.jayway.awaitility.Awaitility; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -44,7 +48,9 @@ import org.apache.geode.cache.Region; import org.apache.geode.cache.server.CacheServer; import org.apache.geode.cache.util.CacheListenerAdapter; import org.apache.geode.distributed.internal.InternalDistributedSystem; +import org.apache.geode.internal.cache.CacheLifecycleListener; import org.apache.geode.internal.cache.DiskRegion; +import org.apache.geode.internal.cache.GemFireCacheImpl; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.cache.control.InternalResourceManager; import org.apache.geode.internal.cache.control.InternalResourceManager.ResourceObserver; @@ -187,6 +193,53 @@ public class ShutdownAllDUnitTest extends JUnit4CacheTestCase { vm1.invoke(removeExceptionTag1(expectedExceptions)); } + private static final AtomicBoolean calledCreateCache = new AtomicBoolean(); + private static final AtomicBoolean calledCloseCache = new AtomicBoolean(); + private static CacheLifecycleListener cll; + @Test + public void testShutdownAllInterruptsCacheCreation() throws ExecutionException, InterruptedException, TimeoutException { + Host host = Host.getHost(0); + VM vm0 = host.getVM(0); + VM vm2 = host.getVM(2); + closeAllCache(); + // in vm0 create the cache in a way that hangs until + // it sees that a shutDownAll is in progress + AsyncInvocation<?> asyncCreate = vm0.invokeAsync(() -> { + cll = new CacheLifecycleListener() { + @Override + public void cacheCreated(GemFireCacheImpl cache) { + calledCreateCache.set(true); + Awaitility.await().atMost(90, TimeUnit.SECONDS).until(() -> cache.isCacheAtShutdownAll()); + } + @Override + public void cacheClosed(GemFireCacheImpl cache) { + calledCloseCache.set(true); + } + }; + GemFireCacheImpl.addCacheLifecycleListener(cll); + getCache(); + }); + try { + boolean vm0CalledCreateCache = vm0.invoke(() -> { + Awaitility.await().atMost(90, TimeUnit.SECONDS).until(() -> calledCreateCache.get()); + return calledCreateCache.get(); + }); + assertTrue(vm0CalledCreateCache); + shutDownAllMembers(vm2, 1); + asyncCreate.get(60, TimeUnit.SECONDS); + boolean vm0CalledCloseCache = vm0.invoke(() -> { + Awaitility.await().atMost(90, TimeUnit.SECONDS).until(() -> calledCloseCache.get()); + return calledCloseCache.get(); + }); + assertTrue(vm0CalledCloseCache); + } finally { + vm0.invoke(() -> { + calledCreateCache.set(false); + calledCloseCache.set(false); + GemFireCacheImpl.removeCacheLifecycleListener(cll); + }); + } + } @Test public void testShutdownAllOneServerAndRecover() throws Throwable { Host host = Host.getHost(0);