support maturity level on CLI and module loader

This commit is contained in:
Jonathan Shook
2021-12-21 13:08:46 -06:00
parent 2e74116dca
commit ba736c5f6e
22 changed files with 170 additions and 62 deletions

View File

@@ -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;
}
}

View File

@@ -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
*/

View File

@@ -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);
}

View File

@@ -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...");

View File

@@ -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();