Skip to content

Commit

Permalink
scenario tests stubbed, error handling in session fixed, mvn verify w…
Browse files Browse the repository at this point in the history
…orks now
  • Loading branch information
jshook committed Oct 7, 2023
1 parent 1d02ebd commit 21c882a
Show file tree
Hide file tree
Showing 16 changed files with 358 additions and 343 deletions.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package io.nosqlbench.engine.api.scripting;

import javax.script.SimpleScriptContext;
import java.io.CharArrayWriter;
import java.io.Reader;
import java.io.Writer;
import java.time.format.DateTimeFormatter;
Expand All @@ -42,7 +43,7 @@ public Writer getWriter() {
synchronized(this) {
if (stdoutBuffer==null) {
Writer superWriter = super.getWriter();
stdoutBuffer = new DiagWriter(superWriter, " stdout ");
stdoutBuffer = new DiagWriter(superWriter, new InterjectingCharArrayWriter(" stdout "));
}
}
}
Expand All @@ -55,7 +56,7 @@ public Writer getErrorWriter() {
synchronized(this) {
if (stderrBuffer==null) {
Writer superErrorWriter = super.getErrorWriter();
stderrBuffer = new DiagWriter(superErrorWriter, " error ");
stderrBuffer = new DiagWriter(superErrorWriter, new InterjectingCharArrayWriter(" stderr "));
}
}
}
Expand All @@ -79,24 +80,17 @@ public String getStdinText() {
return stdinBuffer.buffer.toString();
}

public String getStderrText() {
return stderrBuffer.buffer.toString();
}

public String getStdoutText() {
return stdoutBuffer.buffer.toString();
}

