mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
allow for 'UNSET' on overrides
This commit is contained in:
parent
2091c5ad5a
commit
6c1b92e667
@ -18,16 +18,23 @@
|
|||||||
package io.nosqlbench.engine.core.script;
|
package io.nosqlbench.engine.core.script;
|
||||||
|
|
||||||
import ch.qos.logback.classic.Logger;
|
import ch.qos.logback.classic.Logger;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
import io.nosqlbench.nb.api.errors.BasicError;
|
import io.nosqlbench.nb.api.errors.BasicError;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap the script parameters in a type which allows for easy manipulation
|
||||||
|
*/
|
||||||
public class ScriptParams extends HashMap<String, String> {
|
public class ScriptParams extends HashMap<String, String> {
|
||||||
|
|
||||||
private static final Logger logger = (Logger) LoggerFactory.getLogger(ScriptParams.class);
|
private static final Logger logger = (Logger) LoggerFactory.getLogger(ScriptParams.class);
|
||||||
|
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||||
|
|
||||||
public Map<String,String> withOverrides(Map<String, String> overrides) {
|
public Map<String,String> withOverrides(Map<String, String> overrides) {
|
||||||
if (overrides == null) {
|
if (overrides == null) {
|
||||||
@ -36,9 +43,22 @@ public class ScriptParams extends HashMap<String, String> {
|
|||||||
}
|
}
|
||||||
checkForNulls("params", "calling withOverrides", this);
|
checkForNulls("params", "calling withOverrides", this);
|
||||||
checkForNulls("overrides", "calling withOverrides", overrides);
|
checkForNulls("overrides", "calling withOverrides", overrides);
|
||||||
HashMap<String, String> result = new HashMap<>();
|
ScriptParams result = new ScriptParams();
|
||||||
result.putAll(this);
|
result.putAll(this);
|
||||||
result.putAll(overrides);
|
|
||||||
|
for (Entry<String, String> overrideEntry : overrides.entrySet()) {
|
||||||
|
String oKey = overrideEntry.getKey();
|
||||||
|
String oVal = overrideEntry.getValue();
|
||||||
|
if (oVal.toUpperCase().endsWith("UNDEF")) {
|
||||||
|
String removed = result.remove(oKey);
|
||||||
|
logger.trace("Removed key '" + oKey + "': '" + removed + "' from script params because it was "+ oVal + " in overrides");
|
||||||
|
} else {
|
||||||
|
String was = result.get(oKey);
|
||||||
|
was = (was==null ? "NULL" : was);
|
||||||
|
result.put(oKey,oVal);
|
||||||
|
logger.trace("Overrode key '" + oKey + "': from '" + was + " to " + oVal);
|
||||||
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +67,7 @@ public class ScriptParams extends HashMap<String, String> {
|
|||||||
logger.warn("A null map was provided to withDefaults. This could be a bug in your script.");
|
logger.warn("A null map was provided to withDefaults. This could be a bug in your script.");
|
||||||
defaults=Map.of();
|
defaults=Map.of();
|
||||||
}
|
}
|
||||||
HashMap<String, String> result = new HashMap<>();
|
ScriptParams result = new ScriptParams();
|
||||||
checkForNulls("params", "calling withDefaults", this);
|
checkForNulls("params", "calling withDefaults", this);
|
||||||
checkForNulls("defaults", "calling withDefaults", defaults);
|
checkForNulls("defaults", "calling withDefaults", defaults);
|
||||||
result.putAll(defaults);
|
result.putAll(defaults);
|
||||||
@ -78,6 +98,11 @@ public class ScriptParams extends HashMap<String, String> {
|
|||||||
logger.info(mapdetail);
|
logger.info(mapdetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return gson.toJson(this,Map.class).toString();
|
||||||
|
}
|
||||||
|
|
||||||
private static String valueOf(Object o) {
|
private static String valueOf(Object o) {
|
||||||
if (o == null) {
|
if (o == null) {
|
||||||
return "NULL";
|
return "NULL";
|
||||||
|
@ -161,6 +161,13 @@ public class AsyncScriptIntegrationTests {
|
|||||||
assertThat(scenarioResult.getIOLog()).contains("params.get(\"four\") [defaulted-four-niner]='niner'");
|
assertThat(scenarioResult.getIOLog()).contains("params.get(\"four\") [defaulted-four-niner]='niner'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testScriptParamsUndefVariableWithOverride() {
|
||||||
|
ScenarioResult scenarioResult = runScenario("undef_param", "one", "two", "three", "four");
|
||||||
|
assertThat(scenarioResult.getIOLog()).contains("before: params.get(\"three\"):four");
|
||||||
|
assertThat(scenarioResult.getIOLog()).contains("after: params.get(\"three\"):null");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExtensionHistoStatsLogger() throws IOException {
|
public void testExtensionHistoStatsLogger() throws IOException {
|
||||||
ScenarioResult scenarioResult = runScenario("extension_histostatslogger");
|
ScenarioResult scenarioResult = runScenario("extension_histostatslogger");
|
||||||
|
16
nb/src/test/resources/scripts/async/undef_param.js
Normal file
16
nb/src/test/resources/scripts/async/undef_param.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
print("params from command line:");
|
||||||
|
print(params);
|
||||||
|
print('before: params.get("three"):' + params.get("three"));
|
||||||
|
print('before: params.three:' + params.get("three"));
|
||||||
|
|
||||||
|
var overrides = {
|
||||||
|
'three': "undef",
|
||||||
|
};
|
||||||
|
|
||||||
|
print("params.three after overriding with three:UNDEF");
|
||||||
|
params = params.withOverrides({'three':'UNDEF'});
|
||||||
|
print(params);
|
||||||
|
print('after: params.get("three"):' + params.get("three"));
|
||||||
|
print('after: params.three:' + params.get("three"));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user