From dca81b1f8bdc7e1ffe8dfb8b2d761249bda4a8b6 Mon Sep 17 00:00:00 2001 From: Nelson Tavares de Sousa <ntd@informatik.uni-kiel.de> Date: Wed, 4 Feb 2015 16:01:05 +0100 Subject: [PATCH] minor fixes; duplicated Analysis.start to move to a void return type --- src/changes/changes.xml | 4 +++ .../framework/AbstractRunnableStage.java | 9 +++++++ src/main/java/teetime/framework/Analysis.java | 27 ++++++++++--------- src/site/markdown/wiki | 2 +- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 3f594729..3e47bfad 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -10,6 +10,10 @@ <action dev="ntd" type="add" issue="32"> Introduced a generic exception handling for stages. </action> + <action dev="ntd" type="update" issue="92"> + Introduced new method (returns void) in Analysis, which starts the execution of the analysis. + Marked old method as deprecated. + </action> </release> <release version="1.0" date="19.12.2014" description="Initial release"> diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java index 1aec986b..b673d353 100644 --- a/src/main/java/teetime/framework/AbstractRunnableStage.java +++ b/src/main/java/teetime/framework/AbstractRunnableStage.java @@ -6,6 +6,7 @@ import org.slf4j.LoggerFactory; import teetime.framework.exceptionHandling.StageException; import teetime.framework.exceptionHandling.StageExceptionHandler; import teetime.framework.exceptionHandling.StageExceptionHandler.FurtherExecution; +import teetime.framework.signal.TerminatingSignal; abstract class AbstractRunnableStage implements Runnable { @@ -52,6 +53,14 @@ abstract class AbstractRunnableStage implements Runnable { this.logger.debug("Finished runnable stage. (" + this.stage.getId() + ")"); if (failed) { + if (stage.getTerminationStrategy() == TerminationStrategy.BY_SIGNAL) { + TerminatingSignal signal = new TerminatingSignal(); + // TODO: Check if this is really needed... it seems like signals are passed on after their first arrival + InputPort<?>[] inputPorts = stage.getInputPorts(); + for (int i = 0; i < inputPorts.length; i++) { + stage.onSignal(signal, inputPorts[i]); + } + } throw new IllegalStateException("Terminated by StageExceptionListener"); } } diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java index 6f7dab0a..cc12eb81 100644 --- a/src/main/java/teetime/framework/Analysis.java +++ b/src/main/java/teetime/framework/Analysis.java @@ -11,7 +11,6 @@ import org.slf4j.LoggerFactory; import teetime.framework.exceptionHandling.IgnoringStageListener; import teetime.framework.exceptionHandling.StageExceptionHandler; -import teetime.framework.signal.TerminatingSignal; import teetime.framework.signal.ValidatingSignal; import teetime.framework.validation.AnalysisNotValidException; import teetime.util.Pair; @@ -140,8 +139,11 @@ public class Analysis implements UncaughtExceptionHandler { * This method will start the Analysis and all containing stages. * * @return a collection of thread/throwable pairs + * + * @deprecated As of release 1.1, replaced by {@link #execute()} */ - public void start() { + @Deprecated + public Collection<Pair<Thread, Throwable>> start() { // start analysis startThreads(this.consumerThreads); startThreads(this.finiteProducerThreads); @@ -170,10 +172,18 @@ public class Analysis implements UncaughtExceptionHandler { for (Thread thread : this.infiniteProducerThreads) { thread.interrupt(); } + + return this.exceptions; + } + + /** + * This method will start the Analysis and all containing stages. + */ + public void execute() { + start(); if (!exceptions.isEmpty()) { throw new RuntimeException("Errors while running analysis"); // TODO: add exceptions } - // return this.exceptions; } private void startThreads(final Iterable<Thread> threads) { @@ -199,15 +209,8 @@ public class Analysis implements UncaughtExceptionHandler { LOGGER.warn("Thread " + thread + " was interrupted. Terminating analysis now."); for (Stage stage : configuration.getThreadableStageJobs()) { if (stage.getOwningThread() != thread) { - switch (stage.getTerminationStrategy()) { - case BY_SELF_DECISION: { - stage.terminate(); // onSignal would also work, but this will execute in its own Thread - } - case BY_SIGNAL: { - final TerminatingSignal terminatingSignal = new TerminatingSignal(); - stage.onSignal(terminatingSignal, null); - } - default: + if (stage.getTerminationStrategy() == TerminationStrategy.BY_SELF_DECISION) { + stage.terminate(); } } } diff --git a/src/site/markdown/wiki b/src/site/markdown/wiki index 0e447457..a9358190 160000 --- a/src/site/markdown/wiki +++ b/src/site/markdown/wiki @@ -1 +1 @@ -Subproject commit 0e4474577e1f49bc96e734c286b2d9e0363895e8 +Subproject commit a93581905ef7b0584d52eae1898148ffa6201a31 -- GitLab