From 8995f5dfeffac8993112447863f1f750ae12977f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 3 Feb 2023 17:07:46 -0600 Subject: [PATCH] improvements to motor state model and activity --- .../io/nosqlbench/engine/api/activityapi/core/RunState.java | 2 +- .../engine/core/lifecycle/activity/ActivityExecutor.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/RunState.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/RunState.java index 0476dc762..17180dfc9 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/RunState.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/RunState.java @@ -106,7 +106,7 @@ public enum RunState { case Stopping, Finished, Errored -> true;// A motor has exhausted its input, and is finished with its work default -> false; }; - case Stopping -> (target == Stopped||target==Finished); // A motor was stopped by request before exhausting input + case Stopping -> (target == Stopped||target==Finished||target==Errored); // A motor was stopped by request before exhausting input case Finished -> (target == Running); // A motor was restarted? case Errored -> target==Errored; }; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java index bfdaf695e..8b55b6717 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java @@ -87,10 +87,10 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen activity.setRunState(RunState.Stopping); motors.forEach(Motor::requestStop); - tally.awaitNoneOther(RunState.Stopped, RunState.Finished); + tally.awaitNoneOther(RunState.Stopped, RunState.Finished, RunState.Errored); shutdownExecutorService(Integer.MAX_VALUE); - tally.awaitNoneOther(RunState.Stopped, RunState.Finished); + tally.awaitNoneOther(RunState.Stopped, RunState.Finished, RunState.Errored); activity.setRunState(RunState.Stopped); logger.info(() -> "stopped: " + this.getActivityDef().getAlias() + " with " + motors.size() + " slots"); @@ -349,7 +349,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen return activity; } - public void notifyException(Thread t, Throwable e) { + public synchronized void notifyException(Thread t, Throwable e) { logger.debug(() -> "Uncaught exception in activity thread forwarded to activity executor: " + e.getMessage()); this.exception = new RuntimeException("Error in activity thread " + t.getName(), e); this.requestStopMotors();