error for unknown scenario, handling of TEMPLATE and <<>> variables in run scripts in the yaml

This commit is contained in:
phact
2020-03-17 12:50:24 -04:00
parent e24af60c88
commit b216bc3164
8 changed files with 50 additions and 23 deletions

View File

@@ -38,7 +38,7 @@ import io.nosqlbench.engine.api.metrics.ActivityMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics; import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics; import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics;
import io.nosqlbench.engine.api.util.SimpleConfig; import io.nosqlbench.engine.api.util.SimpleConfig;
import io.nosqlbench.engine.api.util.StrInterpolater; import io.nosqlbench.engine.api.util.StrInterpolator;
import io.nosqlbench.engine.api.util.TagFilter; import io.nosqlbench.engine.api.util.TagFilter;
import io.nosqlbench.engine.api.util.Unit; import io.nosqlbench.engine.api.util.Unit;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -276,7 +276,7 @@ public class CqlActivity extends SimpleActivity implements Activity, ActivityDef
StmtsDocList doclist = null; StmtsDocList doclist = null;
String yaml_loc = activityDef.getParams().getOptionalString("yaml").orElse("default"); String yaml_loc = activityDef.getParams().getOptionalString("yaml").orElse("default");
StrInterpolater interp = new StrInterpolater(activityDef); StrInterpolator interp = new StrInterpolator(activityDef);
String yamlVersion = "unset"; String yamlVersion = "unset";
if (yaml_loc.endsWith(":1") || yaml_loc.endsWith(":2")) { if (yaml_loc.endsWith(":1") || yaml_loc.endsWith(":2")) {
@@ -329,7 +329,7 @@ public class CqlActivity extends SimpleActivity implements Activity, ActivityDef
} }
@Deprecated @Deprecated
private StmtsDocList getVersion1StmtsDoc(StrInterpolater interp, String yaml_loc) { private StmtsDocList getVersion1StmtsDoc(StrInterpolator interp, String yaml_loc) {
StmtsDocList unfiltered; StmtsDocList unfiltered;
List<RawStmtsBlock> blocks = new ArrayList<>(); List<RawStmtsBlock> blocks = new ArrayList<>();

View File

@@ -1,13 +1,13 @@
# nb -v run type=cql yaml=baselines/cql-iot tags=phase:schema host=dsehost # nb -v run type=cql yaml=baselines/cql-iot tags=phase:schema host=dsehost
scenarios: scenarios:
default: default:
- run type=cql yaml=baselines/cql-iot tags=phase:schema - run type=cql yaml=baselines/cql-iot tags=phase:schema hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) - run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) - run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
stdout: stdout:
- run type=cql yaml=baselines/cql-iot tags=phase:schema - run type=cql yaml=baselines/cql-iot tags=phase:schema hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) - run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) - run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
bindings: bindings:
machine_id: Mod(<<sources:10000>>); ToHashedUUID() -> java.util.UUID machine_id: Mod(<<sources:10000>>); ToHashedUUID() -> java.util.UUID
sensor_name: HashedLineToString('data/variable_words.txt') sensor_name: HashedLineToString('data/variable_words.txt')

View File

