You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2016/09/12 19:30:43 UTC

[02/11] incubator-geode git commit: GEODE-1821: fix termination of invokeAsync threads

GEODE-1821: fix termination of invokeAsync threads

This closes #237


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/a232859b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/a232859b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/a232859b

Branch: refs/heads/feature/GEODE-420
Commit: a232859bc44573fcf32ec2f2b5de8ae604428676
Parents: 2a84453
Author: Ken Howe <kh...@pivotal.io>
Authored: Fri Aug 26 13:03:44 2016 -0700
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Tue Sep 6 14:58:49 2016 -0700

----------------------------------------------------------------------
 ...tentColocatedPartitionedRegionDUnitTest.java | 44 ++++++++++++++++----
 1 file changed, 35 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a232859b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java
index b701b70..409ce13 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java
@@ -706,8 +706,10 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     closeCache(vm0);
     closeCache(vm1);
 
+    // The following should fail immediately with ISE on vm0, it's not necessary to also try the operation on vm1.
     Object remoteException = null;
     remoteException = vm0.invoke(createPRsMissingParentRegionThread);
+
     assertEquals("Expected IllegalState Exception for missing colocated parent region", IllegalStateException.class, remoteException.getClass());
     assertTrue("Expected IllegalState Exception for missing colocated parent region", remoteException.toString().matches(
         "java.lang.IllegalStateException: Region specified in 'colocated-with'.*"));
@@ -737,15 +739,32 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     closeCache(vm0);
     closeCache(vm1);
 
-    AsyncInvocation async0 = vm0.invokeAsync(createPRsColocatedPairThread);
+    AsyncInvocation async0 = null;
+    AsyncInvocation async1a = null;
+    AsyncInvocation async1b = null;
+    try {
+      async0 = vm0.invokeAsync(createPRsColocatedPairThread);
 
-    Object logMsg = "";
-    Object remoteException = null;
-    AsyncInvocation async1 = vm1.invokeAsync(delayedCreatePRsMissingParentRegionThread);
-    remoteException = async1.get(MAX_WAIT, TimeUnit.MILLISECONDS);
-    assertEquals("Expected IllegalState Exception for missing colocated parent region", IllegalStateException.class, remoteException.getClass());
-    assertTrue("Expected IllegalState Exception for missing colocated parent region", remoteException.toString().matches(
-        "java.lang.IllegalStateException: Region specified in 'colocated-with'.*"));
+      Object logMsg = "";
+      Object remoteException = null;
+      async1a = vm1.invokeAsync(delayedCreatePRsMissingParentRegionThread);
+      remoteException = async1a.get(MAX_WAIT, TimeUnit.MILLISECONDS);
+
+      assertEquals("Expected IllegalState Exception for missing colocated parent region", IllegalStateException.class, remoteException.getClass());
+      assertTrue("Expected IllegalState Exception for missing colocated parent region", remoteException.toString().matches(
+          "java.lang.IllegalStateException: Region specified in 'colocated-with'.*"));
+    } finally {
+      // The real test is done now (either passing or failing) but there's some cleanup in this test that needs to be done.
+      //
+      // The vm0 invokeAsync thread is still alive after the expected exception on vm1. Cleanup by first re-creating both regions
+      // on vm1, vm0 thread should now complete. Then wait (i.e. join() on the thread) for the new vm1 thread and the vm0 thread to
+      // verify they terminated without timing out, and close the caches.
+      async1b = vm1.invokeAsync(createPRsColocatedPairThread);
+      async1b.join(MAX_WAIT);
+      async0.join(MAX_WAIT);
+      closeCache(vm1);
+      closeCache(vm0);
+    }
   }
 
   /**
@@ -782,10 +801,12 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     AsyncInvocation async0 = vm0.invokeAsync(createPRsMissingChildRegionDelayedStartThread);
     AsyncInvocation async1 = vm1.invokeAsync(createPRsMissingChildRegionDelayedStartThread);
     logMsg = async1.get(MAX_WAIT, TimeUnit.MILLISECONDS);
+    async0.get(MAX_WAIT, TimeUnit.MILLISECONDS);
     vm0.invoke(new ExpectedNumLogMessageResetter());
     vm1.invoke(new ExpectedNumLogMessageResetter());
     vm0.invoke(new ColocationLoggerIntervalResetter());
     vm1.invoke(new ColocationLoggerIntervalResetter());
+
     assertTrue("Expected missing colocated region warning on remote. Got message \"" + logMsg + "\"",
         logMsg.toString().matches(PATTERN_FOR_MISSING_CHILD_LOG));
   }
@@ -829,6 +850,7 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     vm1.invoke(new ExpectedNumLogMessageResetter());
     vm0.invoke(new ColocationLoggerIntervalResetter());
     vm1.invoke(new ColocationLoggerIntervalResetter());
+
     assertTrue("Expected missing colocated region warning on remote. Got message \"" + logMsg + "\"",
         logMsg.toString().matches(PATTERN_FOR_MISSING_CHILD_LOG));
   }
@@ -881,6 +903,7 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     vm1.invoke(new ExpectedNumLogMessageResetter());
     vm0.invoke(new ColocationLoggerIntervalResetter());
     vm1.invoke(new ColocationLoggerIntervalResetter());
+
     assertTrue("Expected missing colocated region warning on remote. Got message \"" + logMsg + "\"",
         logMsg.toString().matches(PATTERN_FOR_MISSING_CHILD_LOG));
   }
@@ -935,6 +958,7 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     vm1.invoke(new ExpectedNumLogMessageResetter());
     vm0.invoke(new ColocationLoggerIntervalResetter());
     vm1.invoke(new ColocationLoggerIntervalResetter());
+
     assertTrue("Expected missing colocated region warning on remote. Got message \"" + logMsg + "\"",
         logMsg.toString().matches(PATTERN_FOR_MISSING_CHILD_LOG));
   }
@@ -987,6 +1011,7 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     vm1.invoke(new ExpectedNumLogMessageResetter());
     vm0.invoke(new ColocationLoggerIntervalResetter());
     vm1.invoke(new ColocationLoggerIntervalResetter());
+
     assertTrue("Expected missing colocated region warning on remote. Got message \"" + logMsg + "\"",
         logMsg.toString().matches(PATTERN_FOR_MISSING_CHILD_LOG));
   }
@@ -1041,7 +1066,7 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     vm1.invoke(new ExpectedNumLogMessageResetter());
     vm0.invoke(new ColocationLoggerIntervalResetter());
     vm1.invoke(new ColocationLoggerIntervalResetter());
-    System.out.println(logMsg);
+
     assertTrue("Expected missing colocated region warning on remote. Got message \"" + logMsg + "\"",
         logMsg.toString().matches(PATTERN_FOR_MISSING_CHILD_LOG));
   }
@@ -1198,6 +1223,7 @@ public class PersistentColocatedPartitionedRegionDUnitTest extends PersistentPar
     async0.get(MAX_WAIT, TimeUnit.MILLISECONDS);
     vm0.invoke(new ColocationLoggerIntervalResetter());
     vm1.invoke(new ColocationLoggerIntervalResetter());
+
     // Expected warning logs only on the child region, because without the child there's nothing known about the remaining hierarchy
     assertTrue("Expected missing colocated region warning on remote. Got message \"" + logMsg + "\"",
         logMsg.toString().matches(PATTERN_FOR_MISSING_CHILD_LOG));