From 1416c71d9149dfdce5042335b363039356368d51 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 20 Dec 2022 20:02:48 -0600 Subject: [PATCH] internalize activity start logic --- .../scenario/ScenarioController.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/ScenarioController.java index 64198b474..d7ab41ca1 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/ScenarioController.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/ScenarioController.java @@ -78,10 +78,21 @@ public class ScenarioController { .detail("params", activityDef.toString()) .build()); + doStartActivity(activityDef); + } - ActivityThreadsManager activityThreadsManager = getActivityExecutor(activityDef, true); - scenariologger.debug("START " + activityDef.getAlias()); - activityThreadsManager.startActivity(); + + private synchronized ActivityRuntimeInfo doStartActivity(ActivityDef activityDef) { + if (!this.activityInfoMap.containsKey(activityDef.getAlias())) { + Activity activity = this.activityLoader.loadActivity(activityDef); + ActivityExecutor executor = new ActivityExecutor(activity, this.scenario.getScenarioName()); + Future startedActivity = activitiesExecutor.submit(executor); + ActivityRuntimeInfo activityRuntimeInfo = new ActivityRuntimeInfo(activity, startedActivity, executor); + this.activityInfoMap.put(activity.getAlias(), activityRuntimeInfo); + executor.startActivity(); + scenariologger.debug("STARTED " + activityDef.getAlias()); + } + return this.activityInfoMap.get(activityDef.getAlias()); } /** @@ -107,7 +118,7 @@ public class ScenarioController { public synchronized void run(int timeout, Map activityDefMap) { ActivityDef ad = new ActivityDef(new ParameterMap(activityDefMap)); - run(timeout, ad); + run(ad, timeout); } /** @@ -126,13 +137,8 @@ public class ScenarioController { .detail("params", activityDef.toString()) .build()); - ActivityThreadsManager activityThreadsManager = getActivityExecutor(activityDef, true); - scenariologger.debug("RUN alias=" + activityDef.getAlias()); - scenariologger.debug(" (RUN/START) alias=" + activityDef.getAlias()); - activityThreadsManager.startActivity(); - scenariologger.debug(" (RUN/AWAIT before) alias=" + activityDef.getAlias()); - boolean completed = activityThreadsManager.awaitCompletion(timeout); - scenariologger.debug(" (RUN/AWAIT after) completed=" + activityDef.getAlias()); + doStartActivity(activityDef); + awaitActivity(activityDef, timeoutMs); } public synchronized void run(int timeout, String activityDefString) {