recall computation

This commit is contained in:
Jonathan Shook 2023-08-17 18:07:04 -05:00
parent b5092ec65e
commit 497432137e
36 changed files with 243 additions and 108 deletions

View File

@ -68,31 +68,38 @@
<version>4.17.0</version>
</dependency>
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java-core</artifactId>
</dependency>
<dependency>
<groupId>org.snakeyaml</groupId>
<artifactId>snakeyaml-engine</artifactId>
</dependency>
<!-- For CQL compression option -->
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.10.3</version>
</dependency>
<dependency>
<groupId>com.esri.geometry</groupId>
<artifactId>esri-geometry-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>

View File

@ -0,0 +1,32 @@
/*
* Copyright (c) 2023 nosqlbench
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.nosqlbench.engine.extensions.vectormath;
import com.datastax.oss.driver.api.core.cql.Row;
import com.datastax.oss.driver.shaded.guava.common.collect.Sets;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class VectorMath {
public double computeRecall(List<Row> rows, List<Long> expectedRowIds) {
Set<String> found = rows.stream().map(r -> r.getString("key")).collect(Collectors.toSet());
Set<String> expected = expectedRowIds.stream().map(String::valueOf).collect(Collectors.toSet());
return ((double)Sets.intersection(found,expected).size()/(double)expected.size());
}
}

View File

@ -0,0 +1,36 @@
/*
* Copyright (c) 2023 nosqlbench
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.nosqlbench.engine.extensions.vectormath;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
@Service(value = ScriptingPluginInfo.class,selector = "vectormath")
public class VectorMathPluginInfo implements ScriptingPluginInfo<VectorMath> {
@Override
public String getDescription() {
return "various methods and utilities for working with vector math in a scripted environment";
}
@Override
public VectorMath getExtensionObject(Logger logger, MetricRegistry metricRegistry, LabeledScenarioContext scriptContext) {
return new VectorMath();
}
}

View File

@ -18,12 +18,10 @@ package io.nosqlbench.adapters.api.activityimpl;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import groovy.lang.Binding;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.evalcontext.CycleFunction;
import io.nosqlbench.adapters.api.evalcontext.CycleFunctions;
import io.nosqlbench.adapters.api.evalcontext.GroovyBooleanCycleFunction;
import io.nosqlbench.adapters.api.evalcontext.GroovyObjectEqualityFunction;
import io.nosqlbench.adapters.api.evalcontext.*;
import io.nosqlbench.adapters.api.metrics.ThreadLocalNamedTimers;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.api.config.NBLabeledElement;
@ -51,6 +49,7 @@ import java.util.concurrent.TimeUnit;
public abstract class BaseOpDispenser<T extends Op, S> implements OpDispenser<T>, NBLabeledElement {
private final static Logger logger = LogManager.getLogger(BaseOpDispenser.class);
public static final String VERIFIER = "verifier";
public static final String VERIFIER_INIT = "verifier-init";
public static final String EXPECTED_RESULT = "expected-result";
public static final String VERIFIER_IMPORTS = "verifier-imports";
public static final String START_TIMERS = "start-timers";
@ -97,8 +96,7 @@ public abstract class BaseOpDispenser<T extends Op, S> implements OpDispenser<T>
this.configureInstrumentation(op);
this.configureVerifierImports(op);
List<CycleFunction<Boolean>> verifiers = new ArrayList<>();
verifiers.addAll(configureEqualityVerifier(op));
verifiers.addAll(configureAssertionVerifiers(op));
verifiers = configureVerifiers(op);
this._verifier = CycleFunctions.of((a, b) -> a && b, verifiers, true);
this.tlVerifier = ThreadLocal.withInitial(() -> _verifier.newInstance());
}
@ -123,35 +121,49 @@ public abstract class BaseOpDispenser<T extends Op, S> implements OpDispenser<T>
}
}
private List<? extends CycleFunction<Boolean>> configureAssertionVerifiers(ParsedOp op) {
private List<CycleFunction<Boolean>> configureVerifiers(ParsedOp op) {
Binding variables = new Binding();
Map<String, ParsedTemplateString> initBlocks = op.getTemplateMap().takeAsNamedTemplates(VERIFIER_INIT);
List<CycleFunction<?>> verifierInitFunctions = new ArrayList<>();
try {
initBlocks.forEach((initName, stringTemplate) -> {
GroovyCycleFunction<?> initFunction =
new GroovyCycleFunction<>(initName,stringTemplate,verifierImports,variables);
logger.info("configured verifier init:" + initFunction);
initFunction.setVariable("_parsed_op",op);
initFunction.apply(0L);
});
} catch (Exception e) {
throw new OpConfigError("error in verifier-init:" + e.getMessage(),e);
}
Map<String, ParsedTemplateString> namedVerifiers = op.getTemplateMap().takeAsNamedTemplates(VERIFIER);
List<CycleFunction<Boolean>> verifierFunctions = new ArrayList<>();
try {
namedVerifiers.forEach((verifierName,stringTemplate) -> {
GroovyBooleanCycleFunction verifier =
new GroovyBooleanCycleFunction(verifierName, stringTemplate, verifierImports);
new GroovyBooleanCycleFunction(verifierName, stringTemplate, verifierImports, variables);
logger.info("configured verifier:" + verifier);
verifierFunctions.add(verifier);
});
return verifierFunctions;
} catch (Exception gre) {
throw new OpConfigError("error in verifier:" + gre.getMessage(), gre);
}
}
private List<? extends CycleFunction<Boolean>> configureEqualityVerifier(ParsedOp op) {
try {
return op.takeAsOptionalStringTemplate(EXPECTED_RESULT)
.map(tpl -> new GroovyObjectEqualityFunction(op.getName()+"-"+EXPECTED_RESULT, tpl, verifierImports))
op.takeAsOptionalStringTemplate(EXPECTED_RESULT)
.map(tpl -> new GroovyObjectEqualityFunction(op.getName()+"-"+EXPECTED_RESULT, tpl, verifierImports, variables))
.map(vl -> {
logger.info("Configured equality verifier: " + vl);
return vl;
})
.map(v -> List.of(v))
.orElse(List.of());
.ifPresent(verifierFunctions::add);
} catch (Exception gre) {
throw new OpConfigError("error in verifier:" + gre.getMessage(), gre);
}
return verifierFunctions;
}
String getOpName() {

View File

@ -20,9 +20,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
import java.util.stream.Collectors;
public class CompoundCycleFunction<T> implements CycleFunction<T> {
private final List<CycleFunction<T>> functions = new ArrayList<>();
private final BinaryOperator<T> reducer;
@ -66,4 +66,10 @@ public class CompoundCycleFunction<T> implements CycleFunction<T> {
function.setVariable(name, value);
}
}
@Override
public String toString() {
return this.functions.size() + " cycle functions:\n" +
this.functions.stream().map(Object::toString).collect(Collectors.joining("\n","","\n"));
}
}

View File

@ -55,5 +55,12 @@ public class CycleFunctions {
@Override
public <V> void setVariable(String name, V value) {
}
@Override
public String toString() {
return "NOOP(" + this.getExpressionDetails()+")";
}
}
}

View File

@ -16,14 +16,15 @@
package io.nosqlbench.adapters.api.evalcontext;
import groovy.lang.Binding;
import io.nosqlbench.virtdata.core.templates.ParsedTemplateString;
import java.util.List;
public class GroovyBooleanCycleFunction extends GroovyCycleFunction<Boolean> {
public GroovyBooleanCycleFunction(String name, ParsedTemplateString template, List<String> imports) {
super(name, template, imports);
public GroovyBooleanCycleFunction(String name, ParsedTemplateString template, List<String> imports, Binding binding) {
super(name, template, imports, binding);
}
@Override

View File

@ -20,6 +20,8 @@ import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import groovy.lang.Script;
import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.api.extensions.SandboxExtensionFinder;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.virtdata.core.bindings.Bindings;
import io.nosqlbench.virtdata.core.bindings.BindingsTemplate;
import io.nosqlbench.virtdata.core.templates.BindPoint;
@ -37,6 +39,7 @@ public class GroovyCycleFunction<T> implements CycleFunction<T> {
private final static Logger logger = LogManager.getLogger(GroovyBooleanCycleFunction.class);
private final String name;
private final List<String> imports;
private final List<String> enabledServices = new ArrayList<>(List.of("vectormath"));
protected String scriptText; // Groovy script as provided
protected final Script script; // Groovy Script as compiled
@ -45,34 +48,63 @@ public class GroovyCycleFunction<T> implements CycleFunction<T> {
/**
* Instantiate a cycle function from basic types
* @param scriptText The raw script text, not including any bind point or capture point syntax
* @param bindingSpecs The names and recipes of bindings which are referenced in the scriptText
* @param imports The package imports to be installed into the execution environment
*
* @param scriptText
* The raw script text, not including any bind point or capture point syntax
* @param bindingSpecs
* The names and recipes of bindings which are referenced in the scriptText
* @param imports
* The package imports to be installed into the execution environment
*/
public GroovyCycleFunction(String name, String scriptText, Map<String,String> bindingSpecs, List<String> imports) {
public GroovyCycleFunction(String name, String scriptText, Map<String, String> bindingSpecs, List<String> imports, Binding binding) {
this.name = name;
this.scriptText = scriptText;
this.imports = imports;
// scripting env variable bindings
this.variableBindings = new Binding();
this.variableBindings = binding!=null? binding : new Binding();
// virtdata bindings to be evaluated at cycle time
this.bindingFunctions = new BindingsTemplate().addFieldBindings(bindingSpecs).resolveBindings();
this.script = compileScript(this.scriptText, imports);
this.script = compileScript(this.scriptText, imports, binding);
addServices();
}
public GroovyCycleFunction(String name, ParsedTemplateString template, List<String> imports) {
private void addServices() {
for (final ScriptingPluginInfo<?> extensionDescriptor : SandboxExtensionFinder.findAll()) {
if (!extensionDescriptor.isAutoLoading()) {
logger.info(() -> "Not loading " + extensionDescriptor + ", autoloading is false");
continue;
}
if (!enabledServices.isEmpty() && !enabledServices.contains(extensionDescriptor.getBaseVariableName())) {
logger.info(()->"Not loading " + extensionDescriptor + ", not included in subset.");
continue;
}
final Logger extensionLogger =
LogManager.getLogger("extensions." + extensionDescriptor.getBaseVariableName());
final Object extensionObject = extensionDescriptor.getExtensionObject(
extensionLogger,
null,
null
);
logger.trace(() -> "Adding extension object: name=" + extensionDescriptor.getBaseVariableName() +
" class=" + extensionObject.getClass().getSimpleName());
setVariable(extensionDescriptor.getBaseVariableName(), extensionObject);
}
}
public GroovyCycleFunction(String name, ParsedTemplateString template, List<String> imports, Binding binding) {
this(
name,
template.getPositionalStatement(),
resolveBindings(template.getBindPoints()),
imports
imports,
binding
);
}
private Script compileScript(String scriptText, List<String> imports) {
private Script compileScript(String scriptText, List<String> imports, Binding binding) {
// add classes which are in the imports to the groovy evaluation context
String[] verifiedClasses = expandClassNames(imports);
@ -80,7 +112,7 @@ public class GroovyCycleFunction<T> implements CycleFunction<T> {
ImportCustomizer importer = new ImportCustomizer().addImports(verifiedClasses);
compilerConfiguration.addCompilationCustomizers(importer);
GroovyShell gshell = new GroovyShell(new Binding(), compilerConfiguration);
GroovyShell gshell = new GroovyShell(binding!=null? binding:new Binding(), compilerConfiguration);
return gshell.parse(scriptText);
}
@ -127,19 +159,25 @@ public class GroovyCycleFunction<T> implements CycleFunction<T> {
return result;
}
/**
* Create an instance of an executable function which is based on the current one, with all of
* the per-cycle bindings as well as the variable bindings duplicated (shared).
* @return
*/
@Override
public CycleFunction<T> newInstance() {
return new GroovyCycleFunction<T>(name, scriptText, bindingFunctions,imports);
return new GroovyCycleFunction<T>(name, scriptText, bindingFunctions, imports, this.variableBindings.getVariables());
}
private GroovyCycleFunction(String name, String scriptText, Bindings bindingFunctions, List<String> imports) {
private GroovyCycleFunction(String name, String scriptText, Bindings bindingFunctions, List<String> imports, Map originalBinding) {
this.name = name;
this.scriptText = scriptText;
this.bindingFunctions = bindingFunctions;
this.imports = imports;
this.script = compileScript(scriptText,imports);
this.script = compileScript(scriptText, imports, new Binding());
this.variableBindings = script.getBinding();
originalBinding.forEach((k,v) -> variableBindings.setVariable(k.toString(),v));
}

View File

@ -16,6 +16,7 @@
package io.nosqlbench.adapters.api.evalcontext;
import groovy.lang.Binding;
import io.nosqlbench.virtdata.core.templates.ParsedTemplateString;
import java.util.List;
@ -32,8 +33,8 @@ public class GroovyObjectEqualityFunction extends GroovyCycleFunction<Boolean> {
private Object result;
public GroovyObjectEqualityFunction(String name, ParsedTemplateString template, List<String> imports) {
super(name, template, imports);
public GroovyObjectEqualityFunction(String name, ParsedTemplateString template, List<String> imports, Binding binding) {
super(name, template, imports, binding);
}
@Override

View File

@ -25,8 +25,8 @@ import static org.assertj.core.api.Assertions.assertThat;
public class CompoundCycleFunctionTest {
private final GroovyCycleFunction<Boolean> truthy = new GroovyCycleFunction<>("truthy", "true;", Map.of(), List.of());
private final GroovyCycleFunction<Boolean> falsy = new GroovyCycleFunction<>("falsy", "false;", Map.of(), List.of());
private final GroovyCycleFunction<Boolean> truthy = new GroovyCycleFunction<>("truthy", "true;", Map.of(), List.of(),null);
private final GroovyCycleFunction<Boolean> falsy = new GroovyCycleFunction<>("falsy", "false;", Map.of(), List.of(), null);
@Test
public void testReducerFirstOrLastResult() {

View File

@ -36,7 +36,7 @@ public class GroovyBooleanCycleFunctionTest {
Map.of("numbername", "NumberNameToString()")
);
List<String> imports = List.of();
GroovyBooleanCycleFunction function = new GroovyBooleanCycleFunction("test1", parsedTemplate, imports);
GroovyBooleanCycleFunction function = new GroovyBooleanCycleFunction("test1", parsedTemplate, imports, null);
Boolean result = function.apply(2);
assertThat(result).isTrue();
}
@ -49,7 +49,7 @@ public class GroovyBooleanCycleFunctionTest {
Map.of("numbername", "NumberNameToString()")
);
List<String> imports = List.of();
GroovyCycleFunction function = new GroovyBooleanCycleFunction("test2", parsedTemplate, imports);
GroovyCycleFunction function = new GroovyBooleanCycleFunction("test2", parsedTemplate, imports, null);
System.out.println(function);
assertThatThrownBy(() -> function.apply(3L)).isInstanceOf(MissingPropertyException.class);
}

View File

@ -17,6 +17,7 @@
package io.nosqlbench.engine.api.activityimpl.uniform;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.api.Shutdownable;
import io.nosqlbench.api.config.NBLabeledElement;
import io.nosqlbench.api.config.NBLabels;
import io.nosqlbench.api.config.standard.*;
@ -194,7 +195,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
/**
* This is done here since driver adapters are intended to keep all of their state within
* dedicated <em>state space</em> types. Any space which implements {@link io.nosqlbench.engine.api.activityapi.core.Shutdownable}
* dedicated <em>state space</em> types. Any space which implements {@link Shutdownable}
* will be closed when this activity shuts down.
*/
@Override

View File

@ -112,6 +112,7 @@ public class StandardAction<A extends StandardActivity<R, ?>, R extends Op> impl
CycleFunction<Boolean> verifier = dispenser.getVerifier();
try {
verifier.setVariable("result", result);
verifier.setVariable("cycle",cycle);
Boolean isGood = verifier.apply(cycle);
if (!isGood) {
throw new ResultVerificationError("result verification failed", maxTries - tries, verifier.getExpressionDetails());

View File

@ -15,7 +15,7 @@
*/
package io.nosqlbench.engine.core.lifecycle.process;
import io.nosqlbench.engine.api.activityapi.core.Shutdownable;
import io.nosqlbench.api.Shutdownable;
import java.util.LinkedList;

View File

@ -25,12 +25,12 @@ import io.nosqlbench.api.engine.metrics.ActivityMetrics;
import io.nosqlbench.api.metadata.ScenarioMetadata;
import io.nosqlbench.api.metadata.ScenarioMetadataAware;
import io.nosqlbench.api.metadata.SystemId;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.engine.api.scripting.ScriptEnvBuffer;
import io.nosqlbench.engine.core.annotation.Annotators;
import io.nosqlbench.engine.core.lifecycle.ExecutionMetricsResult;
import io.nosqlbench.engine.core.lifecycle.activity.ActivityProgressIndicator;
import io.nosqlbench.engine.core.lifecycle.scenario.script.SandboxExtensionFinder;
import io.nosqlbench.api.extensions.SandboxExtensionFinder;
import io.nosqlbench.engine.core.lifecycle.scenario.script.ScenarioContext;
import io.nosqlbench.engine.core.lifecycle.scenario.script.ScriptParams;
import io.nosqlbench.engine.core.lifecycle.scenario.script.bindings.ActivityBindings;

View File

@ -20,7 +20,7 @@ import com.codahale.metrics.*;
import com.codahale.metrics.graphite.Graphite;
import com.codahale.metrics.graphite.GraphiteReporter;
import io.nosqlbench.api.engine.metrics.reporters.PromPushReporter;
import io.nosqlbench.engine.api.activityapi.core.Shutdownable;
import io.nosqlbench.api.Shutdownable;
import io.nosqlbench.api.engine.metrics.ActivityMetrics;
import io.nosqlbench.engine.core.lifecycle.process.ShutdownManager;
import io.nosqlbench.api.engine.metrics.reporters.Log4JMetricsReporter;

View File

@ -47,10 +47,10 @@
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.fasterxml.jackson.core</groupId>-->
<!-- <artifactId>jackson-databind</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java-transport-okhttp</artifactId>

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.csvmetrics;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.csvoutput;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -16,7 +16,7 @@
package io.nosqlbench.engine.extensions.example;
import io.nosqlbench.engine.api.extensions.SandboxPlugin;
import io.nosqlbench.api.extensions.SandboxPlugin;
public class ExamplePlugin implements SandboxPlugin {

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.example;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.files;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.globalvars;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.histologger;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.histostatslogger;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.http;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.optimizers;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.s3uploader;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.api.metadata.ScenarioMetadata;
import io.nosqlbench.api.metadata.ScenarioMetadataAware;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.extensions.scriptingmetrics;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.shutdown;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.api.extensions.ScriptingPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;

View File

@ -41,6 +41,7 @@
<maven.compiler.target>17</maven.compiler.target>
<PROG>nb5</PROG>
<maven.plugin.validation>VERBOSE</maven.plugin.validation>
</properties>
<name>${project.artifactId}</name>
@ -180,32 +181,11 @@
<artifactId>lz4-java</artifactId>
<version>1.4.1</version>
</dependency>
<!-- For CQL compression option -->
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.10.3</version>
</dependency>
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>java-driver-query-builder</artifactId>
<version>4.17.0</version>
</dependency>
<dependency>
<groupId>org.snakeyaml</groupId>
<artifactId>snakeyaml-engine</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.10.3</version>
</dependency>
<dependency>
<groupId>com.esri.geometry</groupId>
<artifactId>esri-geometry-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-handler</artifactId>
@ -244,16 +224,6 @@
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>

View File

@ -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.
@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.nosqlbench.engine.api.activityapi.core;
package io.nosqlbench.api;
public interface Shutdownable {
void shutdown();

View File

@ -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.
@ -14,9 +14,7 @@
* limitations under the License.
*/
package io.nosqlbench.engine.core.lifecycle.scenario.script;
import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
package io.nosqlbench.api.extensions;
import java.util.ArrayList;
import java.util.Collections;

View File

@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.nosqlbench.engine.api.extensions;
package io.nosqlbench.api.extensions;
/**
* Any object can be a sandbox extension. This is primarily a tagging interface.

View File

@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.nosqlbench.engine.api.extensions;
package io.nosqlbench.api.extensions;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;

View File

@ -0,0 +1,25 @@
scenarios:
default:
step1: run driver=stdout cycles=10
bindings:
number: Identity()
number_name: NumberNameToString()
ops:
vop1:
stmt: "number:{number} name:{number_name}\n"
verifier-imports:
- "io.nosqlbench.api.engine.metrics.ActivityMetrics"
verifier-init: |
recallHisto = ActivityMetrics.histogram(_parsed_op,"recall-histo",4);
verifier: |
if (recallHisto!=null) {
print("recallHisto is defined!\n");
recallHisto.update(cycle);
} else {
print("recallHisto is not defined!\n");
}
return true;
// double recall = vectormath.computeRecall(result,result)