diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java index 08dfb5760..3f456faef 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java @@ -39,7 +39,7 @@ import java.util.Optional; */ public interface ActivityType { - SimpleServiceLoader FINDER = new SimpleServiceLoader(ActivityType.class); + SimpleServiceLoader FINDER = new SimpleServiceLoader<>(ActivityType.class); /** * Create an instance of an activity from the activity type. diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardAction.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardAction.java index d13de4ef9..95207bc89 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardAction.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardAction.java @@ -23,10 +23,12 @@ public class StandardAction, O extends Runnable> i private final A activity; private final OpSource opsource; + private final int slot; - public StandardAction(A activity, OpSource opsource) { + public StandardAction(A activity, int slot) { this.activity = activity; - this.opsource = opsource; + this.opsource = activity.getOpSource(); + this.slot = slot; } @Override @@ -39,12 +41,12 @@ public class StandardAction, O extends Runnable> i int tries = 0; int code= 0; - Throwable error = null; while (tries++ <= activity.getMaxTries()) { - + Throwable error = null; long startedAt = System.nanoTime(); try (Timer.Context ct = activity.getInstrumentation().getOrCreateExecuteTimer().time()) { op.run(); + break; } catch (Exception e) { error = e; } finally { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActionDispenser.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActionDispenser.java new file mode 100644 index 000000000..ce5e238f7 --- /dev/null +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActionDispenser.java @@ -0,0 +1,17 @@ +package io.nosqlbench.engine.api.activityimpl.uniform; + +import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; +import io.nosqlbench.engine.api.activityapi.core.Activity; + +public class StandardActionDispenser implements ActionDispenser { + private final StandardActivity activity; + + public StandardActionDispenser(StandardActivity activity) { + this.activity = activity; + } + + @Override + public StandardAction getAction(int slot) { + return new StandardAction<>(activity,slot); + } +} diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java index 24a7e89ac..a347f4afe 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java @@ -1,12 +1,15 @@ package io.nosqlbench.engine.api.activityimpl.uniform; +import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityapi.planning.OpSource; -import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import io.nosqlbench.engine.api.activityimpl.DiagRunnableOpMapper; import io.nosqlbench.engine.api.activityimpl.OpDispenser; import io.nosqlbench.engine.api.activityimpl.SimpleActivity; +import io.nosqlbench.engine.api.templating.ParsedCommand; +import io.nosqlbench.nb.api.errors.OpConfigError; +import java.util.List; +import java.util.Map; import java.util.function.Function; /** @@ -16,28 +19,37 @@ import java.util.function.Function; * * @param A type of runnable which wraps the operations for this type of driver. */ -public abstract class StandardActivity extends SimpleActivity { +public class StandardActivity extends SimpleActivity { - private OpSource opsource; + private final DriverAdapter adapter; + private final OpSource opsource; - public StandardActivity(ActivityDef activityDef) { + public StandardActivity(DriverAdapter adapter, ActivityDef activityDef) { super(activityDef); + this.adapter = adapter; + + try { + Function> opmapper = adapter.getOpMapper(); + Function, Map> preprocessor = adapter.getPreprocessor(); + OpSequence> seq = createOpSourceFromCommands(opmapper,List.of(preprocessor)); + opsource= OpSource.of(seq); + } catch (Exception e) { + if (e instanceof OpConfigError) { + throw e; + } else { + throw new OpConfigError("Error mapping workload template to operations: " + e.getMessage(), null, e); + } + } } - public synchronized OpSource getOpsource() { - if (this.opsource == null) { - Function> dispenserMapper = getOpMapperFunction(); - } + public OpSource getOpSource() { return opsource; } - protected abstract Function> getOpMapperFunction(); - - - public Function> getRunnableOpFunction() { - DiagRunnableOpMapper mapper = new DiagRunnableOpMapper(); - return mapper::apply; - } +// public Function> getRunnableOpFunction() { +// DiagRunnableOpMapper mapper = new DiagRunnableOpMapper(); +// return mapper::apply; +// } } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivityType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivityType.java new file mode 100644 index 000000000..c3f2c1675 --- /dev/null +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivityType.java @@ -0,0 +1,26 @@ +package io.nosqlbench.engine.api.activityimpl.uniform; + +import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; +import io.nosqlbench.engine.api.activityapi.core.ActivityType; +import io.nosqlbench.engine.api.activityimpl.ActivityDef; +import io.nosqlbench.nb.api.spi.SimpleServiceLoader; + +public class StandardActivityType> implements ActivityType { + + public static SimpleServiceLoader FINDER = new SimpleServiceLoader(DriverAdapter.class); + private final DriverAdapter adapter; + + public StandardActivityType(DriverAdapter adapter) { + this.adapter = adapter; + } + + @Override + public A getActivity(ActivityDef activityDef) { + return (A) new StandardActivity(adapter,activityDef); + } + + @Override + public ActionDispenser getActionDispenser(A activity) { + return new StandardActionDispenser(activity); + } +}