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 76a889c3f..0286bccf5 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 @@ -82,18 +82,40 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen /** * Simply stop the motors - * - * @param forcing whether to force (without trying to wait) the activity to reach stopped/finished state */ - public void stopActivity(boolean forcing) { - logger.info(() -> - (forcing ? "forcing " : "") + "stopping activity in progress: " + this.getActivityDef().getAlias()); + public void stopActivity() { + logger.info(() -> "stopping activity in progress: " + this.getActivityDef().getAlias()); + + activity.setRunState(RunState.Stopping); + motors.forEach(Motor::requestStop); + tally.awaitNoneOther(RunState.Stopped, RunState.Finished); + + shutdownExecutorService(Integer.MAX_VALUE); + tally.awaitNoneOther(RunState.Stopped,RunState.Finished); + activity.setRunState(RunState.Stopped); + + logger.info(() -> "stopped: " + this.getActivityDef().getAlias() + " with " + motors.size() + " slots"); + + Annotators.recordAnnotation(Annotation.newBuilder() + .session(sessionId) + .interval(this.startedAt, this.stoppedAt) + .layer(Layer.Activity) + .label("alias", getActivityDef().getAlias()) + .label("driver", getActivityDef().getActivityType()) + .label("workload", getActivityDef().getParams().getOptionalString("workload").orElse("none")) + .detail("params", getActivityDef().toString()) + .build() + ); + } + + /** + * Force stop the motors without trying to wait for the activity to reach stopped/finished state + */ + public void forceStopActivity() { + logger.info(() -> "force stopping activity in progress: " + this.getActivityDef().getAlias()); activity.setRunState(RunState.Stopping); motors.forEach(Motor::requestStop); - if (!forcing) { - tally.awaitNoneOther(RunState.Stopped, RunState.Finished); - } shutdownExecutorService(Integer.MAX_VALUE); tally.awaitNoneOther(RunState.Stopped,RunState.Finished); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityRuntimeInfo.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityRuntimeInfo.java index 847033685..f16b449ec 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityRuntimeInfo.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityRuntimeInfo.java @@ -84,10 +84,9 @@ public class ActivityRuntimeInfo implements ProgressCapable { return this.activity.getRunState(); } - public void stopActivity() { this.executor.stopActivity(false); } - public void forceStopActivity() { - this.executor.stopActivity(true); - } + public void stopActivity() { this.executor.stopActivity(); } + + public void forceStopActivity() { this.executor.forceStopActivity(); } public ActivityExecutor getActivityExecutor() { return executor; diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java index 37fa1be67..f34ad26e9 100644 --- a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java +++ b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java @@ -65,7 +65,7 @@ public class ActivityExecutorTest { try { ad.setThreads(1); ae.startActivity(); - ae.stopActivity(false); + ae.stopActivity(); ae.startActivity(); ae.startActivity(); ExecutionResult executionResult = future.get();