mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
Merge pull request #1069 from nosqlbench/nosqlbench-1068-examplefixups
changes needed to make examples robust
This commit is contained in:
commit
ef830f0101
@ -80,6 +80,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
|
||||
for (OpTemplate ot : opTemplates) {
|
||||
ParsedOp incompleteOpDef = new ParsedOp(ot, NBConfiguration.empty(), List.of());
|
||||
String driverName = incompleteOpDef.takeOptionalStaticValue("driver", String.class)
|
||||
.or(() -> incompleteOpDef.takeOptionalStaticValue("type",String.class))
|
||||
.or(() -> activityDef.getParams().getOptionalString("driver"))
|
||||
.orElseThrow(() -> new OpConfigError("Unable to identify driver name for op template:\n" + ot));
|
||||
|
||||
|
@ -16,15 +16,15 @@
|
||||
|
||||
package io.nosqlbench.engine.api.activityimpl.uniform;
|
||||
|
||||
import io.nosqlbench.api.config.standard.NBConfigModel;
|
||||
import io.nosqlbench.api.config.standard.NBConfiguration;
|
||||
import io.nosqlbench.api.config.standard.NBReconfigurable;
|
||||
import io.nosqlbench.api.engine.activityimpl.ActivityDef;
|
||||
import io.nosqlbench.engine.api.activityapi.core.ActionDispenser;
|
||||
import io.nosqlbench.engine.api.activityapi.core.ActivityType;
|
||||
import io.nosqlbench.engine.api.activityconfig.OpsLoader;
|
||||
import io.nosqlbench.engine.api.activityconfig.yaml.OpsDocList;
|
||||
import io.nosqlbench.api.engine.activityimpl.ActivityDef;
|
||||
import io.nosqlbench.engine.api.activityimpl.SimpleActivity;
|
||||
import io.nosqlbench.api.config.standard.NBConfigModel;
|
||||
import io.nosqlbench.api.config.standard.NBConfiguration;
|
||||
import io.nosqlbench.api.config.standard.NBReconfigurable;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@ -39,7 +39,10 @@ public class StandardActivityType<A extends StandardActivity<?,?>> extends Simpl
|
||||
private final Map<String,DriverAdapter> adapters = new HashMap<>();
|
||||
|
||||
public StandardActivityType(DriverAdapter<?,?> adapter, ActivityDef activityDef) {
|
||||
super(activityDef);
|
||||
super(activityDef
|
||||
.deprecate("type","driver")
|
||||
.deprecate("yaml", "workload")
|
||||
);
|
||||
this.adapters.put(adapter.getAdapterName(),adapter);
|
||||
if (adapter instanceof ActivityDefAware) {
|
||||
((ActivityDefAware) adapter).setActivityDef(activityDef);
|
||||
|
@ -139,7 +139,7 @@ public class NBCLIScenarioParser {
|
||||
if (selectedScenario.containsKey(stepname)) {
|
||||
namedSteps.put(stepname,selectedScenario.get(stepname));
|
||||
} else {
|
||||
throw new BasicError("Unable to find named scenario.step'" + scenarioName + "' in workload '" + workloadName
|
||||
throw new BasicError("Unable to find named scenario.step '" + scenarioName + "' in workload '" + workloadName
|
||||
+ "', but you can pick from one of: " + selectedScenario.keySet().stream().map(n -> nameparts[0].concat(".").concat(n)).collect(Collectors.joining(", ")));
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022 nosqlbench
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -41,6 +41,7 @@ public class ActivityLoader {
|
||||
}
|
||||
|
||||
public synchronized Activity loadActivity(ActivityDef activityDef) {
|
||||
activityDef= activityDef.deprecate("yaml","workload").deprecate("type","driver");
|
||||
Activity activity = new StandardActivityType(activityDef).getAssembledActivity(activityDef, activityMap);
|
||||
activityMap.put(activity.getAlias(),activity);
|
||||
logger.debug("Resolved activity for alias '" + activityDef.getAlias() + "'");
|
||||
|
@ -18,6 +18,7 @@ package io.nosqlbench.api.engine.activityimpl;
|
||||
|
||||
import io.nosqlbench.api.config.NBNamedElement;
|
||||
import io.nosqlbench.api.engine.util.Unit;
|
||||
import io.nosqlbench.api.errors.BasicError;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@ -213,4 +214,22 @@ public class ActivityDef implements NBNamedElement {
|
||||
public String getName() {
|
||||
return getAlias();
|
||||
}
|
||||
|
||||
public ActivityDef deprecate(String deprecatedName, String newName) {
|
||||
Object deprecatedParam = this.parameterMap.get(deprecatedName);
|
||||
if (deprecatedParam==null) {
|
||||
return this;
|
||||
}
|
||||
if (deprecatedParam instanceof CharSequence chars) {
|
||||
if (this.parameterMap.containsKey(newName)) {
|
||||
throw new BasicError("You have specified activity param '" + deprecatedName + "' in addition to the valid name '" + newName +"'. Remove '" + deprecatedName + "'.");
|
||||
} else {
|
||||
logger.warn("Auto replacing deprecated activity param '" + deprecatedName + "="+ chars +"' with new '" + newName +"="+ chars +"'.");
|
||||
parameterMap.put(newName,parameterMap.remove(deprecatedName));
|
||||
}
|
||||
} else {
|
||||
throw new BasicError("Can't replace deprecated name with value of type " + deprecatedName.getClass().getCanonicalName());
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
@ -10,13 +10,16 @@ scenarios:
|
||||
# a scale parameter or a custom MathContext, but not both. The scale parameter
|
||||
# is not supported for String or Double input forms.
|
||||
|
||||
# As of Java 17, the roundingMode enums are UP DOWN CEILING FLOOR HALF_UP HALF_DOWN HALF_EVEN UNNECESSARY
|
||||
# and the precision must be zero or greater
|
||||
|
||||
bindings:
|
||||
|
||||
# convert an example double with some fractional values, then convert it to BigDecimal
|
||||
from_double: ToDouble(); Div(100.0d); ToBigDecimal();
|
||||
|
||||
# convert doubles to BigDecimal, with custom precision and rounding
|
||||
from_double_custom5: ToDouble(); Div(100.0d); ToBigDecimal('precision=5 roundingMode=HALF');
|
||||
from_double_custom5: ToDouble(); Div(100.0d); ToBigDecimal('precision=5 roundingMode=HALF_EVEN');
|
||||
|
||||
# convert directly to BigDecimal from long as whole numbers
|
||||
from_long: ToBigDecimal();
|
||||
|
@ -21,9 +21,6 @@ bindings:
|
||||
# control the size of the extracted sample with a hash range
|
||||
hashed_bb_sizerange: ByteBufferSizedHashed(HashRange(1,10)); ToHexString();
|
||||
|
||||
# control the size of the extracted sample based on a continuous function
|
||||
hashed_bb_size_normal: ByteBufferSizedHashed(Normal(5.0, 1.0)); ToHexString();
|
||||
|
||||
# control the size of the extracted sample based on a discrete function
|
||||
hashed_bb_size_binomial: ByteBufferSizedHashed(Binomial(8,0.5)); ToHexString();
|
||||
|
||||
|
@ -5,12 +5,12 @@ description: |
|
||||
|
||||
scenarios:
|
||||
default: run driver===stdout format=readout
|
||||
names: run driver===stdout format=readout bindings=names
|
||||
cities: run driver===stdout format=readout bindings=cities
|
||||
states: run driver===stdout format=readout bindings=states
|
||||
zips: run driver===stdout format=readout bindings=zips
|
||||
counties: run driver===stdout format=readout bindings=counties
|
||||
countries: run driver===stdout format=readout bindings=country
|
||||
names: run driver===stdout format=readout bindings='names.*'
|
||||
cities: run driver===stdout format=readout bindings='cities.*'
|
||||
states: run driver===stdout format=readout bindings='states.*'
|
||||
zips: run driver===stdout format=readout bindings='zips.*'
|
||||
counties: run driver===stdout format=readout bindings='counties.*'
|
||||
countries: run driver===stdout format=readout bindings='country.*'
|
||||
|
||||
|
||||
# Each binding is named, so the bindings is a map of names to
|
||||
|
@ -21,10 +21,10 @@ bindings:
|
||||
|
||||
# The TypeOf() function tells you the java class of its input
|
||||
|
||||
typeof: TypeOf();
|
||||
typeof: ToJavaInstant(); TypeOf();
|
||||
|
||||
# The Show() function provides a snapshot of what is in the thread-local
|
||||
# variable map as a String
|
||||
|
||||
show: Show();
|
||||
show: SaveLong('var42'); Show();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022 nosqlbench
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -39,7 +39,7 @@ public class MathContextReader {
|
||||
}
|
||||
} catch (IllegalArgumentException iae) {
|
||||
throw new BasicError("'" + name + "' was not a valid format for a new MathContext(String), try something " +
|
||||
"like 'precision=17 roundingMode=UP");
|
||||
"like 'precision=17 roundingMode=UP', original exception:" + iae);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022 nosqlbench
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -33,7 +33,7 @@ public class CountryNames extends CSVSampler implements LongFunction<String> {
|
||||
|
||||
@Example("CountryNames()")
|
||||
public CountryNames() {
|
||||
super("COUNTRY_NAME","n/a","name","countries.csv");
|
||||
super("COUNTRY_NAME","n/a","name","data/countries.csv");
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user