@@ -32,7 +32,7 @@ import io.nosqlbench.engine.api.activityimpl.ParameterMap;
import io.nosqlbench.engine.api.activityimpl.SimpleActivity; import io.nosqlbench.engine.api.activityimpl.SimpleActivity;
import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.api.metrics.ActivityMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionMeterMetrics; import io.nosqlbench.engine.api.metrics.ExceptionMeterMetrics;
import io.nosqlbench.engine.api.util.StrInterpolater; import io.nosqlbench.engine.api.util.StrInterpolator;
import io.nosqlbench.virtdata.api.BindingsTemplate; import io.nosqlbench.virtdata.api.BindingsTemplate;
import io.nosqlbench.virtdata.api.templates.StringBindings; import io.nosqlbench.virtdata.api.templates.StringBindings;
import io.nosqlbench.virtdata.api.templates.StringBindingsTemplate; import io.nosqlbench.virtdata.api.templates.StringBindingsTemplate;
@@ -71,7 +71,7 @@ public class StdoutActivity extends SimpleActivity implements ActivityDefObserve
public StdoutActivity(ActivityDef activityDef) { public StdoutActivity(ActivityDef activityDef) {
super(activityDef); super(activityDef);
StrInterpolater interp = new StrInterpolater(activityDef); StrInterpolator interp = new StrInterpolator(activityDef);
String yaml_loc = activityDef.getParams().getOptionalString("yaml").orElse("default"); String yaml_loc = activityDef.getParams().getOptionalString("yaml").orElse("default");
this.showstmts = activityDef.getParams().getOptionalBoolean("showstatements").orElse(false); this.showstmts = activityDef.getParams().getOptionalBoolean("showstatements").orElse(false);
this.fileName = activityDef.getParams().getOptionalString("filename").orElse("stdout"); this.fileName = activityDef.getParams().getOptionalString("filename").orElse("stdout");

View File

@@ -27,23 +27,23 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
public class StrInterpolater implements Function<String, String> { public class StrInterpolator implements Function<String, String> {
private MultiMap multimap = new MultiMap(); private MultiMap multimap = new MultiMap();
private StrSubstitutor substitutor= new StrSubstitutor(multimap,"<<",">>",'\\'); private StrSubstitutor substitutor= new StrSubstitutor(multimap,"<<",">>",'\\');
private StrSubstitutor substitutor2 = new StrSubstitutor(multimap, "TEMPLATE(", ")", '\\'); private StrSubstitutor substitutor2 = new StrSubstitutor(multimap, "TEMPLATE(", ")", '\\');
public StrInterpolater(ActivityDef... activityDefs) { public StrInterpolator(ActivityDef... activityDefs) {
Arrays.stream(activityDefs) Arrays.stream(activityDefs)
.map(ad -> ad.getParams().getStringStringMap()) .map(ad -> ad.getParams().getStringStringMap())
.forEach(multimap::add); .forEach(multimap::add);
} }
public StrInterpolater(Map<String,String> basicMap) { public StrInterpolator(Map<String,String> basicMap) {
multimap.add(basicMap); multimap.add(basicMap);
} }
// for testing // for testing
protected StrInterpolater(List<Map<String, String>> maps) { protected StrInterpolator(List<Map<String, String>> maps) {
maps.forEach(multimap::add); maps.forEach(multimap::add);
} }
@@ -52,7 +52,7 @@ public class StrInterpolater implements Function<String, String> {
return substitutor.replace(substitutor2.replace(s)); return substitutor.replace(substitutor2.replace(s));
} }
private static class MultiMap extends StrLookup<String> { public static class MultiMap extends StrLookup<String> {
private List<Map<String, String>> maps = new ArrayList<>(); private List<Map<String, String>> maps = new ArrayList<>();
private String warnPrefix = "UNSET"; private String warnPrefix = "UNSET";

View File

@@ -27,7 +27,7 @@ import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@Test @Test
public class StrInterpolaterTest { public class StrInterpolatorTest {
private static List<Map<String, String>> abcd = new ArrayList<Map<String, String>>() {{ private static List<Map<String, String>> abcd = new ArrayList<Map<String, String>>() {{
add( add(
@@ -54,7 +54,7 @@ public class StrInterpolaterTest {
); );
}}; }};
private static StrInterpolater interp = new StrInterpolater(abcd); private static StrInterpolator interp = new StrInterpolator(abcd);
@Test @Test
public void shouldReturnIdentity() { public void shouldReturnIdentity() {

View File

@@ -4,9 +4,13 @@ import ch.qos.logback.classic.Level;
import io.nosqlbench.engine.api.activityconfig.StatementsLoader; import io.nosqlbench.engine.api.activityconfig.StatementsLoader;
import io.nosqlbench.engine.api.activityconfig.yaml.Scenarios; import io.nosqlbench.engine.api.activityconfig.yaml.Scenarios;
import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.activityimpl.ParameterMap;
import io.nosqlbench.engine.api.metrics.IndicatorMode; import io.nosqlbench.engine.api.metrics.IndicatorMode;
import io.nosqlbench.engine.api.util.NosqlBenchFiles; import io.nosqlbench.engine.api.util.NosqlBenchFiles;
import io.nosqlbench.engine.api.util.StrInterpolator;
import io.nosqlbench.engine.api.util.Unit; import io.nosqlbench.engine.api.util.Unit;
import org.apache.commons.text.StrSubstitutor;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -321,7 +325,7 @@ public class EBCLIOptions {
if(path.isPresent()){ if(path.isPresent()){
arglist.removeFirst(); arglist.removeFirst();
String scenarioFilter = null; String scenarioFilter = null;
if (arglist.size() > 0 && arglist.peekFirst().contains("=")){ if (arglist.size() > 0 && !arglist.peekFirst().contains("=")){
scenarioFilter = arglist.peekFirst(); scenarioFilter = arglist.peekFirst();
arglist.removeFirst(); arglist.removeFirst();
}; };
@@ -349,10 +353,33 @@ public class EBCLIOptions {
List<String> cmds = scenarios.getNamedScenario(scenarioName); List<String> cmds = scenarios.getNamedScenario(scenarioName);
if (cmds == null){
List<String> names = scenarios.getScenarioNames();
throw new RuntimeException("Unknown scenaro name, make sure the scenario name you provide exists in the workload definition (yaml):\n" + String.join(",", names));
}
for (String cmd : cmds) { for (String cmd : cmds) {
String[] cmdArray = cmd.split(" ");
Map<String, String> paramMap = new HashMap<>();
for (String parameter: cmdArray) {
if (parameter.contains("=")){
if ( !parameter.contains("TEMPLATE(") && !parameter.contains("<<")) {
String[] paramArray = parameter.split("=");
paramMap.put(paramArray[0], paramArray[1]);
}
}
}
StrSubstitutor sub1 = new StrSubstitutor(paramMap, "<<", ">>", '\\', ",");
StrSubstitutor sub2 = new StrSubstitutor(paramMap, "TEMPLATE(", ")", '\\', ",");
cmd = sub2.replace(sub1.replace(cmd));
// Is there a better way to do this than regex? // Is there a better way to do this than regex?
parse(cmd.split(" ")); parse(cmd.split(" "));
} }
arglist.removeFirst(); arglist.removeFirst();
} }

View File

@@ -2,7 +2,7 @@ package io.nosqlbench.engine.cli;
import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.util.NosqlBenchFiles; import io.nosqlbench.engine.api.util.NosqlBenchFiles;
import io.nosqlbench.engine.api.util.StrInterpolater; import io.nosqlbench.engine.api.util.StrInterpolator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -86,8 +86,8 @@ public class EBCLIScriptAssembly {
} catch (Throwable t) { } catch (Throwable t) {
throw new RuntimeException("Unable to buffer " + cmd.getCmdSpec() + ": " + t); throw new RuntimeException("Unable to buffer " + cmd.getCmdSpec() + ": " + t);
} }
StrInterpolater interpolater = new StrInterpolater(cmd.getCmdArgs()); StrInterpolator interpolator = new StrInterpolator(cmd.getCmdArgs());
scriptData = interpolater.apply(scriptData); scriptData = interpolator.apply(scriptData);
return new ScriptData(scriptData,cmd.getCmdArgs()); return new ScriptData(scriptData,cmd.getCmdArgs());
} }

View File

@@ -195,7 +195,7 @@ public class TestNBCLIOptions {
@Test @Test
public void cqlIotYamlScenarioSchemaOnly() { public void cqlIotYamlScenarioSchemaOnly() {
EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test", "stdout"}); EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test", "schema-only"});
List<EBCLIOptions.Cmd> cmds = opts.getCommands(); List<EBCLIOptions.Cmd> cmds = opts.getCommands();
} }