mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
support maturity level on CLI and module loader
This commit is contained in:
@@ -5,6 +5,7 @@ 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.annotations.Maturity;
|
||||
import io.nosqlbench.nb.api.NBEnvironment;
|
||||
import io.nosqlbench.nb.api.config.standard.*;
|
||||
import io.nosqlbench.nb.api.content.Content;
|
||||
@@ -25,10 +26,15 @@ import java.util.stream.Collectors;
|
||||
public class ActivityTypeLoader {
|
||||
|
||||
private static final Logger logger = LogManager.getLogger(ActivityTypeLoader.class);
|
||||
private static final SimpleServiceLoader<ActivityType> ACTIVITYTYPE_SPI_FINDER = new SimpleServiceLoader<ActivityType>(ActivityType.class);
|
||||
private static final SimpleServiceLoader<DriverAdapter> DRIVERADAPTER_SPI_FINDER = new SimpleServiceLoader<>(DriverAdapter.class);
|
||||
private final SimpleServiceLoader<ActivityType> ACTIVITYTYPE_SPI_FINDER = new SimpleServiceLoader<ActivityType>(ActivityType.class, Maturity.Any);
|
||||
private final SimpleServiceLoader<DriverAdapter> DRIVERADAPTER_SPI_FINDER = new SimpleServiceLoader<>(DriverAdapter.class, Maturity.Any);
|
||||
private final Set<URL> jarUrls = new HashSet<>();
|
||||
|
||||
public ActivityTypeLoader setMaturity(Maturity maturity) {
|
||||
ACTIVITYTYPE_SPI_FINDER.setMaturity(maturity);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ActivityTypeLoader() {
|
||||
|
||||
List<String> libpaths = NBEnvironment.INSTANCE.interpolateEach(":", "$" + NBEnvironment.NBLIBS);
|
||||
@@ -154,11 +160,11 @@ public class ActivityTypeLoader {
|
||||
.asReadOnly();
|
||||
|
||||
public Set<String> getAllSelectors() {
|
||||
List<String> allSelectors = ACTIVITYTYPE_SPI_FINDER.getAllSelectors();
|
||||
List<String> allDrivers = DRIVERADAPTER_SPI_FINDER.getAllSelectors();
|
||||
Set<String> all = new HashSet<>();
|
||||
all.addAll(allSelectors);
|
||||
all.addAll(allDrivers);
|
||||
Map<String, Maturity> allSelectors = ACTIVITYTYPE_SPI_FINDER.getAllSelectors();
|
||||
Map<String, Maturity> addAdapters = DRIVERADAPTER_SPI_FINDER.getAllSelectors();
|
||||
Set<String> all = new LinkedHashSet<>();
|
||||
all.addAll(allSelectors.keySet());
|
||||
all.addAll(addAdapters.keySet());
|
||||
return all;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import io.nosqlbench.engine.api.activityimpl.ParameterMap;
|
||||
import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
|
||||
import io.nosqlbench.engine.api.metrics.ActivityMetrics;
|
||||
import io.nosqlbench.engine.core.annotation.Annotators;
|
||||
import io.nosqlbench.nb.annotations.Maturity;
|
||||
import io.nosqlbench.nb.api.annotations.Annotation;
|
||||
import io.nosqlbench.nb.api.annotations.Layer;
|
||||
import io.nosqlbench.nb.api.errors.BasicError;
|
||||
@@ -44,9 +45,11 @@ public class ScenarioController {
|
||||
|
||||
private final Map<String, ActivityExecutor> activityExecutors = new ConcurrentHashMap<>();
|
||||
private final String sessionId;
|
||||
private final Maturity minMaturity;
|
||||
|
||||
public ScenarioController(String sessionId) {
|
||||
public ScenarioController(String sessionId, Maturity minMaturity) {
|
||||
this.sessionId = sessionId;
|
||||
this.minMaturity = minMaturity;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -315,9 +318,12 @@ public class ScenarioController {
|
||||
|
||||
if (executor == null && createIfMissing) {
|
||||
|
||||
ActivityType<?> activityType = new ActivityTypeLoader().load(activityDef).orElseThrow(
|
||||
() -> new RuntimeException("Could not load Driver for " + activityDef + "'")
|
||||
);
|
||||
ActivityType<?> activityType = new ActivityTypeLoader()
|
||||
.setMaturity(this.minMaturity)
|
||||
.load(activityDef)
|
||||
.orElseThrow(
|
||||
() -> new RuntimeException("Could not load Driver for " + activityDef + "'")
|
||||
);
|
||||
|
||||
executor = new ActivityExecutor(
|
||||
activityType.getAssembledActivity(
|
||||
@@ -333,7 +339,7 @@ public class ScenarioController {
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for a bit. This is not the best approach, and will be replace with a different system in the future.
|
||||
* Wait for a bit. This is not the best approach, and will be replaced with a different system in the future.
|
||||
*
|
||||
* @param waitMillis time to wait, in milliseconds
|
||||
*/
|
||||
|
||||
@@ -19,17 +19,18 @@ import com.oracle.truffle.js.scriptengine.GraalJSScriptEngine;
|
||||
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
|
||||
import io.nosqlbench.engine.api.metrics.ActivityMetrics;
|
||||
import io.nosqlbench.engine.api.scripting.ScriptEnvBuffer;
|
||||
import io.nosqlbench.engine.core.annotation.Annotators;
|
||||
import io.nosqlbench.engine.core.lifecycle.ActivityProgressIndicator;
|
||||
import io.nosqlbench.engine.core.lifecycle.PolyglotScenarioController;
|
||||
import io.nosqlbench.engine.core.lifecycle.ScenarioController;
|
||||
import io.nosqlbench.engine.core.lifecycle.ScenarioResult;
|
||||
import io.nosqlbench.engine.core.annotation.Annotators;
|
||||
import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings;
|
||||
import io.nosqlbench.nb.annotations.Maturity;
|
||||
import io.nosqlbench.nb.api.annotations.Annotation;
|
||||
import io.nosqlbench.nb.api.annotations.Layer;
|
||||
import io.nosqlbench.nb.api.metadata.ScenarioMetadata;
|
||||
import io.nosqlbench.nb.api.metadata.ScenarioMetadataAware;
|
||||
import io.nosqlbench.nb.api.metadata.SystemId;
|
||||
import io.nosqlbench.nb.api.annotations.Layer;
|
||||
import io.nosqlbench.nb.api.annotations.Annotation;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.graalvm.polyglot.Context;
|
||||
@@ -49,7 +50,10 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -58,6 +62,7 @@ public class Scenario implements Callable<ScenarioResult> {
|
||||
private final String commandLine;
|
||||
private final String reportSummaryTo;
|
||||
private final Path logsPath;
|
||||
private final Maturity minMaturity;
|
||||
private Logger logger = LogManager.getLogger("SCENARIO");
|
||||
|
||||
private State state = State.Scheduled;
|
||||
@@ -106,7 +111,8 @@ public class Scenario implements Callable<ScenarioResult> {
|
||||
boolean wantsCompiledScript,
|
||||
String reportSummaryTo,
|
||||
String commandLine,
|
||||
Path logsPath) {
|
||||
Path logsPath,
|
||||
Maturity minMaturity) {
|
||||
|
||||
this.scenarioName = scenarioName;
|
||||
this.scriptfile = scriptfile;
|
||||
@@ -118,13 +124,15 @@ public class Scenario implements Callable<ScenarioResult> {
|
||||
this.reportSummaryTo = reportSummaryTo;
|
||||
this.commandLine = commandLine;
|
||||
this.logsPath = logsPath;
|
||||
this.minMaturity = minMaturity;
|
||||
}
|
||||
|
||||
public Scenario(String name, Engine engine, String reportSummaryTo) {
|
||||
public Scenario(String name, Engine engine, String reportSummaryTo, Maturity minMaturity) {
|
||||
this.scenarioName = name;
|
||||
this.reportSummaryTo = reportSummaryTo;
|
||||
this.engine = engine;
|
||||
this.commandLine = "";
|
||||
this.minMaturity = minMaturity;
|
||||
this.logsPath = Path.of("logs");
|
||||
}
|
||||
|
||||
@@ -197,7 +205,7 @@ public class Scenario implements Callable<ScenarioResult> {
|
||||
break;
|
||||
}
|
||||
|
||||
scenarioController = new ScenarioController(this.scenarioName);
|
||||
scenarioController = new ScenarioController(this.scenarioName, minMaturity);
|
||||
if (!progressInterval.equals("disabled")) {
|
||||
activityProgressIndicator = new ActivityProgressIndicator(scenarioController, progressInterval);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package io.nosqlbench.engine.core;
|
||||
|
||||
import io.nosqlbench.engine.api.scripting.ScriptEnvBuffer;
|
||||
import io.nosqlbench.engine.core.script.Scenario;
|
||||
import io.nosqlbench.nb.annotations.Maturity;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -25,7 +26,7 @@ public class ScenarioTest {
|
||||
@Test
|
||||
public void shouldLoadScriptText() {
|
||||
ScriptEnvBuffer buffer = new ScriptEnvBuffer();
|
||||
Scenario env = new Scenario("testing", Scenario.Engine.Graalvm, "stdout:300");
|
||||
Scenario env = new Scenario("testing", Scenario.Engine.Graalvm, "stdout:300", Maturity.Any);
|
||||
env.addScriptText("print('loaded script environment...');\n");
|
||||
env.runScenario();
|
||||
assertThat(env.getIOLog().get().get(0)).contains("loaded script environment...");
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package io.nosqlbench.engine.core.script;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.ScenariosResults;
|
||||
import io.nosqlbench.nb.annotations.Maturity;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@@ -27,7 +28,7 @@ public class ScenariosExecutorTest {
|
||||
@Disabled
|
||||
public void testAwaitOnTime() {
|
||||
ScenariosExecutor e = new ScenariosExecutor(ScenariosExecutorTest.class.getSimpleName(), 1);
|
||||
Scenario s = new Scenario("testing", Scenario.Engine.Graalvm,"stdout:3000");
|
||||
Scenario s = new Scenario("testing", Scenario.Engine.Graalvm,"stdout:3000", Maturity.Any);
|
||||
s.addScriptText("load('classpath:scripts/asyncs.js');\nsetTimeout(\"print('waited')\",5000);\n");
|
||||
e.execute(s);
|
||||
ScenariosResults scenariosResults = e.awaitAllResults();
|
||||
|
||||
Reference in New Issue
Block a user