public List<String> getTimeLogLines() {
List<String> log = new ArrayList<String>();
Optional.ofNullable(this.stdinBuffer).map(DiagReader::getTimedLog).ifPresent(log::addAll);
Optional.ofNullable(this.stderrBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
Optional.ofNullable(this.stdoutBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
log = log.stream().map(l -> l.endsWith("\n") ? l : l+"\n").collect(Collectors.toList());
return log;
}
// public List<String> getTimeLogLines() {
// List<String> log = new ArrayList<String>();
// Optional.ofNullable(this.stdinBuffer).map(DiagReader::getTimedLog).ifPresent(log::addAll);
// Optional.ofNullable(this.stderrBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
// Optional.ofNullable(this.stdoutBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
// log = log.stream().map(l -> l.endsWith("\n") ? l : l+"\n").collect(Collectors.toList());
// return log;
// }
public String getTimedLog() {
return getTimeLogLines().stream().collect(Collectors.joining());
return this.stdoutBuffer.getTimedLog()+this.stderrBuffer.getTimedLog();
// return getTimeLogLines().stream().collect(Collectors.joining());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ public static NBSceneFixtures ofDefault(String name) {
);
}


@Override
public ScriptParams params() {
return params;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
import io.nosqlbench.components.NBComponent;
import io.nosqlbench.engine.api.scripting.DiagReader;
import io.nosqlbench.engine.api.scripting.DiagWriter;
import io.nosqlbench.engine.api.scripting.InterjectingCharArrayWriter;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.Extensions;

import java.io.CharArrayWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.ArrayList;
Expand All @@ -37,8 +39,8 @@ public class NBSceneBuffer implements NBSceneFixtures {

public NBSceneBuffer(NBSceneFixtures fixtures) {
this.fixtures = fixtures;
stdoutBuffer = new DiagWriter(fixtures.out(), " stdout ");
stderrBuffer = new DiagWriter(fixtures.err(), " stderr ");
stdoutBuffer = new DiagWriter(fixtures.out(), new InterjectingCharArrayWriter(" stdout "));
stderrBuffer = new DiagWriter(fixtures.err(), new InterjectingCharArrayWriter(" stderr "));
stdinBuffer = new DiagReader(fixtures.in(), " stdin ");
}

Expand Down Expand Up @@ -77,17 +79,17 @@ public Reader in() {
return stdinBuffer;
}

public List<String> getTimedLogLines() {
List<String> log = new ArrayList<String>();
Optional.ofNullable(this.stdinBuffer).map(DiagReader::getTimedLog).ifPresent(log::addAll);
Optional.ofNullable(this.stderrBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
Optional.ofNullable(this.stdoutBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
log = log.stream().map(l -> l.endsWith("\n") ? l : l+"\n").collect(Collectors.toList());
return log;
}
// public List<String> getTimedLogLines() {
// List<String> log = new ArrayList<String>();
// Optional.ofNullable(this.stdinBuffer).map(DiagReader::getTimedLog).ifPresent(log::addAll);
// Optional.ofNullable(this.stderrBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
// Optional.ofNullable(this.stdoutBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
// log = log.stream().map(l -> l.endsWith("\n") ? l : l+"\n").collect(Collectors.toList());
// return log;
// }

public String getIOLog() {
return String.join("",getTimedLogLines());
return this.stdoutBuffer.getTimedLog()+this.stderrBuffer.getTimedLog();
}

public NBSceneFixtures asFixtures() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,7 @@
import org.graalvm.polyglot.HostAccess;
import org.graalvm.polyglot.PolyglotAccess;

import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.*;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
Expand Down Expand Up @@ -66,7 +63,7 @@ public enum Invocation {

private ActivitiesProgressIndicator activitiesProgressIndicator;
private String progressInterval = "console:1m";
// private ScenarioScriptShell scriptEnv;
// private ScenarioScriptShell scriptEnv;
private final String scenarioName;
private ScriptParams scenarioScriptParams;
private final Engine engine = Engine.Graalvm;
Expand All @@ -88,7 +85,9 @@ public NBScriptedScenario(

public static NBScriptedScenario ofScripted(String name, Map<String, String> params, NBComponent parent, Invocation invocation) {
return new NBScriptedScenario(name, parent);
};
}

;


public NBScriptedScenario addScriptText(final String scriptText) {
Expand Down Expand Up @@ -117,7 +116,7 @@ public NBScriptedScenario addScriptFiles(final String... args) {
private BufferedScriptContext initializeScriptContext(NBSceneFixtures fixtures) {
BufferedScriptContext ctx = new BufferedScriptContext(fixtures);
// this.scriptEngine.setContext(ctx);
ctx.getBindings(ScriptContext.ENGINE_SCOPE).put("scenario",new PolyglotScenarioController(fixtures.controller()));
ctx.getBindings(ScriptContext.ENGINE_SCOPE).put("scenario", new PolyglotScenarioController(fixtures.controller()));
return ctx;
}

Expand All @@ -142,69 +141,41 @@ private void initializeScriptingEngine() {
scriptEngine = GraalJSScriptEngine.create(polyglotEngine, contextSettings);
}

protected synchronized void runScenario(NBSceneFixtures shell) {
if (null == result) {
try {
this.logger.debug("Initializing scripting engine for {}.", scenarioName);
this.initializeScriptingEngine();
this.context = this.initializeScriptContext(shell);
this.logger.debug("Running control script for {}.", scenarioName);
this.executeScenarioScripts();
} catch (final Exception e) {
error = e;
} finally {
this.logger.debug("{} scenario run", null == this.error ? "NORMAL" : "ERRORED");
}
protected final void runScenario(NBSceneFixtures shell) {
try {
this.logger.debug("Initializing scripting engine for {}.", scenarioName);
this.initializeScriptingEngine();
this.context = this.initializeScriptContext(shell);
this.logger.debug("Running control script for {}.", scenarioName);
this.executeScenarioScripts();
} catch (ScriptException e) {
throw new RuntimeException(e);
} finally {
this.endedAtMillis = System.currentTimeMillis();
// this.logger.debug("{} scenario run", null == this.error ? "NORMAL" : "ERRORED");
}
// String iolog = error != null ? error.toString() : this.scriptEnv.getTimedLog();
// result = new ExecutionMetricsResult(startedAtMillis, endedAtMillis, iolog, this.error);
// this.result.reportMetricsSummaryToLog();
}
}

private void executeScenarioScripts() {
for (final String script : this.scripts)
try {
Object result = null;
if ((scriptEngine instanceof Compilable compilableEngine)) {
this.logger.debug("Using direct script compilation");
final CompiledScript compiled = compilableEngine.compile(script);
this.logger.debug("-> invoking main scenario script (compiled)");
result = compiled.eval(this.context);
this.logger.debug("<- scenario script completed (compiled)");
}
// else if ((null != scriptfile) && !this.scriptfile.isEmpty()) {
// final String filename = this.scriptfile.replace("_SESSION_", this.scenarioName);
// this.logger.debug("-> invoking main scenario script (interpreted from {})", filename);
// final Path written = Files.writeString(
// Path.of(filename),
// script,
// StandardOpenOption.TRUNCATE_EXISTING,
// StandardOpenOption.CREATE
// );
// final BufferedReader reader = Files.newBufferedReader(written);
// this.scriptEngine.eval(reader);
// this.logger.debug("<- scenario control script completed (interpreted) from {})", filename);
// }
else {
this.logger.debug("-> invoking main scenario script (interpreted)");
result = this.scriptEngine.eval(script);
this.logger.debug("<- scenario control script completed (interpreted)");
}
if (null != result)
this.logger.debug("scenario result: type({}): value:{}", result.getClass().getCanonicalName(), result);
} catch (final Exception e) {
error = e;
this.logger.error("Error in scenario, shutting down. ({})", e);
} finally {
this.endedAtMillis = System.currentTimeMillis();
System.out.flush();
System.err.flush();
private void executeScenarioScripts() throws ScriptException {
for (final String script : this.scripts) {
if ((scriptEngine instanceof Compilable compilableEngine)) {
this.logger.debug("Using direct script compilation");
final CompiledScript compiled = compilableEngine.compile(script);
this.logger.debug("-> invoking main scenario script (compiled)");
compiled.eval(this.context);
this.logger.debug("<- scenario script completed (compiled)");
} else {
this.logger.debug("-> invoking main scenario script (interpreted)");
this.scriptEngine.eval(script);
this.logger.debug("<- scenario control script completed (interpreted)");
}
}
}




@Override
public boolean equals(final Object o) {
if (this == o) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.graalvm.polyglot.Value;

import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.ToDoubleFunction;

public class BobyqaOptimizerInstance extends NBBaseComponent {

Expand All @@ -42,7 +43,7 @@ public class BobyqaOptimizerInstance extends NBBaseComponent {

private final MVParams params = new MVParams();

private MultivariateFunction objectiveFunctionFromScript;
private MultivariateFunction objectiveFunction;
private SimpleBounds bounds;
private InitialGuess initialGuess;
private PointValuePair result;
Expand Down Expand Up @@ -93,17 +94,31 @@ public BobyqaOptimizerInstance setBounds(double... values) {
return this;
}

public BobyqaOptimizerInstance setObjectiveFunction(Object f) {
if (f instanceof Function) {
// Function<Object[],Object> function = (Function<Object[],Object>)f;
this.objectiveFunctionFromScript =
new PolyglotMultivariateObjectScript(logger, params, f);
} else {
throw new RuntimeException("The objective function must be recognizable as a polyglot Function");
}

public BobyqaOptimizerInstance setObjectiveFunction(ToDoubleFunction<double[]> f) {
this.objectiveFunction = new MultivariateFunction() {
@Override
public double value(double[] point) {
return f.applyAsDouble(point);
}
};
return this;
}
public BobyqaOptimizerInstance setObjectiveFunction(MultivariateFunction f) {
this.objectiveFunction = f;
return this;
}
public BobyqaOptimizerInstance setObjectiveFunction(Value f) {
throw new RuntimeException("replace me");
// if (f instanceof Function) {
//// Function<Object[],Object> function = (Function<Object[],Object>)f;
// this.objectiveFunctionFromScript =
// new PolyglotMultivariateObjectScript(logger, params, f);
// } else {
// throw new RuntimeException("The objective function must be recognizable as a polyglot Function");
// }
//
// return this;
}

public BobyqaOptimizerInstance setMaxEval(int maxEval) {
this.maxEval = maxEval;
Expand All @@ -121,7 +136,7 @@ public MVResult optimize() {
this.stoppingTrustRegionRadius
);

this.mvLogger = new MVLogger(this.objectiveFunctionFromScript);
this.mvLogger = new MVLogger(this.objectiveFunction);
ObjectiveFunction objective = new ObjectiveFunction(this.mvLogger);

List<OptimizationData> od = List.of(
Expand Down
4 changes: 2 additions & 2 deletions nb-api/src/main/java/io/nosqlbench/components/NBBuilders.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@ public PromPushReporterComponent pushReporter(String targetUri, int seconds, Str
// return new ExamplePlugin(component);
// }

public BobyqaOptimizerInstance bobyqaOptimizer(final NBComponent component) {
return new BobyqaOptimizerInstance(component);
public BobyqaOptimizerInstance bobyqaOptimizer() {
return new BobyqaOptimizerInstance(base);
}

public FileAccess fileAccess(String filename) {
Expand Down
Loading

0 comments on commit 21c882a

Please sign in to comment.