From 2f09e836de709b5abcff52858826fec561055f01 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 8 Jul 2021 11:49:08 -0500 Subject: [PATCH] Cqld4 improvements --- .../adapter/cqld4/Cqld4DriverAdapter.java | 26 ++++++ .../adapter/cqld4/Cqld4OpMapper.java | 51 +++++++++++ .../CqlD4PreparedBatchOpDispenser.java | 22 +++++ .../Cqld4BatchStatementDispenser.java | 3 +- .../Cqld4PreparedOpDispenser.java | 23 +++++ .../Cqld4SimpleCqlStatementDispenser.java | 6 +- .../adapter/optypes/Cqld4BatchStatement.java | 10 +++ .../optypes/Cqld4PreparedStatement.java | 9 ++ .../optypes/Cqld4SimpleCqlStatement.java | 2 +- .../nosqlbench/driver/cqld4/Cqld4Action.java | 88 ------------------- .../driver/cqld4/Cqld4ActivityType.java | 44 ---------- .../driver/cqld4/Cqld4OpMapper.java | 39 -------- .../Cqld4PreparedStatementDispenser.java | 18 ---- .../cqld4/optypes/Cqld4BatchStatement.java | 4 - .../cqld4/optypes/Cqld4PreparedStatement.java | 4 - 15 files changed, 147 insertions(+), 202 deletions(-) create mode 100644 driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java create mode 100644 driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4OpMapper.java create mode 100644 driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/CqlD4PreparedBatchOpDispenser.java rename driver-cqld4/src/main/java/io/nosqlbench/{driver => adapter}/cqld4/opdispensers/Cqld4BatchStatementDispenser.java (92%) create mode 100644 driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4PreparedOpDispenser.java rename driver-cqld4/src/main/java/io/nosqlbench/{driver => adapter}/cqld4/opdispensers/Cqld4SimpleCqlStatementDispenser.java (79%) create mode 100644 driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4BatchStatement.java create mode 100644 driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4PreparedStatement.java rename driver-cqld4/src/main/java/io/nosqlbench/{driver/cqld4 => adapter}/optypes/Cqld4SimpleCqlStatement.java (92%) delete mode 100644 driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4Action.java delete mode 100644 driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4ActivityType.java delete mode 100644 driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4OpMapper.java delete mode 100644 driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4PreparedStatementDispenser.java delete mode 100644 driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4BatchStatement.java delete mode 100644 driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4PreparedStatement.java diff --git a/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java new file mode 100644 index 000000000..1866634f1 --- /dev/null +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java @@ -0,0 +1,26 @@ +package io.nosqlbench.adapter.cqld4; + +import io.nosqlbench.driver.cqld4.Cqld4Op; +import io.nosqlbench.engine.api.activityimpl.OpDispenser; +import io.nosqlbench.engine.api.activityimpl.uniform.BaseDriverAdapter; +import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter; +import io.nosqlbench.engine.api.templating.ParsedCommand; +import io.nosqlbench.nb.annotations.Service; + +import java.util.function.Function; + +@Service(value = DriverAdapter.class,selector = "cqld4") +public class Cqld4DriverAdapter extends BaseDriverAdapter { + + private Cqld4SpaceCache sessionCache; + + @Override + public Function> getOpMapper() { + return new Cqld4OpMapper(getSpaceCache()); + } + + @Override + public Function getSpaceInitializer() { + return s -> new Cqld4Space(this); + } +} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4OpMapper.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4OpMapper.java new file mode 100644 index 000000000..39bccc9b8 --- /dev/null +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4OpMapper.java @@ -0,0 +1,51 @@ +package io.nosqlbench.adapter.cqld4; + +import com.datastax.oss.driver.api.core.CqlSession; +import io.nosqlbench.adapter.cqld4.opdispensers.CqlD4PreparedBatchOpDispenser; +import io.nosqlbench.adapter.cqld4.opdispensers.Cqld4BatchStatementDispenser; +import io.nosqlbench.adapter.cqld4.opdispensers.Cqld4PreparedOpDispenser; +import io.nosqlbench.adapter.cqld4.opdispensers.Cqld4SimpleCqlStatementDispenser; +import io.nosqlbench.driver.cqld4.Cqld4Op; +import io.nosqlbench.engine.api.activityimpl.OpDispenser; +import io.nosqlbench.engine.api.activityimpl.OpMapper; +import io.nosqlbench.engine.api.activityimpl.uniform.DriverSpaceCache; +import io.nosqlbench.engine.api.templating.ParsedCommand; +import io.nosqlbench.nb.api.errors.BasicError; + +public class Cqld4OpMapper implements OpMapper { + + + private final DriverSpaceCache cache; + + public Cqld4OpMapper(DriverSpaceCache cache) { + this.cache = cache; + } + + public OpDispenser apply(ParsedCommand cmd) { + + // if session field = static string, else ... + + boolean prepared = cmd.getStaticValueOr("prepared",false); + boolean batch = cmd.getStaticValueOr("boolean",false); + + if (cmd.isDefinedDynamic("session")) { + throw new BasicError("This driver adapter does not support dynamic sessions."); + } + // If it did, we would use something like this instead... + // LongFunction session = cmd.getAsFunctionOr("session", "default"); + + Cqld4Space cqld4Space = cache.get(cmd.getStaticValueOr("session", "default")); + CqlSession session = cqld4Space.getSession(); + + if (prepared && batch) { + return new CqlD4PreparedBatchOpDispenser(session,cmd); + } else if (prepared) { + return new Cqld4PreparedOpDispenser(session,cmd); + } else if (batch) { + return new Cqld4BatchStatementDispenser(session, cmd); + } else { + return new Cqld4SimpleCqlStatementDispenser(session,cmd); + } + } + +} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/CqlD4PreparedBatchOpDispenser.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/CqlD4PreparedBatchOpDispenser.java new file mode 100644 index 000000000..1ec9beb96 --- /dev/null +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/CqlD4PreparedBatchOpDispenser.java @@ -0,0 +1,22 @@ +package io.nosqlbench.adapter.cqld4.opdispensers; + +import com.datastax.oss.driver.api.core.CqlSession; +import io.nosqlbench.driver.cqld4.Cqld4Op; +import io.nosqlbench.engine.api.activityimpl.OpDispenser; +import io.nosqlbench.engine.api.templating.ParsedCommand; + +public class CqlD4PreparedBatchOpDispenser implements OpDispenser { + + private final CqlSession session; + private final ParsedCommand cmd; + + public CqlD4PreparedBatchOpDispenser(CqlSession session, ParsedCommand cmd) { + this.session = session; + this.cmd = cmd; + } + + @Override + public Cqld4Op apply(long value) { + return null; + } +} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4BatchStatementDispenser.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4BatchStatementDispenser.java similarity index 92% rename from driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4BatchStatementDispenser.java rename to driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4BatchStatementDispenser.java index 285721140..47dbb5faf 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4BatchStatementDispenser.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4BatchStatementDispenser.java @@ -1,4 +1,4 @@ -package io.nosqlbench.driver.cqld4.opdispensers; +package io.nosqlbench.adapter.cqld4.opdispensers; import com.datastax.oss.driver.api.core.CqlSession; import io.nosqlbench.driver.cqld4.Cqld4Op; @@ -18,4 +18,5 @@ public class Cqld4BatchStatementDispenser implements OpDispenser { public Cqld4Op apply(long value) { return null; } + } diff --git a/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4PreparedOpDispenser.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4PreparedOpDispenser.java new file mode 100644 index 000000000..0de8ad866 --- /dev/null +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4PreparedOpDispenser.java @@ -0,0 +1,23 @@ +package io.nosqlbench.adapter.cqld4.opdispensers; + +import com.datastax.oss.driver.api.core.CqlSession; +import io.nosqlbench.driver.cqld4.Cqld4Op; +import io.nosqlbench.engine.api.activityimpl.OpDispenser; +import io.nosqlbench.engine.api.templating.ParsedCommand; + +public class Cqld4PreparedOpDispenser implements OpDispenser { + + private final CqlSession session; + private final ParsedCommand cmd; + + public Cqld4PreparedOpDispenser(CqlSession session, ParsedCommand cmd) { + + this.session = session; + this.cmd = cmd; + } + + @Override + public Cqld4Op apply(long value) { + return null; + } +} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4SimpleCqlStatementDispenser.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4SimpleCqlStatementDispenser.java similarity index 79% rename from driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4SimpleCqlStatementDispenser.java rename to driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4SimpleCqlStatementDispenser.java index 5dcbe46e1..f275b058e 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4SimpleCqlStatementDispenser.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4SimpleCqlStatementDispenser.java @@ -1,13 +1,13 @@ -package io.nosqlbench.driver.cqld4.opdispensers; +package io.nosqlbench.adapter.cqld4.opdispensers; import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.cql.SimpleStatement; import io.nosqlbench.driver.cqld4.Cqld4Op; -import io.nosqlbench.driver.cqld4.optypes.Cqld4SimpleCqlStatement; +import io.nosqlbench.adapter.optypes.Cqld4SimpleCqlStatement; import io.nosqlbench.engine.api.activityimpl.OpDispenser; import io.nosqlbench.engine.api.templating.ParsedCommand; -public class Cqld4SimpleCqlStatementDispenser implements OpDispenser { +public class Cqld4SimpleCqlStatementDispenser implements OpDispenser { private final CqlSession session; private final ParsedCommand cmd; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4BatchStatement.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4BatchStatement.java new file mode 100644 index 000000000..1a2869b7f --- /dev/null +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4BatchStatement.java @@ -0,0 +1,10 @@ +package io.nosqlbench.adapter.optypes; + +import io.nosqlbench.driver.cqld4.Cqld4Op; + +public class Cqld4BatchStatement extends Cqld4Op { + @Override + public void run() { + + } +} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4PreparedStatement.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4PreparedStatement.java new file mode 100644 index 000000000..101ece2e7 --- /dev/null +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4PreparedStatement.java @@ -0,0 +1,9 @@ +package io.nosqlbench.adapter.optypes; + +import io.nosqlbench.driver.cqld4.Cqld4Op; + +public class Cqld4PreparedStatement extends Cqld4Op { + @Override + public void run() { + } +} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4SimpleCqlStatement.java b/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4SimpleCqlStatement.java similarity index 92% rename from driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4SimpleCqlStatement.java rename to driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4SimpleCqlStatement.java index 617ce3281..740bd2e5b 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4SimpleCqlStatement.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/adapter/optypes/Cqld4SimpleCqlStatement.java @@ -1,4 +1,4 @@ -package io.nosqlbench.driver.cqld4.optypes; +package io.nosqlbench.adapter.optypes; import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.cql.SimpleStatement; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4Action.java b/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4Action.java deleted file mode 100644 index ba4611ab3..000000000 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4Action.java +++ /dev/null @@ -1,88 +0,0 @@ -package io.nosqlbench.driver.cqld4; - -import com.codahale.metrics.Histogram; -import com.codahale.metrics.Timer; -import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver; -import io.nosqlbench.engine.api.activityapi.core.SyncAction; -import io.nosqlbench.engine.api.activityapi.errorhandling.modular.ErrorDetail; -import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import io.nosqlbench.engine.api.activityimpl.OpDispenser; - -import java.util.concurrent.TimeUnit; - -public class Cqld4Action implements SyncAction, ActivityDefObserver { - - private final int slot; - private final Cqld4Activity activity; - - private Timer bindTimer; - private Timer executeTimer; - private Timer resultTimer; - private Timer resultSuccessTimer; - private Histogram triesHisto; - private int maxTries; - - - public Cqld4Action(int slot, Cqld4Activity activity) { - this.slot = slot; - this.activity = activity; - } - - - @Override - public void init() { - this.bindTimer = activity.getInstrumentation().getOrCreateBindTimer(); - this.executeTimer = activity.getInstrumentation().getOrCreateExecuteTimer(); - this.resultTimer = activity.getInstrumentation().getOrCreateResultTimer(); - this.resultSuccessTimer = activity.getInstrumentation().getOrCreateResultSuccessTimer(); - this.triesHisto = activity.getInstrumentation().getOrCreateTriesHistogram(); - } - - @Override - public int runCycle(long cycle) { - - Cqld4Op cql4op; - try (Timer.Context ctx = bindTimer.time()) { - OpDispenser opDispenser = activity.getSequence().apply(cycle); - cql4op = opDispenser.apply(cycle); - } - - int tries = 0; - int result = 0; - Exception error=null; - while (tries < maxTries) { - tries++; - long startat = System.nanoTime(); - try { - try (Timer.Context ctx = executeTimer.time()) { - cql4op.run(); - } - } - catch (Exception e) { - error=e; - } finally { - long nanos = System.nanoTime() - startat; - resultTimer.update(nanos, TimeUnit.NANOSECONDS); - - if (error==null) { - resultSuccessTimer.update(nanos, TimeUnit.NANOSECONDS); - break; - } else { - ErrorDetail detail = activity.getErrorhandler().handleError(error,cycle,nanos); - result = detail.resultCode; - if (!detail.isRetryable()) { - break; - } - } - } - } - triesHisto.update(tries); - return result; - } - - - @Override - public void onActivityDefUpdate(ActivityDef activityDef) { - this.maxTries = activity.getActivityDef().getParams().getOptionalInteger("maxtries").orElse(10); - } -} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4ActivityType.java b/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4ActivityType.java deleted file mode 100644 index 598d56a02..000000000 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4ActivityType.java +++ /dev/null @@ -1,44 +0,0 @@ -package io.nosqlbench.driver.cqld4; - -import io.nosqlbench.engine.api.activityapi.core.Action; -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.annotations.Service; - -/** - * A new driver which use the Apache Cassandra CQL driver version 4. - * To differentiate code in this module from the initial CQL driver, - * all classes are prefixed with Cqld4. Full docs are in the cqld4.md file. - */ -@Service(value=ActivityType.class,selector = "cqld4") -public class Cqld4ActivityType implements ActivityType { - - @Override - public Cqld4Activity getActivity(ActivityDef activityDef) { - return new Cqld4Activity(activityDef); - } - - @Override - public ActionDispenser getActionDispenser(Cqld4Activity activity) { - if (activity.getParams().getOptionalString("async").isPresent()) { - throw new RuntimeException("This driver does not support async mode yet."); - } - return new Cqld4ActionDispenser(activity); - } - - private final static class Cqld4ActionDispenser implements ActionDispenser { - - private final Cqld4Activity activity; - - public Cqld4ActionDispenser(Cqld4Activity activity) { - this.activity = activity; - } - - @Override - public Action getAction(int slot) { - return new Cqld4Action(slot, activity); - } - } - -} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4OpMapper.java b/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4OpMapper.java deleted file mode 100644 index f3d26b9ec..000000000 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/Cqld4OpMapper.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.nosqlbench.driver.cqld4; - -import com.datastax.oss.driver.api.core.CqlSession; -import io.nosqlbench.driver.cqld4.opdispensers.Cqld4BatchStatementDispenser; -import io.nosqlbench.driver.cqld4.opdispensers.Cqld4PreparedStatementDispenser; -import io.nosqlbench.driver.cqld4.opdispensers.Cqld4SimpleCqlStatementDispenser; -import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import io.nosqlbench.engine.api.activityimpl.OpDispenser; -import io.nosqlbench.engine.api.templating.ParsedCommand; - -import java.util.function.Function; - -public class Cqld4OpMapper implements Function> { - - private final Function> templateToDispenser; - private final CqlSession session; - - public Cqld4OpMapper(CqlSession session, OpTemplate optpl) { - this.session = session; - ParsedCommand cmd = new ParsedCommand(optpl); - templateToDispenser = resolve(cmd); - } - - private Function> resolve(ParsedCommand cmd) { - if (cmd.isDefinedStatic("prepared") && cmd.getStaticValue("prepared", boolean.class)) { - return new Cqld4PreparedStatementDispenser(cmd); - } else if (cmd.isDefinedStatic("batch")) { - return ot -> new Cqld4BatchStatementDispenser(session, cmd); - } else { - return ot -> new Cqld4SimpleCqlStatementDispenser(session, cmd); - } - } - - @Override - public OpDispenser apply(OpTemplate opTemplate) { - return templateToDispenser.apply(opTemplate); - - } -} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4PreparedStatementDispenser.java b/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4PreparedStatementDispenser.java deleted file mode 100644 index 0acc9a6d0..000000000 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/opdispensers/Cqld4PreparedStatementDispenser.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.nosqlbench.driver.cqld4.opdispensers; - -import io.nosqlbench.driver.cqld4.Cqld4Op; -import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import io.nosqlbench.engine.api.activityimpl.OpDispenser; -import io.nosqlbench.engine.api.templating.ParsedCommand; - -import java.util.function.Function; - -public class Cqld4PreparedStatementDispenser implements Function> { - public Cqld4PreparedStatementDispenser(ParsedCommand cmd) { - } - - @Override - public OpDispenser apply(OpTemplate opTemplate) { - return null; - } -} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4BatchStatement.java b/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4BatchStatement.java deleted file mode 100644 index db9d329c4..000000000 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4BatchStatement.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.nosqlbench.driver.cqld4.optypes; - -public class Cqld4BatchStatement { -} diff --git a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4PreparedStatement.java b/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4PreparedStatement.java deleted file mode 100644 index f565683be..000000000 --- a/driver-cqld4/src/main/java/io/nosqlbench/driver/cqld4/optypes/Cqld4PreparedStatement.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.nosqlbench.driver.cqld4.optypes; - -public class Cqld4PreparedStatement { -}