You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/01/30 04:38:50 UTC

[25/29] incubator-brooklyn git commit: fix the nondet cancellation test race observed previously

fix the nondet cancellation test race observed previously


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

Branch: refs/heads/master
Commit: 627aaad9536b3c81700cf8bfb9135a065bcff220
Parents: 9d5ba14
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Sat Jan 30 02:45:09 2016 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Sat Jan 30 02:45:09 2016 +0000

----------------------------------------------------------------------
 .../util/core/task/BasicExecutionManager.java   | 20 ++++++++++++++++++++
 .../core/task/DynamicSequentialTaskTest.java    |  6 +++++-
 2 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/627aaad9/brooklyn-server/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
index c75ad0b..ee15bec 100644
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
+++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
@@ -59,6 +59,8 @@ import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.exceptions.RuntimeInterruptedException;
 import org.apache.brooklyn.util.text.Identifiers;
 import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.CountdownTimer;
+import org.apache.brooklyn.util.time.Duration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -165,8 +167,26 @@ public class BasicExecutionManager implements ExecutionManager {
     }
     
     public void shutdownNow() {
+        shutdownNow(null);
+    }
+    
+    /** shuts down the executor, and if a duration is supplied awaits termination for that long.
+     * @return whether everything is terminated
+     */
+    @Beta
+    public boolean shutdownNow(Duration howLongToWaitForTermination) {
         runner.shutdownNow();
         delayedRunner.shutdownNow();
+        if (howLongToWaitForTermination!=null) {
+            CountdownTimer timer = howLongToWaitForTermination.countdownTimer();
+            try {
+                runner.awaitTermination(timer.getDurationRemaining().toMilliseconds(), TimeUnit.MILLISECONDS);
+                if (timer.isLive()) delayedRunner.awaitTermination(timer.getDurationRemaining().toMilliseconds(), TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                throw Exceptions.propagate(e);
+            }
+        }
+        return runner.isTerminated() && delayedRunner.isTerminated();
     }
     
     public void addListener(ExecutionListener listener) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/627aaad9/brooklyn-server/core/src/test/java/org/apache/brooklyn/util/core/task/DynamicSequentialTaskTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/test/java/org/apache/brooklyn/util/core/task/DynamicSequentialTaskTest.java b/brooklyn-server/core/src/test/java/org/apache/brooklyn/util/core/task/DynamicSequentialTaskTest.java
index 763c067..d74c7bf 100644
--- a/brooklyn-server/core/src/test/java/org/apache/brooklyn/util/core/task/DynamicSequentialTaskTest.java
+++ b/brooklyn-server/core/src/test/java/org/apache/brooklyn/util/core/task/DynamicSequentialTaskTest.java
@@ -88,7 +88,11 @@ public class DynamicSequentialTaskTest {
     
     @AfterMethod(alwaysRun=true)
     public void tearDown() throws Exception {
-        if (em != null) em.shutdownNow();
+        if (em != null) {
+            // need to await termination, otherwise interrupted-but-still-running threads 
+            // may update the cancellations/messages and interfere with subsequent tests
+            Assert.assertTrue(em.shutdownNow(Duration.FIVE_SECONDS));
+        }
     }
 
     @Test