additional improvements to cqld4 driver

This commit is contained in:
Jonathan Shook
2021-07-26 01:09:49 -05:00
parent 05b3a50ec9
commit e7668610c3
7 changed files with 79 additions and 58 deletions

View File

@@ -3,8 +3,8 @@ 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.adapter.cqld4.opdispensers.Cqld4PreparedStmtDispenser;
import io.nosqlbench.adapter.cqld4.opdispensers.Cqld4SimpleCqlStmtDispenser;
import io.nosqlbench.engine.api.activityimpl.OpDispenser;
import io.nosqlbench.engine.api.activityimpl.OpMapper;
import io.nosqlbench.engine.api.activityimpl.uniform.DriverSpaceCache;
@@ -32,11 +32,11 @@ public class Cqld4OpMapper implements OpMapper<Cqld4Op> {
if (prepared && batch) {
return new CqlD4PreparedBatchOpDispenser(session, cmd, cfg);
} else if (prepared) {
return new Cqld4PreparedOpDispenser(session, cmd, cfg);
return new Cqld4PreparedStmtDispenser(session, cmd);
} else if (batch) {
return new Cqld4BatchStatementDispenser(session, cmd, cfg);
} else {
return new Cqld4SimpleCqlStatementDispenser(session, cmd, cfg);
return new Cqld4SimpleCqlStmtDispenser(session, cmd, cfg);
}
}

View File

@@ -1,21 +0,0 @@
package io.nosqlbench.adapter.cqld4;
import java.util.concurrent.ConcurrentHashMap;
/**
* Maintain a cache of objects to use in a CQLD4 context.
*/
public class Cqld4SpaceCache {
private final ConcurrentHashMap<String, Cqld4Space> clientscopes = new ConcurrentHashMap<>();
private final Cqld4DriverAdapter adapter;
public Cqld4SpaceCache(Cqld4DriverAdapter adapter) {
this.adapter = adapter;
}
public Cqld4Space getSpace(String name) {
return clientscopes.computeIfAbsent(name, newName -> {
return new Cqld4Space(adapter);
});
}
}

View File

@@ -7,36 +7,28 @@ import io.nosqlbench.adapter.cqld4.Cqld4Op;
import io.nosqlbench.adapter.cqld4.optypes.Cqld4PreparedStatement;
import io.nosqlbench.engine.api.activityimpl.OpDispenser;
import io.nosqlbench.engine.api.templating.ParsedCommand;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.virtdata.core.templates.ParsedTemplate;
import java.util.function.LongFunction;
public class Cqld4PreparedOpDispenser implements OpDispenser<Cqld4Op> {
public class Cqld4PreparedStmtDispenser implements OpDispenser<Cqld4Op> {
private final CqlSession session;
private final ParsedCommand cmd;
private final NBConfiguration cfg;
private final LongFunction<Object[]> varbinder;
private final PreparedStatement preparedStmt;
public Cqld4PreparedOpDispenser(CqlSession session, ParsedCommand cmd, NBConfiguration cfg) {
public Cqld4PreparedStmtDispenser(CqlSession session, ParsedCommand cmd) {
this.session = session;
this.cmd = cmd;
this.cfg = cfg;
// if (cmd.isDefinedDynamic("stmt")) {
// throw new OpConfigError("You must have a static template to create prepared statements. (Do not make the stmt field a binding itself)");
// }
ParsedTemplate parsed = cmd.getStmtAsTemplate().orElseThrow();
String preparedQueryString = parsed.getPositionalStatement(s -> "?");
varbinder = cmd.newArrayBinderFromBindPoints(parsed.getBindPoints());
preparedStmt = session.prepare(preparedQueryString);
String preparedQueryString = parsed.getPositionalStatement(s -> "?");
preparedStmt = session.prepare(preparedQueryString);
}
// TODO: Explain in the dev guide that apply in the op dispenser should do all the "bind" level stuff
@Override
public Cqld4Op apply(long value) {
Object[] parameters = varbinder.apply(value);

View File

@@ -8,13 +8,13 @@ import io.nosqlbench.engine.api.activityimpl.OpDispenser;
import io.nosqlbench.engine.api.templating.ParsedCommand;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
public class Cqld4SimpleCqlStatementDispenser implements OpDispenser<Cqld4Op> {
public class Cqld4SimpleCqlStmtDispenser implements OpDispenser<Cqld4Op> {
private final CqlSession session;
private final ParsedCommand cmd;
private final NBConfiguration cfg;
public Cqld4SimpleCqlStatementDispenser(CqlSession session, ParsedCommand cmd, NBConfiguration cfg) {
public Cqld4SimpleCqlStmtDispenser(CqlSession session, ParsedCommand cmd, NBConfiguration cfg) {
this.session = session;
this.cmd = cmd;
this.cfg = cfg;