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