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> {
|
||||
|
||||
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.
|
||||
|
@ -8,7 +8,7 @@ import io.nosqlbench.nb.api.spi.SimpleServiceLoader;
|
||||
|
||||
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;
|
||||
|
||||
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.ParameterMap;
|
||||
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.core.annotation.Annotators;
|
||||
import io.nosqlbench.nb.api.annotations.Layer;
|
||||
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 org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.security.InvalidParameterException;
|
||||
import java.util.*;
|
||||
@ -282,58 +279,17 @@ public class ScenarioController {
|
||||
|
||||
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();
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
// 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);
|
||||
executor = new ActivityExecutor(
|
||||
activityType.getAssembledActivity(
|
||||
activityDef,
|
||||
getActivityMap()
|
||||
),
|
||||
this.sessionId
|
||||
);
|
||||
activityExecutors.put(activityDef.getAlias(), executor);
|
||||
}
|
||||
return executor;
|
||||
@ -510,12 +466,4 @@ public class ScenarioController {
|
||||
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