mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
generic signature fixups
This commit is contained in:
parent
271a13baba
commit
cb97bc8085
@ -39,7 +39,7 @@ import java.util.Optional;
|
|||||||
*/
|
*/
|
||||||
public interface ActivityType<A extends Activity> {
|
public interface ActivityType<A extends Activity> {
|
||||||
|
|
||||||
SimpleServiceLoader<ActivityType> FINDER = new SimpleServiceLoader<>(ActivityType.class);
|
SimpleServiceLoader<ActivityType> FINDER = new SimpleServiceLoader<ActivityType>(ActivityType.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an instance of an activity from the activity type.
|
* Create an instance of an activity from the activity type.
|
||||||
|
@ -8,7 +8,7 @@ import io.nosqlbench.nb.api.spi.SimpleServiceLoader;
|
|||||||
|
|
||||||
public class StandardActivityType<A extends StandardActivity<?,?>> extends SimpleActivity implements ActivityType<A> {
|
public class StandardActivityType<A extends StandardActivity<?,?>> extends SimpleActivity implements ActivityType<A> {
|
||||||
|
|
||||||
public static SimpleServiceLoader<DriverAdapter> FINDER = new SimpleServiceLoader<DriverAdapter>(DriverAdapter.class);
|
public static SimpleServiceLoader<DriverAdapter> FINDER = new SimpleServiceLoader<>(DriverAdapter.class);
|
||||||
private final DriverAdapter<?,?> adapter;
|
private final DriverAdapter<?,?> adapter;
|
||||||
|
|
||||||
public StandardActivityType(DriverAdapter<?,?> adapter, ActivityDef activityDef) {
|
public StandardActivityType(DriverAdapter<?,?> adapter, ActivityDef activityDef) {
|
||||||
|
@ -0,0 +1,83 @@
|
|||||||
|
package io.nosqlbench.engine.core.lifecycle;
|
||||||
|
|
||||||
|
import io.nosqlbench.engine.api.activityapi.core.Activity;
|
||||||
|
import io.nosqlbench.engine.api.activityapi.core.ActivityType;
|
||||||
|
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
|
||||||
|
import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter;
|
||||||
|
import io.nosqlbench.engine.api.activityimpl.uniform.StandardActivityType;
|
||||||
|
import io.nosqlbench.nb.api.config.standard.*;
|
||||||
|
import io.nosqlbench.nb.api.errors.BasicError;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class ActivityTypeLoader {
|
||||||
|
private static final Logger logger = LogManager.getLogger(ActivityTypeLoader.class);
|
||||||
|
|
||||||
|
public static Optional<ActivityType<?>> load(ActivityDef activityDef) {
|
||||||
|
|
||||||
|
String activityTypeName = activityDef.getParams().getOptionalString("driver", "type").orElse(null);
|
||||||
|
|
||||||
|
List<String> knownTypes = ActivityType.FINDER.getAllSelectors();
|
||||||
|
|
||||||
|
// Infer the type from either alias or yaml if possible (exactly one matches)
|
||||||
|
if (activityTypeName == null) {
|
||||||
|
List<String> matching = knownTypes.stream().filter(
|
||||||
|
n ->
|
||||||
|
activityDef.getParams().getOptionalString("alias").orElse("").contains(n)
|
||||||
|
|| activityDef.getParams().getOptionalString("yaml", "workload").orElse("").contains(n)
|
||||||
|
).collect(Collectors.toList());
|
||||||
|
if (matching.size() == 1) {
|
||||||
|
activityTypeName = matching.get(0);
|
||||||
|
logger.info("param 'type' was inferred as '" + activityTypeName + "' since it was seen in yaml or alias parameter.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activityTypeName == null) {
|
||||||
|
String errmsg = "You must provide a driver=<driver> parameter. Valid examples are:\n" +
|
||||||
|
knownTypes.stream().map(t -> " driver=" + t + "\n").collect(Collectors.joining());
|
||||||
|
throw new BasicError(errmsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
String diagName = activityTypeName;
|
||||||
|
|
||||||
|
|
||||||
|
Optional<ActivityType> ato = ActivityType.FINDER.getOptionally(activityTypeName);
|
||||||
|
if (ato.isPresent()) {
|
||||||
|
return Optional.of((ActivityType<?>) ato.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<DriverAdapter> oda = StandardActivityType.FINDER.getOptionally(activityTypeName);
|
||||||
|
|
||||||
|
if (oda.isPresent()) {
|
||||||
|
DriverAdapter<?, ?> driverAdapter = oda.get();
|
||||||
|
|
||||||
|
activityDef.getParams().remove("driver");
|
||||||
|
if (driverAdapter instanceof NBConfigurable) {
|
||||||
|
NBConfigModel cfgModel = ((NBConfigurable) driverAdapter).getConfigModel();
|
||||||
|
cfgModel = cfgModel.add(ACTIVITY_CFG_MODEL);
|
||||||
|
NBConfiguration cfg = cfgModel.apply(activityDef.getParams());
|
||||||
|
((NBConfigurable) driverAdapter).applyConfig(cfg);
|
||||||
|
}
|
||||||
|
ActivityType activityType = new StandardActivityType<>(driverAdapter, activityDef);
|
||||||
|
return Optional.of(activityType);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Found neither ActivityType named '" + activityTypeName + "' nor DriverAdapter named '" + activityTypeName + "'.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final NBConfigModel ACTIVITY_CFG_MODEL = ConfigModel.of(Activity.class)
|
||||||
|
.add(Param.optional("threads").setRegex("\\d+|\\d+x|auto"))
|
||||||
|
.add(Param.optional(List.of("workload", "yaml")))
|
||||||
|
.add(Param.optional("cycles"))
|
||||||
|
.add(Param.optional("alias"))
|
||||||
|
.add(Param.optional(List.of("cyclerate", "rate")))
|
||||||
|
.add(Param.optional("tags"))
|
||||||
|
.asReadOnly();
|
||||||
|
|
||||||
|
}
|
@ -19,16 +19,13 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType;
|
|||||||
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
|
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
|
||||||
import io.nosqlbench.engine.api.activityimpl.ParameterMap;
|
import io.nosqlbench.engine.api.activityimpl.ParameterMap;
|
||||||
import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
|
import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
|
||||||
import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter;
|
|
||||||
import io.nosqlbench.engine.api.activityimpl.uniform.StandardActivityType;
|
|
||||||
import io.nosqlbench.engine.api.metrics.ActivityMetrics;
|
import io.nosqlbench.engine.api.metrics.ActivityMetrics;
|
||||||
import io.nosqlbench.engine.core.annotation.Annotators;
|
import io.nosqlbench.engine.core.annotation.Annotators;
|
||||||
import io.nosqlbench.nb.api.annotations.Layer;
|
|
||||||
import io.nosqlbench.nb.api.annotations.Annotation;
|
import io.nosqlbench.nb.api.annotations.Annotation;
|
||||||
import io.nosqlbench.nb.api.config.standard.*;
|
import io.nosqlbench.nb.api.annotations.Layer;
|
||||||
import io.nosqlbench.nb.api.errors.BasicError;
|
import io.nosqlbench.nb.api.errors.BasicError;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.security.InvalidParameterException;
|
import java.security.InvalidParameterException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -282,58 +279,17 @@ public class ScenarioController {
|
|||||||
|
|
||||||
if (executor == null && createIfMissing) {
|
if (executor == null && createIfMissing) {
|
||||||
|
|
||||||
String activityTypeName = activityDef.getParams().getOptionalString("driver", "type").orElse(null);
|
ActivityType<?> activityType = ActivityTypeLoader.load(activityDef).orElseThrow(
|
||||||
|
() -> new RuntimeException("Could not load Driver for " + activityDef + "'")
|
||||||
|
);
|
||||||
|
|
||||||
List<String> knownTypes = ActivityType.FINDER.getAllSelectors();
|
executor = new ActivityExecutor(
|
||||||
|
activityType.getAssembledActivity(
|
||||||
// Infer the type from either alias or yaml if possible (exactly one matches)
|
activityDef,
|
||||||
if (activityTypeName == null) {
|
getActivityMap()
|
||||||
List<String> matching = knownTypes.stream().filter(
|
),
|
||||||
n ->
|
this.sessionId
|
||||||
activityDef.getParams().getOptionalString("alias").orElse("").contains(n)
|
);
|
||||||
|| activityDef.getParams().getOptionalString("yaml", "workload").orElse("").contains(n)
|
|
||||||
).collect(Collectors.toList());
|
|
||||||
if (matching.size() == 1) {
|
|
||||||
activityTypeName = matching.get(0);
|
|
||||||
logger.info("param 'type' was inferred as '" + activityTypeName + "' since it was seen in yaml or alias parameter.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (activityTypeName == null) {
|
|
||||||
String errmsg = "You must provide a driver=<driver> parameter. Valid examples are:\n" +
|
|
||||||
knownTypes.stream().map(t -> " driver=" + t + "\n").collect(Collectors.joining());
|
|
||||||
throw new BasicError(errmsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ActivityType<?> activityType = ActivityType.FINDER.getOrThrow(activityTypeName);
|
|
||||||
|
|
||||||
ActivityType<?> activityType = null;
|
|
||||||
|
|
||||||
Optional<ActivityType> ato = ActivityType.FINDER.getOptionally(activityTypeName);
|
|
||||||
if (ato.isPresent()) {
|
|
||||||
activityType = ato.get();
|
|
||||||
} else {
|
|
||||||
Optional<DriverAdapter> oda = StandardActivityType.FINDER.getOptionally(activityTypeName);
|
|
||||||
if (oda.isPresent()) {
|
|
||||||
DriverAdapter<?, ?> driverAdapter = oda.get();
|
|
||||||
|
|
||||||
activityDef.getParams().remove("driver");
|
|
||||||
if (driverAdapter instanceof NBConfigurable) {
|
|
||||||
NBConfigModel cfgModel = ((NBConfigurable) driverAdapter).getConfigModel();
|
|
||||||
cfgModel = cfgModel.add(ACTIVITY_CFG_MODEL);
|
|
||||||
NBConfiguration cfg = cfgModel.apply(activityDef.getParams());
|
|
||||||
((NBConfigurable) driverAdapter).applyConfig(cfg);
|
|
||||||
}
|
|
||||||
activityType = new StandardActivityType<>(driverAdapter, activityDef);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("Found neither ActivityType named '" + activityTypeName + "' nor DriverAdapter named '" + activityTypeName + "'.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
executor = new ActivityExecutor(activityType.getAssembledActivity(activityDef, getActivityMap()),
|
|
||||||
this.sessionId);
|
|
||||||
activityExecutors.put(activityDef.getAlias(), executor);
|
activityExecutors.put(activityDef.getAlias(), executor);
|
||||||
}
|
}
|
||||||
return executor;
|
return executor;
|
||||||
@ -510,12 +466,4 @@ public class ScenarioController {
|
|||||||
return indicators;
|
return indicators;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final NBConfigModel ACTIVITY_CFG_MODEL = ConfigModel.of(Activity.class)
|
|
||||||
.add(Param.optional("threads").setRegex("\\d+|\\d+x|auto"))
|
|
||||||
.add(Param.optional(List.of("workload","yaml")))
|
|
||||||
.add(Param.optional("cycles"))
|
|
||||||
.add(Param.optional("alias"))
|
|
||||||
.add(Param.optional(List.of("cyclerate","rate")))
|
|
||||||
.add(Param.optional("tags"))
|
|
||||||
.asReadOnly();
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user