diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java b/engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java index 21f1a69c2..25a34a28c 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java @@ -170,7 +170,7 @@ public class NBCLIScenarioPreprocessor { // here, we should actually parse the command using argv rules cmd = userParamsInterp.apply(cmd); - LinkedHashMap parsedStep = parseStep(cmd); + LinkedHashMap parsedStep = parseStep(cmd, stepName, scenarioName); LinkedHashMap usersCopy = new LinkedHashMap<>(userProvidedParams); LinkedHashMap buildingCmd = new LinkedHashMap<>(); @@ -252,7 +252,7 @@ public class NBCLIScenarioPreprocessor { private static final Pattern WordAndMaybeAssignment = Pattern.compile("(?\\w[-_\\d\\w.]+)((?=+)(?.+))?"); - private static LinkedHashMap parseStep(String cmd) { + private static LinkedHashMap parseStep(String cmd, String stepName, String scenarioName) { LinkedHashMap parsedStep = new LinkedHashMap<>(); String[] namedStepPieces = cmd.split(" +"); @@ -270,6 +270,10 @@ public class NBCLIScenarioPreprocessor { String commandName = matcher.group("name"); String assignmentOp = matcher.group("oper"); String assignedValue = matcher.group("val"); + if (parsedStep.containsKey(commandName)) { + String errorMessage = String.format("Duplicate occurrence of parameter \"%s\" on step \"%s\" of scenario \"%s\", step command: \"%s\"", commandName, stepName, scenarioName, cmd); + throw new BasicError(errorMessage); + } parsedStep.put(commandName, new SCNamedParam(commandName, assignmentOp, assignedValue)); } return parsedStep; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java index 0f041d430..24a5def53 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java @@ -72,6 +72,9 @@ public class CmdParser { Map params = new LinkedHashMap<>(); while (cmdstructs.peekFirst() instanceof parameter param) { cmdstructs.removeFirst(); + if (params.containsKey(param.name())) { + throw new BasicError("Duplicate occurrence of option: " + param.name()); + } params.put(param.name(),CmdArg.of(cmd.name(),param.name(),param.op(),param.value())); } cmds.add(new Cmd(cmd.name(),params));