parameterize driver space in mappers

This commit is contained in:
Jonathan Shook 2022-08-25 15:14:44 -05:00
parent 691e8ae40a
commit cb826eb62e
17 changed files with 41 additions and 22 deletions

View File

@ -24,6 +24,7 @@ import com.datastax.oss.driver.api.core.cql.*;
import com.datastax.oss.driver.api.core.metadata.Node;
import com.datastax.oss.driver.api.core.metadata.token.Token;
import io.nosqlbench.adapter.cqld4.Cqld4OpMetrics;
import io.nosqlbench.adapter.cqld4.Cqld4Space;
import io.nosqlbench.adapter.cqld4.optypes.Cqld4CqlOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter;
@ -36,7 +37,7 @@ import java.time.Duration;
import java.util.Map;
import java.util.function.LongFunction;
public abstract class Cqld4BaseOpDispenser extends BaseOpDispenser<Cqld4CqlOp> {
public abstract class Cqld4BaseOpDispenser extends BaseOpDispenser<Cqld4CqlOp, Cqld4Space> {
private final static Logger logger = LogManager.getLogger("CQLD4");

View File

@ -20,6 +20,7 @@ import com.datastax.dse.driver.api.core.graph.FluentGraphStatement;
import com.datastax.dse.driver.api.core.graph.FluentGraphStatementBuilder;
import com.datastax.oss.driver.api.core.CqlSession;
import groovy.lang.Script;
import io.nosqlbench.adapter.cqld4.Cqld4Space;
import io.nosqlbench.adapter.cqld4.optypes.Cqld4FluentGraphOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter;
@ -33,7 +34,7 @@ import java.util.Map;
import java.util.function.LongFunction;
import java.util.function.Supplier;
public class Cqld4FluentGraphOpDispenser extends BaseOpDispenser<Op> {
public class Cqld4FluentGraphOpDispenser extends BaseOpDispenser<Op, Cqld4Space> {
private final LongFunction<? extends String> graphnameFunc;
private final LongFunction<CqlSession> sessionFunc;

View File

@ -19,6 +19,7 @@ package io.nosqlbench.adapter.cqld4.opdispensers;
import com.datastax.dse.driver.api.core.graph.ScriptGraphStatement;
import com.datastax.dse.driver.api.core.graph.ScriptGraphStatementBuilder;
import com.datastax.oss.driver.api.core.CqlSession;
import io.nosqlbench.adapter.cqld4.Cqld4Space;
import io.nosqlbench.adapter.cqld4.optypes.Cqld4ScriptGraphOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter;
@ -27,7 +28,7 @@ import io.nosqlbench.engine.api.templating.ParsedOp;
import java.util.Optional;
import java.util.function.LongFunction;
public class Cqld4GremlinOpDispenser extends BaseOpDispenser<Cqld4ScriptGraphOp> {
public class Cqld4GremlinOpDispenser extends BaseOpDispenser<Cqld4ScriptGraphOp, Cqld4Space> {
private final LongFunction<? extends ScriptGraphStatement> stmtFunc;
private final LongFunction<CqlSession> sessionFunc;

View File

@ -31,7 +31,7 @@ import org.apache.logging.log4j.Logger;
import java.util.*;
import java.util.function.LongFunction;
public class DiagOpDispenser extends BaseOpDispenser<DiagOp> implements NBReconfigurable {
public class DiagOpDispenser extends BaseOpDispenser<DiagOp,DiagSpace> implements NBReconfigurable {
private final static Logger logger = LogManager.getLogger(DiagOpDispenser.class);
private OpFunc opFunc;

View File

@ -18,6 +18,7 @@ package io.nosqlbench.adapter.dynamodb.opdispensers;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.model.*;
import io.nosqlbench.adapter.dynamodb.DynamoDBSpace;
import io.nosqlbench.adapter.dynamodb.optypes.DDBCreateTableOp;
import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
@ -105,7 +106,7 @@ import java.util.function.LongFunction;
* }
* }</pre>
*/
public class DDBCreateTableOpDispenser extends BaseOpDispenser<DynamoDBOp> {
public class DDBCreateTableOpDispenser extends BaseOpDispenser<DynamoDBOp, DynamoDBSpace> {
private final DynamoDB ddb;
private final LongFunction<String> tableNameFunc;

View File

@ -18,6 +18,7 @@ package io.nosqlbench.adapter.dynamodb.opdispensers;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest;
import io.nosqlbench.adapter.dynamodb.DynamoDBSpace;
import io.nosqlbench.adapter.dynamodb.optypes.DDBDeleteTableOp;
import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
@ -34,7 +35,7 @@ import java.util.function.LongFunction;
* }
* }</pre>
*/
public class DDBDeleteTableOpDispenser extends BaseOpDispenser<DynamoDBOp> {
public class DDBDeleteTableOpDispenser extends BaseOpDispenser<DynamoDBOp, DynamoDBSpace> {
private final DynamoDB ddb;
private final LongFunction<String> tableNameFunc;

View File

@ -20,6 +20,7 @@ import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.PrimaryKey;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.GetItemSpec;
import io.nosqlbench.adapter.dynamodb.DynamoDBSpace;
import io.nosqlbench.adapter.dynamodb.optypes.DDBGetItemOp;
import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
@ -30,7 +31,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.function.LongFunction;
public class DDBGetItemOpDispenser extends BaseOpDispenser<DynamoDBOp> {
public class DDBGetItemOpDispenser extends BaseOpDispenser<DynamoDBOp, DynamoDBSpace> {
private final DynamoDB ddb;
private final LongFunction<Table> targetTableFunction;
private final LongFunction<GetItemSpec> getItemSpecFunc;

View File

@ -18,6 +18,7 @@ package io.nosqlbench.adapter.dynamodb.opdispensers;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import io.nosqlbench.adapter.dynamodb.DynamoDBSpace;
import io.nosqlbench.adapter.dynamodb.optypes.DDBPutItemOp;
import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
@ -28,7 +29,7 @@ import io.nosqlbench.api.errors.OpConfigError;
import java.util.Map;
import java.util.function.LongFunction;
public class DDBPutItemOpDispenser extends BaseOpDispenser<DynamoDBOp> {
public class DDBPutItemOpDispenser extends BaseOpDispenser<DynamoDBOp, DynamoDBSpace> {
private final DynamoDB ddb;
private final LongFunction<String> tableNameFunc;

View File

@ -20,6 +20,7 @@ import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.PrimaryKey;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec;
import io.nosqlbench.adapter.dynamodb.DynamoDBSpace;
import io.nosqlbench.adapter.dynamodb.optypes.DDBQueryOp;
import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
@ -133,7 +134,7 @@ import java.util.function.LongFunction;
* }
* }</pre>
*/
public class DDBQueryOpDispenser extends BaseOpDispenser<DynamoDBOp> {
public class DDBQueryOpDispenser extends BaseOpDispenser<DynamoDBOp, DynamoDBSpace> {
private final DynamoDB ddb;
private final LongFunction<Table> tableFunc;

View File

@ -17,6 +17,7 @@
package io.nosqlbench.adapter.dynamodb.opdispensers;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import io.nosqlbench.adapter.dynamodb.DynamoDBSpace;
import io.nosqlbench.adapter.dynamodb.optypes.DynamoDBOp;
import io.nosqlbench.adapter.dynamodb.optypes.RawDynamodOp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
@ -25,7 +26,7 @@ import io.nosqlbench.engine.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class RawDynamoDBOpDispenser extends BaseOpDispenser<DynamoDBOp> {
public class RawDynamoDBOpDispenser extends BaseOpDispenser<DynamoDBOp, DynamoDBSpace> {
private final LongFunction<? extends String> jsonFunction;
private final DynamoDB ddb;

View File

@ -29,7 +29,7 @@ import java.util.Optional;
import java.util.function.LongFunction;
import java.util.regex.Pattern;
public class HttpOpDispenser extends BaseOpDispenser<HttpOp> {
public class HttpOpDispenser extends BaseOpDispenser<HttpOp,HttpSpace> {
private final LongFunction<HttpOp> opFunc;
public static final String DEFAULT_OK_BODY = ".+?";

View File

@ -22,7 +22,7 @@ import io.nosqlbench.engine.api.templating.ParsedOp;
import java.util.function.LongFunction;
public class StdoutOpDispenser extends BaseOpDispenser<StdoutOp> {
public class StdoutOpDispenser extends BaseOpDispenser<StdoutOp,StdoutSpace> {
private final LongFunction<StdoutSpace> ctxfunc;
private final LongFunction<String> outFunction;

View File

@ -17,13 +17,12 @@
package io.nosqlbench.adapter.tcp;
import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.engine.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.engine.api.templating.ParsedOp;
public class TcpOpDispenser extends BaseOpDispenser<Op> {
public class TcpOpDispenser extends BaseOpDispenser<Op,TcpAdapterSpace> {
public TcpOpDispenser(DriverAdapter<? extends Op,TcpAdapterSpace> adapter, ParsedOp op) {
public TcpOpDispenser(TcpDriverAdapter adapter, ParsedOp op) {
super(adapter, op);
}

View File

@ -18,15 +18,14 @@ package io.nosqlbench.adapter.tcp;
import io.nosqlbench.engine.api.activityimpl.OpDispenser;
import io.nosqlbench.engine.api.activityimpl.OpMapper;
import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.engine.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.engine.api.templating.ParsedOp;
public class TcpOpMapper implements OpMapper<Op> {
private final DriverAdapter<Op, TcpAdapterSpace> adapter;
private final TcpDriverAdapter adapter;
public TcpOpMapper(DriverAdapter<Op,TcpAdapterSpace> adapter) {
public TcpOpMapper(TcpDriverAdapter adapter) {
this.adapter = adapter;
}

View File

@ -35,10 +35,10 @@ import java.util.concurrent.TimeUnit;
*
* @param <T> The type of operation
*/
public abstract class BaseOpDispenser<T extends Op> implements OpDispenser<T> {
public abstract class BaseOpDispenser<T extends Op, S> implements OpDispenser<T> {
private final String name;
private final DriverAdapter adapter;
protected final DriverAdapter<T, S> adapter;
private boolean instrument;
private Histogram resultSizeHistogram;
private Timer successTimer;
@ -46,7 +46,7 @@ public abstract class BaseOpDispenser<T extends Op> implements OpDispenser<T> {
private String[] timerStarts = new String[0];
private String[] timerStops = new String[0];
public BaseOpDispenser(DriverAdapter adapter,ParsedOp op) {
public BaseOpDispenser(DriverAdapter<T,S> adapter,ParsedOp op) {
this.name = op.getName();
this.adapter = adapter;
timerStarts = op.takeOptionalStaticValue("start-timers", String.class)
@ -65,7 +65,7 @@ public abstract class BaseOpDispenser<T extends Op> implements OpDispenser<T> {
configureInstrumentation(op);
}
public DriverAdapter getAdapter() {
public DriverAdapter<T,S> getAdapter() {
return adapter;
}

View File

@ -19,18 +19,21 @@ package io.nosqlbench.engine.api.activityimpl.uniform;
import io.nosqlbench.api.config.standard.*;
import io.nosqlbench.engine.api.activityimpl.uniform.fieldmappers.FieldDestructuringMapper;
import io.nosqlbench.engine.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.engine.api.templating.ParsedOp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.LongFunction;
import java.util.stream.Collectors;
public abstract class BaseDriverAdapter<R extends Op,S> implements DriverAdapter<R,S>, NBConfigurable, NBReconfigurable {
private DriverSpaceCache<? extends S> spaceCache;
private NBConfiguration cfg;
private LongFunction<S> spaceF;
/**
* BaseDriverAdapter will take any provided functions from {@link #getOpStmtRemappers()}
@ -172,4 +175,10 @@ public abstract class BaseDriverAdapter<R extends Op,S> implements DriverAdapter
.asReadOnly();
}
@Override
public LongFunction<S> getSpaceFunc(ParsedOp pop) {
LongFunction<String> spaceNameF = pop.getAsFunctionOr("space", "default");
DriverSpaceCache<? extends S> cache = getSpaceCache();
return l -> getSpaceCache().get(spaceNameF.apply(l));
}
}

View File

@ -32,6 +32,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.LongFunction;
/**
* <P>The DriverAdapter interface is expected to be the replacement
@ -188,4 +189,6 @@ public interface DriverAdapter<OPTYPE extends Op, SPACETYPE> {
default Maturity getAdapterMaturity() {
return this.getClass().getAnnotation(Service.class).maturity();
}
LongFunction<SPACETYPE> getSpaceFunc(ParsedOp pop);
}