Merge pull request #1714 from nosqlbench/jshook/talk-improvements

Jshook/talk improvements
This commit is contained in:
Jonathan Shook 2023-12-15 11:12:19 -08:00 committed by GitHub
commit 84bc7bd4fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
174 changed files with 858 additions and 906 deletions

View File

@ -24,7 +24,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.amqp;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "amqp") @Service(value = DriverAdapterLoader.class, selector = "amqp")

View File

@ -0,0 +1,32 @@
package io.nosqlbench.adapter.cqld4;
/*
* Copyright (c) 2022 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.
*/
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.labels.NBLabels;
@Service(value = DriverAdapterLoader.class, selector = "cql")
public class CqlDriverAdapterLoader implements DriverAdapterLoader {
@Override
public Cqld4DriverAdapter load(NBComponent parent, NBLabels childLabels) {
return new Cqld4DriverAdapter(parent, childLabels);
}
}

View File

@ -18,7 +18,7 @@ package io.nosqlbench.adapter.cqld4;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapter.class, selector = "cql") @Service(value = DriverAdapter.class, selector = "cql")

View File

@ -25,7 +25,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op; import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.cqld4;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "cqld4") @Service(value = DriverAdapterLoader.class, selector = "cqld4")

View File

@ -99,7 +99,7 @@ public abstract class Cqld4CqlOp implements CycleOp<List<Row>>, VariableCapture,
this.metrics = metrics; this.metrics = metrics;
} }
public final List<Row> apply(long cycle) { public final ArrayList<Row> apply(long cycle) {
Statement<?> statement = getStmt(); Statement<?> statement = getStmt();
logger.trace(() -> "apply() invoked, statement obtained, executing async with page size: " + statement.getPageSize() + " thread local rows: "); logger.trace(() -> "apply() invoked, statement obtained, executing async with page size: " + statement.getPageSize() + " thread local rows: ");
@ -118,7 +118,7 @@ public abstract class Cqld4CqlOp implements CycleOp<List<Row>>, VariableCapture,
}); });
try { try {
return rowsStage.toCompletableFuture().get(300, TimeUnit.SECONDS); return new PrintableRowList(rowsStage.toCompletableFuture().get(300, TimeUnit.SECONDS));
} catch (ExecutionException exe) { } catch (ExecutionException exe) {
Throwable ee = exe.getCause(); Throwable ee = exe.getCause();
if (ee instanceof RuntimeException re) { if (ee instanceof RuntimeException re) {
@ -142,6 +142,21 @@ public abstract class Cqld4CqlOp implements CycleOp<List<Row>>, VariableCapture,
// processors.flush(); // processors.flush();
} }
private static class PrintableRowList extends ArrayList<Row> {
public PrintableRowList(List<Row> values) {
super(values);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Row row : this) {
sb.append(row.getFormattedContents());
}
return sb.toString();
}
}
// private BiFunction<AsyncResultSet,Throwable> handler // private BiFunction<AsyncResultSet,Throwable> handler
@Override @Override
public Op getNextOp() { public Op getNextOp() {

View File

@ -16,7 +16,7 @@
package io.nosqlbench.cqlgen.api; package io.nosqlbench.cqlgen.api;
import io.nosqlbench.nb.api.components.NBNamedElement; import io.nosqlbench.nb.api.components.core.NBNamedElement;
import io.nosqlbench.cqlgen.model.CqlModel; import io.nosqlbench.cqlgen.model.CqlModel;
import java.util.function.Function; import java.util.function.Function;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.cqlgen.model; package io.nosqlbench.cqlgen.model;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBNamedElement; import io.nosqlbench.nb.api.components.core.NBNamedElement;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
public abstract class CqlColumnBase implements NBNamedElement, NBLabeledElement { public abstract class CqlColumnBase implements NBNamedElement, NBLabeledElement {

View File

@ -18,7 +18,7 @@ package io.nosqlbench.cqlgen.model;
import com.datastax.oss.driver.internal.core.util.Strings; import com.datastax.oss.driver.internal.core.util.Strings;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBNamedElement; import io.nosqlbench.nb.api.components.core.NBNamedElement;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.cqlgen.core.CGKeyspaceStats; import io.nosqlbench.cqlgen.core.CGKeyspaceStats;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.cqlgen.model; package io.nosqlbench.cqlgen.model;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBNamedElement; import io.nosqlbench.nb.api.components.core.NBNamedElement;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.cqlgen.core.CGTableStats; import io.nosqlbench.cqlgen.core.CGTableStats;
import io.nosqlbench.cqlgen.transformers.ComputedTableStats; import io.nosqlbench.cqlgen.transformers.ComputedTableStats;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.cqlgen.model;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBNamedElement; import io.nosqlbench.nb.api.components.core.NBNamedElement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -17,8 +17,8 @@
package io.nosqlbench.engine.extensions.vectormath; package io.nosqlbench.engine.extensions.vectormath;
import com.datastax.oss.driver.api.core.cql.Row; import com.datastax.oss.driver.api.core.cql.Row;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.vectormath; package io.nosqlbench.engine.extensions.vectormath;
import io.nosqlbench.nb.api.extensions.ScriptingExtensionPluginInfo; import io.nosqlbench.nb.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -0,0 +1,12 @@
# cql
In this version of NoSQLBench, the CQL driver is fully
based on version 4 of the
[Java Driver for Apache Cassandra](https://github.com/apache/cassandra-java-driver)
version 4.X.
This `cqld4` driver has replaced the older CQL driver under the name `cql`.
Previous versions of the CQL drivers are no longer bundled with NB5. Instead,
when you specify either `cql` or `cqld4`, the version 4 drivers is used.
See the help for `cqld4` for more details.

View File

@ -26,7 +26,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider; import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.config.params.NBParams; import io.nosqlbench.nb.api.config.params.NBParams;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;

View File

@ -19,7 +19,7 @@ package io.nosqlbench.adapter.diag;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "diag") @Service(value = DriverAdapterLoader.class, selector = "diag")

View File

@ -22,7 +22,7 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.config.standard.NBReconfigurable; import io.nosqlbench.nb.api.config.standard.NBReconfigurable;
import io.nosqlbench.nb.api.components.NBParentComponentInjection; import io.nosqlbench.nb.api.components.core.NBParentComponentInjection;
import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter; import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
import io.nosqlbench.nb.annotations.ServiceSelector; import io.nosqlbench.nb.annotations.ServiceSelector;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.adapter.diag.optasks;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.Map; import java.util.Map;

View File

@ -19,7 +19,7 @@ package io.nosqlbench.adapter.diag.optasks;
import io.nosqlbench.nb.api.config.standard.NBConfigurable; import io.nosqlbench.nb.api.config.standard.NBConfigurable;
import io.nosqlbench.nb.api.config.standard.NBReconfigurable; import io.nosqlbench.nb.api.config.standard.NBReconfigurable;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.components.NBParentComponentInjection; import io.nosqlbench.nb.api.components.core.NBParentComponentInjection;
import java.util.Map; import java.util.Map;
import java.util.function.BiFunction; import java.util.function.BiFunction;

View File

@ -22,7 +22,7 @@ import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.config.standard.Param; import io.nosqlbench.nb.api.config.standard.Param;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBParentComponentInjection; import io.nosqlbench.nb.api.components.core.NBParentComponentInjection;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.virtdata.api.bindings.VirtDataConversions; import io.nosqlbench.virtdata.api.bindings.VirtDataConversions;
import io.nosqlbench.virtdata.core.bindings.DataMapper; import io.nosqlbench.virtdata.core.bindings.DataMapper;

View File

@ -19,7 +19,7 @@ package io.nosqlbench.adapter.diag.optasks;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.config.standard.TestComponent; import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import org.assertj.core.data.Offset; import org.assertj.core.data.Offset;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -22,7 +22,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Maturity; import io.nosqlbench.nb.annotations.Maturity;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.dynamodb;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "dynamodb") @Service(value = DriverAdapterLoader.class, selector = "dynamodb")

View File

@ -57,6 +57,12 @@
<groupId>org.openapitools</groupId> <groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId> <artifactId>openapi-generator</artifactId>
<version>7.1.0</version> <version>7.1.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.swagger.parser.v3</groupId> <groupId>io.swagger.parser.v3</groupId>

View File

@ -27,7 +27,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.http;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "http") @Service(value = DriverAdapterLoader.class, selector = "http")

View File

@ -19,7 +19,7 @@ package io.nosqlbench.adapter.http.core;
import com.codahale.metrics.Histogram; import com.codahale.metrics.Histogram;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
public class HttpMetrics implements NBLabeledElement { public class HttpMetrics implements NBLabeledElement {
private final NBComponent parent; private final NBComponent parent;

View File

@ -22,7 +22,7 @@ import io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.config.standard.Param; import io.nosqlbench.nb.api.config.standard.Param;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -24,7 +24,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -21,7 +21,7 @@ package io.nosqlbench.adapter.jdbc.utils;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.adapter.jdbc.JDBCDriverAdapter; import io.nosqlbench.adapter.jdbc.JDBCDriverAdapter;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "jdbc") @Service(value = DriverAdapterLoader.class, selector = "jdbc")

View File

@ -24,7 +24,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.kafka;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "kafka") @Service(value = DriverAdapterLoader.class, selector = "kafka")

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.mongodb.core;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "mongodb") @Service(value = DriverAdapterLoader.class, selector = "mongodb")

View File

@ -22,7 +22,7 @@ import com.mongodb.ServerApi;
import com.mongodb.ServerApiVersion; import com.mongodb.ServerApiVersion;
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClients;
import io.nosqlbench.nb.api.components.NBNamedElement; import io.nosqlbench.nb.api.components.core.NBNamedElement;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
import io.nosqlbench.nb.api.config.standard.ConfigModel; import io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;

View File

@ -23,7 +23,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op; import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import java.util.function.Function; import java.util.function.Function;

View File

@ -24,7 +24,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import java.util.function.Function; import java.util.function.Function;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.pinecone;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "pinecone") @Service(value = DriverAdapterLoader.class, selector = "pinecone")

View File

@ -16,8 +16,8 @@
package io.nosqlbench.engine.extensions.vectormath; package io.nosqlbench.engine.extensions.vectormath;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.pinecone.proto.QueryResponse; import io.pinecone.proto.QueryResponse;
import io.pinecone.proto.ScoredVector; import io.pinecone.proto.ScoredVector;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.vectormath; package io.nosqlbench.engine.extensions.vectormath;
import io.nosqlbench.nb.api.extensions.ScriptingExtensionPluginInfo; import io.nosqlbench.nb.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -19,7 +19,7 @@ package io.nosqlbench.engine.extensions.vectormath;
import com.google.protobuf.Struct; import com.google.protobuf.Struct;
import com.google.protobuf.Value; import com.google.protobuf.Value;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.pinecone.proto.QueryResponse; import io.pinecone.proto.QueryResponse;
import io.pinecone.proto.ScoredVector; import io.pinecone.proto.ScoredVector;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -22,7 +22,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.pulsar;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "pulsar") @Service(value = DriverAdapterLoader.class, selector = "pulsar")

View File

@ -24,7 +24,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.s4j;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "s4j") @Service(value = DriverAdapterLoader.class, selector = "s4j")

View File

@ -25,7 +25,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider; import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.config.standard.ConfigModel; import io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfigModel;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.stdout;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "stdout") @Service(value = DriverAdapterLoader.class, selector = "stdout")

View File

@ -28,7 +28,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider; import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.tcpclient;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "tcpclient") @Service(value = DriverAdapterLoader.class, selector = "tcpclient")

View File

@ -27,7 +27,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache;
import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider; import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -20,7 +20,7 @@ package io.nosqlbench.adapter.tcpserver;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
@Service(value = DriverAdapterLoader.class, selector = "tcpserver") @Service(value = DriverAdapterLoader.class, selector = "tcpserver")

View File

@ -21,7 +21,7 @@ package io.nosqlbench.adapter.diag;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op; import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
public interface DriverAdapterLoader { public interface DriverAdapterLoader {
public <A extends Op,B> DriverAdapter<A,B> load(NBComponent parent, NBLabels childLabels); public <A extends Op,B> DriverAdapter<A,B> load(NBComponent parent, NBLabels childLabels);

View File

@ -17,6 +17,7 @@
package io.nosqlbench.adapters.api.activityconfig; package io.nosqlbench.adapters.api.activityconfig;
import com.amazonaws.util.StringInputStream; import com.amazonaws.util.StringInputStream;
import com.google.gson.GsonBuilder;
import io.nosqlbench.nb.api.nbio.Content; import io.nosqlbench.nb.api.nbio.Content;
import io.nosqlbench.nb.api.nbio.NBIO; import io.nosqlbench.nb.api.nbio.NBIO;
import io.nosqlbench.nb.api.errors.BasicError; import io.nosqlbench.nb.api.errors.BasicError;
@ -27,6 +28,8 @@ import io.nosqlbench.adapters.api.activityconfig.yaml.OpsDocList;
import io.nosqlbench.adapters.api.templating.StrInterpolator; import io.nosqlbench.adapters.api.templating.StrInterpolator;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.snakeyaml.engine.v2.api.Load;
import org.snakeyaml.engine.v2.api.LoadSettings;
import scala.Option; import scala.Option;
import sjsonnet.DefaultParseCache; import sjsonnet.DefaultParseCache;
import sjsonnet.SjsonnetMain; import sjsonnet.SjsonnetMain;
@ -146,4 +149,25 @@ public class OpsLoader {
return stdoutOutput; return stdoutOutput;
} }
// TODO These should not be exception based, use explicit pattern checks instead, or tap
// into the parsers in a non-exception way
public static boolean isJson(String workload) {
try {
new GsonBuilder().setPrettyPrinting().create().fromJson(workload, Map.class);
return true;
} catch (Exception e) {
return false;
}
}
// TODO These should not be exception based, use explicit pattern checks instead, or tap
// into the parsers in a non-exception way
public static boolean isYaml(String workload) {
try {
Object result = new Load(LoadSettings.builder().build()).loadFromString(workload);
return (result instanceof Map);
} catch (Exception e) {
return false;
}
}
} }

View File

@ -22,7 +22,7 @@ import java.util.*;
public class OpsOwner extends RawOpFields { public class OpsOwner extends RawOpFields {
private final static List<String> opsFieldNames = List.of("op","ops","operation","statement","statements"); private final static List<String> opsFieldNames = List.of("op","ops","operation","stmt","statement","statements");
private List<RawOpDef> rawOpDefs = new ArrayList<>(); private List<RawOpDef> rawOpDefs = new ArrayList<>();

View File

@ -16,6 +16,8 @@
package io.nosqlbench.adapters.api.activityconfig.rawyaml; package io.nosqlbench.adapters.api.activityconfig.rawyaml;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import io.nosqlbench.nb.api.nbio.Content; import io.nosqlbench.nb.api.nbio.Content;
import io.nosqlbench.nb.api.nbio.NBIO; import io.nosqlbench.nb.api.nbio.NBIO;
import io.nosqlbench.nb.api.errors.BasicError; import io.nosqlbench.nb.api.errors.BasicError;
@ -36,6 +38,11 @@ public class RawOpsLoader {
private final ArrayList<Function<String,String>> transformers = new ArrayList<>(); private final ArrayList<Function<String,String>> transformers = new ArrayList<>();
private static LoadSettings loadSettings = LoadSettings.builder().build();
private final Load yaml = new Load(loadSettings);
private final Gson gson = new GsonBuilder().setPrettyPrinting().create();
public RawOpsLoader(Function<String,String> transformer) { public RawOpsLoader(Function<String,String> transformer) {
addTransformer(transformer); addTransformer(transformer);
} }
@ -44,6 +51,15 @@ public class RawOpsLoader {
addTransformer(new StrInterpolator()); addTransformer(new StrInterpolator());
} }
public boolean isJson(String workload) {
try {
Object canLoad = gson.fromJson(workload, Object.class);
} catch (Exception e) {
return false;
}
return true;
}
private void addTransformer(Function<String, String> newTransformer) { private void addTransformer(Function<String, String> newTransformer) {
Collections.addAll(this.transformers, newTransformer); Collections.addAll(this.transformers, newTransformer);
} }
@ -79,8 +95,6 @@ public class RawOpsLoader {
} }
public RawOpsDocList parseYaml(String data) { public RawOpsDocList parseYaml(String data) {
LoadSettings loadSettings = LoadSettings.builder().build();
Load yaml = new Load(loadSettings);
Iterable<Object> objects = yaml.loadAllFromString(data); Iterable<Object> objects = yaml.loadAllFromString(data);
List<RawOpsDoc> newDocList = new ArrayList<>(); List<RawOpsDoc> newDocList = new ArrayList<>();

View File

@ -21,12 +21,11 @@ import groovy.lang.Binding;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op; import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.evalctx.*; import io.nosqlbench.adapters.api.evalctx.*;
import io.nosqlbench.adapters.api.evalctx.*;
import io.nosqlbench.adapters.api.metrics.ThreadLocalNamedTimers; import io.nosqlbench.adapters.api.metrics.ThreadLocalNamedTimers;
import io.nosqlbench.adapters.api.templating.ParsedOp; import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.errors.OpConfigError; import io.nosqlbench.nb.api.errors.OpConfigError;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.virtdata.core.templates.ParsedTemplateString; import io.nosqlbench.virtdata.core.templates.ParsedTemplateString;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -24,7 +24,7 @@ import io.nosqlbench.nb.api.docsapi.Docs;
import io.nosqlbench.nb.api.docsapi.DocsBinder; import io.nosqlbench.nb.api.docsapi.DocsBinder;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.spi.SimpleServiceLoader; import io.nosqlbench.nb.api.spi.SimpleServiceLoader;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Maturity; import io.nosqlbench.nb.annotations.Maturity;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;

View File

@ -21,8 +21,8 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.fieldmappers.FieldDestruc
import io.nosqlbench.adapters.api.templating.ParsedOp; import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.config.standard.*; import io.nosqlbench.nb.api.config.standard.*;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -176,7 +176,7 @@ public abstract class BaseDriverAdapter<R extends Op, S> extends NBBaseComponent
.add(Param.optional("instrument", Boolean.class)) .add(Param.optional("instrument", Boolean.class))
.add(Param.optional(List.of("workload", "yaml"), String.class, "location of workload yaml file")) .add(Param.optional(List.of("workload", "yaml"), String.class, "location of workload yaml file"))
.add(Param.optional("driver", String.class)) .add(Param.optional("driver", String.class))
.add(Param.defaultTo("dryrun", "none").setRegex("(op|jsonnet|none)")) .add(Param.defaultTo("dryrun", "none").setRegex("(op|jsonnet|emit|none)"))
.add(Param.optional("maxtries", Integer.class)) .add(Param.optional("maxtries", Integer.class))
.asReadOnly(); .asReadOnly();
} }

View File

@ -22,7 +22,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.nb.api.docsapi.Docs; import io.nosqlbench.nb.api.docsapi.Docs;
import io.nosqlbench.nb.api.docsapi.DocsBinder; import io.nosqlbench.nb.api.docsapi.DocsBinder;
import io.nosqlbench.adapters.api.templating.ParsedOp; import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Maturity; import io.nosqlbench.nb.annotations.Maturity;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;

View File

@ -0,0 +1,34 @@
/*
* 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.
* 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.adapters.api.activityimpl.uniform;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.CycleOp;
public class EmitterOp implements CycleOp<Object> {
private final CycleOp<?> cycleOp;
public EmitterOp(CycleOp<?> cycleOp) {
this.cycleOp = cycleOp;
}
@Override
public Object apply(long value) {
Object result = cycleOp.apply(value);
System.out.println("result from cycle " + value + ":\n"+result);
return result;
}
}

View File

@ -0,0 +1,38 @@
/*
* 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.
* 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.adapters.api.activityimpl.uniform;
import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.adapters.api.activityimpl.OpDispenser;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.CycleOp;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.templating.ParsedOp;
public class EmitterOpDispenserWrapper extends BaseOpDispenser<Op, Object> {
private final OpDispenser<? extends CycleOp<?>> realDispenser;
public EmitterOpDispenserWrapper(DriverAdapter<Op,Object> adapter, ParsedOp pop, OpDispenser<? extends CycleOp<?>> realDispenser) {
super(adapter, pop);
this.realDispenser = realDispenser;
}
@Override
public EmitterOp apply(long cycle) {
CycleOp<?> cycleOp = realDispenser.apply(cycle);
return new EmitterOp(cycleOp);
}
}

View File

@ -1,342 +0,0 @@
/*
* 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.
* 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.adapters.api.templating;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate;
import io.nosqlbench.nb.api.config.params.ParamsParser;
import io.nosqlbench.nb.api.errors.BasicError;
import io.nosqlbench.virtdata.core.bindings.BindingsTemplate;
import io.nosqlbench.virtdata.core.templates.ParsedTemplateString;
import io.nosqlbench.virtdata.core.templates.StringBindings;
import io.nosqlbench.virtdata.core.templates.StringBindingsTemplate;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import java.util.*;
import java.util.function.Function;
/**
* This is a general purpose template which uses a map of named parameters.
* The result is a template which is comprised of a map of names and values, which can
* be used to create a cycle-specific map of values that can describe a literal operation
* for some native driver. How this map is used is context dependent.
*
* Generally speaking, the properties in this map are taken as parameters or field values,
* or a command verb. How the keys in the resulting map are used to construct an operation
* for execution is entirely dependent on how a developer wants to map these fields to
* a native driver's API.
*
* A CommandTemplate can be crated directly, or from an OpTemplate. Additional map parsers
* may be provided when needed for specialized forms of syntax or variations which should also
* be supported. See the constructor docs for details on these variations.
*/
@Deprecated(forRemoval = true)
public class CommandTemplate {
private final static Logger logger = LogManager.getLogger(CommandTemplate.class);
private final String name;
private final Map<String, String> statics = new HashMap<>();
private final Map<String, StringBindings> dynamics = new HashMap<>();
transient private final int mapsize;
/**
* Create a CommandTemplate directly from an OpTemplate.
*
* In this form, if {@link OpTemplate#getOp()}
* is non-null, then it taken as a line-oriented value and parsed according to default {@link ParamsParser} behavior.
*
* Additionally, any op params provided are considered as entries to add to the command template's map.
*
* @param optpl An OpTemplate
*/
public CommandTemplate(OpTemplate optpl) {
this(optpl.getName(), optpl.getOp().toString(), optpl.getParamsAsValueType(String.class), optpl.getBindings(), List.of());
}
/**
* Create a CommandTemplate directly from an OpTemplate, as in {@link #CommandTemplate(OpTemplate)},
* with added support for parsing the oneline form with the provided parsers.
*
* In this form, if {@link OpTemplate#getOp()}
* is non-null, then it taken as a line-oriented value and parsed according to default {@link ParamsParser} behavior.
* However, the provided parsers (if any) are used first in order to match alternate forms of syntax.
*
* See {@link CommandTemplate#CommandTemplate(String, String, Map, Map, List)} for full details on the provided
* parsers.
*
* @param optpl An OpTemplate
* @param parsers A list of parser functions
*/
public CommandTemplate(OpTemplate optpl, List<Function<String, Map<String, String>>> parsers) {
this(optpl.getName(), optpl.getStmt().orElseThrow(), optpl.getParamsAsValueType(String.class), optpl.getBindings(), parsers);
}
/**
* Create a command template from a set of optional properties.
*
* <P>The parsers provided should honor these expectations:
* <UL>
* <LI>If the one-line format is not recognized, the parser should return null.</LI>
* <LI>If the one-line format is recognized, and the values provided are valid, then they should be
* returned as a {@link Map} of {@link String} to {@link String}.</LI>
* <LI>Otherwise the parser should throw an exception, signifying either an internal parser error or
* invalid data.</LI>
* </UL>
*
* If none of the provided parsers (if any) return a map of values for the one-line format, then the default
* behavior of {@link ParamsParser} is used.
* </P>
*
* @param name The name of the command template
* @param op An object version of the parameters to be parsed by {@link ParamsParser}
* @param params A set of named parameters and values in name:value form.
* @param bindings A set of named bindings in name:recipe form.
* @param optionalParsers A set of functions which, if provided, will be used to read the oneline form.
*/
public CommandTemplate(
String name,
String op,
Map<String, String> params,
Map<String, String> bindings,
List<Function<String, Map<String, String>>> optionalParsers
) {
this.name = name;
Map<String, String> cmd = new HashMap<>();
// Only parse and inject the one-line form if it is defined.
// The first parser to match and return a map will be the last one tried.
// If none of the supplemental parsers work, the default params parser is used
String oneline;
if (op instanceof CharSequence) {
oneline = op;
} else {
throw new BasicError("Unable to create a oneline version of the CommandTemplate with op type of " + op.getClass().getSimpleName());
}
if (oneline != null) {
List<Function<String, Map<String, String>>> parserlist = new ArrayList<>(optionalParsers);
parserlist.add(s -> ParamsParser.parse(s, false));
boolean didParse = false;
for (Function<String, Map<String, String>> parser : parserlist) {
Map<String, String> parsed = parser.apply(oneline);
if (parsed != null) {
logger.debug(() -> "parsed request: " + parsed);
cmd.putAll(parsed);
didParse = true;
break;
}
}
if (!didParse) {
throw new RuntimeException("A oneline form was provided for the command template, but none of the " +
"provided" +
" parsers were able to parse it, not even ParamsParser.parse(...)");
}
}
// Always add the named params, but warn if they overwrite any oneline named params
params.forEach((k, v) -> {
if (cmd.containsKey(k)) {
logger.warn("command property override: '" + k + "' superseded by param form with value '" + v + "'");
}
});
cmd.putAll(params);
cmd.forEach((param, value) -> {
ParsedTemplateString paramTemplate = new ParsedTemplateString(value, bindings);
if (paramTemplate.getBindPoints().size() > 0) {
BindingsTemplate paramBindings = new BindingsTemplate(paramTemplate.getBindPoints());
StringBindings paramStringBindings = new StringBindingsTemplate(value, paramBindings).resolve();
dynamics.put(param, paramStringBindings);
} else {
statics.put(param, value);
}
});
this.mapsize = statics.size() + dynamics.size();
}
/**
* Apply the provided binding functions to the command template, yielding a map with concrete values
* to be used by a native command.
*
* @param cycle The cycle value which will be used by the binding functions
* @return A map of specific values
*/
public Map<String, String> getCommand(long cycle) {
HashMap<String, String> map = new HashMap<>(mapsize);
map.putAll(statics);
dynamics.forEach((k, v) -> {
map.put(k, v.bind(cycle));
});
return map;
}
/**
* The name of the operation
*/
public String getName() {
return name;
}
/**
* True if the command template contains all static (non-binding) values.
*/
public boolean isStatic() {
return this.dynamics.size() == 0;
}
public boolean isStatic(String keyname) {
return this.statics.containsKey(keyname);
}
public boolean isStaticSet(String... keynames) {
for (String keyname : keynames) {
if (!isStatic(keyname)) {
return false;
}
}
return true;
}
public boolean isDynamicSet(String... keynames) {
for (String keyname : keynames) {
if (!isDynamic(keyname)) {
return false;
}
}
return true;
}
public boolean isDynamic(String keyname) {
return this.dynamics.containsKey(keyname);
}
public boolean containsKey(String keyname) {
return this.statics.containsKey(keyname) || this.dynamics.containsKey(keyname);
}
/**
* The set of key names known by this command template.
*/
public Set<String> getPropertyNames() {
return this.statics.keySet();
}
@Override
public String toString() {
return "CommandTemplate{" +
"name='" + name + '\'' +
", statics=" + statics +
", dynamics=" + dynamics +
'}';
}
public String getStatic(String staticVar) {
return statics.get(staticVar);
}
public String getDynamic(String dynamicVar, long input) {
return dynamics.get(dynamicVar).bind(input);
}
public String get(String var, long input) {
if (statics.containsKey(var)) {
return statics.get(var);
}
if (dynamics.containsKey(var)) {
return dynamics.get(var).bind(input);
}
return null;
}
public String getOr(String var, long input, String defaultVal) {
if (statics.containsKey(var)) {
return statics.get(var);
}
if (dynamics.containsKey(var)) {
return dynamics.get(var).bind(input);
}
return defaultVal;
}
public String getStaticOr(String staticVar, String defaultVal) {
if (statics.containsKey(staticVar)) {
return statics.get(staticVar);
}
return defaultVal;
}
public String getDynamicOr(String dynamicVar, long input, String defaultVal) {
if (dynamics.containsKey(dynamicVar)) {
return getDynamic(dynamicVar, input);
} else {
return defaultVal;
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CommandTemplate that = (CommandTemplate) o;
return Objects.equals(name, that.name) && Objects.equals(statics, that.statics) && Objects.equals(dynamics, that.dynamics);
}
@Override
public int hashCode() {
return Objects.hash(name, statics, dynamics);
}
public boolean containsAny(String... varNames) {
for (String varName : varNames) {
if (this.containsKey(varName)) {
return true;
}
}
return false;
}
public boolean isStaticOrUnsetSet(String... varnames) {
for (String varname : varnames) {
if (isDynamic(varname)) {
return false;
}
}
return true;
}
/**
* This should only be used to provide a view of a field definition, never for actual use in a payload.
* @param varname The field name which you want to explain
* @return A string representation of the field name
*/
public String getFieldDescription(String varname) {
if (this.isDynamic(varname)) {
return "dynamic: " + this.dynamics.get(varname).toString();
} else if (this.isStatic(varname)) {
return "static: " + this.getStatic(varname);
} else {
return "UNDEFINED";
}
}
}

View File

@ -24,8 +24,8 @@ import io.nosqlbench.nb.api.config.fieldreaders.StaticFieldReader;
import io.nosqlbench.nb.api.config.standard.NBConfigError; import io.nosqlbench.nb.api.config.standard.NBConfigError;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.errors.OpConfigError; import io.nosqlbench.nb.api.errors.OpConfigError;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.engine.api.templating.ObjectCache; import io.nosqlbench.engine.api.templating.ObjectCache;
import io.nosqlbench.engine.api.templating.ParsedTemplateMap; import io.nosqlbench.engine.api.templating.ParsedTemplateMap;
import io.nosqlbench.engine.api.templating.TypeAndTarget; import io.nosqlbench.engine.api.templating.TypeAndTarget;

View File

@ -25,7 +25,7 @@ import io.nosqlbench.adapters.api.activityconfig.yaml.OpsDocList;
import io.nosqlbench.nb.api.config.standard.ConfigModel; import io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration; import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.config.standard.Param; import io.nosqlbench.nb.api.config.standard.Param;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.List; import java.util.List;

View File

@ -38,7 +38,7 @@ To clarify the differences, here are some basic examples:
jmxOp.execute(); jmxOp.execute();
kafkaSequencer.get(cycle).write(cycle); kafkaSequencer.get(cycle).write(cycle);
mongoResultDoc = activity.getDatabase().runCommand(queryBson, rms.getReadPreference()); mongoResultDoc = activity.getDatabase().runCommand(queryBson, rms.getReadPreference());
WebDriverVerbs.execute(cycle, commandTemplate, context, dryrun); WebDriverVerbs.execute(cycle, cmdTemplate, context, dryrun);
ActivityType<A extends Activity> ActivityType<A extends Activity>

View File

@ -34,7 +34,7 @@ import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.logging.NBLogLevel; import io.nosqlbench.nb.api.logging.NBLogLevel;
import io.nosqlbench.nb.api.metadata.SessionNamer; import io.nosqlbench.nb.api.metadata.SessionNamer;
import io.nosqlbench.nb.api.metadata.SystemId; import io.nosqlbench.nb.api.metadata.SystemId;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogDumperUtility; import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogDumperUtility;
import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogImporterUtility; import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogImporterUtility;
import io.nosqlbench.engine.api.activityapi.input.InputType; import io.nosqlbench.engine.api.activityapi.input.InputType;
@ -42,7 +42,6 @@ import io.nosqlbench.engine.api.activityapi.output.OutputType;
import io.nosqlbench.engine.cli.NBCLIOptions.Mode; import io.nosqlbench.engine.cli.NBCLIOptions.Mode;
import io.nosqlbench.engine.core.annotation.Annotators; import io.nosqlbench.engine.core.annotation.Annotators;
import io.nosqlbench.engine.core.lifecycle.ExecutionResult; import io.nosqlbench.engine.core.lifecycle.ExecutionResult;
import io.nosqlbench.engine.core.clientload.ClientSystemMetricChecker;
import io.nosqlbench.engine.core.lifecycle.process.NBCLIErrorHandler; import io.nosqlbench.engine.core.lifecycle.process.NBCLIErrorHandler;
import io.nosqlbench.engine.core.lifecycle.activity.ActivityTypeLoader; import io.nosqlbench.engine.core.lifecycle.activity.ActivityTypeLoader;
import io.nosqlbench.engine.core.lifecycle.session.NBSession; import io.nosqlbench.engine.core.lifecycle.session.NBSession;
@ -273,6 +272,29 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
return NBCLI.EXIT_OK; return NBCLI.EXIT_OK;
} }
if (options.wantsToCatResource()) {
final String resourceToCat = options.wantsToCatResourceNamed();
NBCLI.logger.debug(() -> "user requests to cat " + resourceToCat);
Optional<Content<?>> tocat = NBIO.classpath()
.searchPrefixes("activities")
.searchPrefixes(options.wantsIncludes())
.pathname(resourceToCat).extensionSet(RawOpsLoader.YAML_EXTENSIONS).first();
if (tocat.isEmpty()) tocat = NBIO.classpath()
.searchPrefixes().searchPrefixes(options.wantsIncludes())
.searchPrefixes(options.wantsIncludes())
.pathname(resourceToCat).first();
final Content<?> data = tocat.orElseThrow(
() -> new BasicError("Unable to find " + resourceToCat +
" in classpath to cat out"));
System.out.println(data.get());
NBCLI.logger.info(() -> "Dumped internal resource '" + data.asPath() + "' to stdout");
return NBCLI.EXIT_OK;
}
if (options.wantsToCopyResource()) { if (options.wantsToCopyResource()) {
final String resourceToCopy = options.wantsToCopyResourceNamed(); final String resourceToCopy = options.wantsToCopyResourceNamed();
NBCLI.logger.debug(() -> "user requests to copy out " + resourceToCopy); NBCLI.logger.debug(() -> "user requests to copy out " + resourceToCopy);
@ -391,6 +413,12 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
), ),
sessionName sessionName
); );
// TODO: Decide whether this should be part of ctor consistency
Map.of(
"summary", options.getReportSummaryTo(),
"logsdir", options.getLogsDirectory().toString(),
"progress", options.getProgressSpec()
).forEach(session::setComponentProp);
options.wantsReportCsvTo().ifPresent(cfg -> { options.wantsReportCsvTo().ifPresent(cfg -> {
MetricInstanceFilter filter = new MetricInstanceFilter(); MetricInstanceFilter filter = new MetricInstanceFilter();
@ -417,7 +445,8 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
ExecutionResult sessionResult = session.apply(options.getCommands()); ExecutionResult sessionResult = session.apply(options.getCommands());
sessionResult.printSummary(System.out); // sessionResult.printSummary(System.out);
logger.info(sessionResult);
return sessionResult.getStatus().code; return sessionResult.getStatus().code;
} }

View File

@ -496,7 +496,7 @@ public class NBCLIArgsFile {
} }
String opt = iter.next(); String opt = iter.next();
if (!opt.startsWith("-") || reservedPredicate.test(opt)) { if (!opt.startsWith("-")) {
throw new RuntimeException("Arguments following the --pin option must not" + throw new RuntimeException("Arguments following the --pin option must not" +
" be commands like '" + opt + "'"); " be commands like '" + opt + "'");
} }

View File

@ -84,6 +84,7 @@ public class NBCLIOptions {
private static final String COMPILE_SCRIPT = "--compile-script"; private static final String COMPILE_SCRIPT = "--compile-script";
private static final String SCRIPT_FILE = "--script-file"; private static final String SCRIPT_FILE = "--script-file";
private static final String COPY = "--copy"; private static final String COPY = "--copy";
private static final String CAT = "--cat";
private static final String SHOW_STACKTRACES = "--show-stacktraces"; private static final String SHOW_STACKTRACES = "--show-stacktraces";
private static final String EXPERIMENTAL = "--experimental"; private static final String EXPERIMENTAL = "--experimental";
private static final String MATURITY = "--maturity"; private static final String MATURITY = "--maturity";
@ -199,6 +200,7 @@ public class NBCLIOptions {
private boolean wantsConsoleMetrics = true; private boolean wantsConsoleMetrics = true;
private String annotateLabelSpec = ""; private String annotateLabelSpec = "";
private String metricsLabelSpec = ""; private String metricsLabelSpec = "";
private String wantsToCatResource ="";
public boolean wantsLoggedMetrics() { public boolean wantsLoggedMetrics() {
return this.wantsConsoleMetrics; return this.wantsConsoleMetrics;
@ -264,6 +266,10 @@ public class NBCLIOptions {
return this.labels; return this.labels;
} }
public boolean wantsToCatResource() {
return this.wantsToCatResource!=null && !this.wantsToCatResource.isEmpty();
}
public enum Mode { public enum Mode {
ParseGlobalsOnly, ParseGlobalsOnly,
ParseAllOptions ParseAllOptions
@ -629,6 +635,10 @@ public class NBCLIOptions {
arglist.removeFirst(); arglist.removeFirst();
this.wantsToCopyWorkload = this.readWordOrThrow(arglist, "workload to copy"); this.wantsToCopyWorkload = this.readWordOrThrow(arglist, "workload to copy");
break; break;
case NBCLIOptions.CAT:
arglist.removeFirst();
this.wantsToCatResource = this.readWordOrThrow(arglist, "workload to cat");
break;
default: default:
nonincludes.addLast(arglist.removeFirst()); nonincludes.addLast(arglist.removeFirst());
} }
@ -887,6 +897,11 @@ public class NBCLIOptions {
return this.wantsToCopyWorkload; return this.wantsToCopyWorkload;
} }
public String wantsToCatResourceNamed() {
return this.wantsToCatResource;
}
public boolean wantsWorkloadsList() { public boolean wantsWorkloadsList() {
return this.wantsWorkloadsList; return this.wantsWorkloadsList;
} }

View File

@ -16,7 +16,7 @@
package io.nosqlbench.engine.api.activityapi.core; package io.nosqlbench.engine.api.activityapi.core;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap; import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressCapable; import io.nosqlbench.engine.api.activityapi.core.progress.ProgressCapable;
@ -64,9 +64,9 @@ public interface Activity extends Comparable<Activity>, ActivityDefObserver, Pro
*/ */
void closeAutoCloseables(); void closeAutoCloseables();
MotorDispenser getMotorDispenserDelegate(); MotorDispenser<?> getMotorDispenserDelegate();
void setMotorDispenserDelegate(MotorDispenser motorDispenser); void setMotorDispenserDelegate(MotorDispenser<?> motorDispenser);
InputDispenser getInputDispenserDelegate(); InputDispenser getInputDispenserDelegate();

View File

@ -16,7 +16,7 @@
package io.nosqlbench.engine.api.activityapi.core; package io.nosqlbench.engine.api.activityapi.core;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.activityapi.input.InputDispenser; import io.nosqlbench.engine.api.activityapi.input.InputDispenser;
import io.nosqlbench.engine.api.activityapi.output.OutputDispenser; import io.nosqlbench.engine.api.activityapi.output.OutputDispenser;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.activityapi.errorhandling; package io.nosqlbench.engine.api.activityapi.errorhandling;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics; import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionExpectedResultVerificationMetrics; import io.nosqlbench.engine.api.metrics.ExceptionExpectedResultVerificationMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics; import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics;

View File

@ -16,7 +16,7 @@
package io.nosqlbench.engine.api.activityapi.ratelimits; package io.nosqlbench.engine.api.activityapi.ratelimits;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRate; import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRate;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec; import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;

View File

@ -17,8 +17,8 @@
package io.nosqlbench.engine.api.activityapi.ratelimits.simrate; package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter; import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -16,8 +16,10 @@
package io.nosqlbench.engine.api.activityimpl; package io.nosqlbench.engine.api.activityimpl;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.adapters.api.activityimpl.uniform.EmitterOpDispenserWrapper;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.CycleOp;
import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange; import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.engine.api.activityapi.core.*; import io.nosqlbench.engine.api.activityapi.core.*;
import io.nosqlbench.engine.api.activityapi.core.progress.ActivityMetricProgressMeter; import io.nosqlbench.engine.api.activityapi.core.progress.ActivityMetricProgressMeter;
@ -32,7 +34,6 @@ import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.adapters.api.activityimpl.OpDispenser; import io.nosqlbench.adapters.api.activityimpl.OpDispenser;
import io.nosqlbench.adapters.api.activityimpl.OpMapper; import io.nosqlbench.adapters.api.activityimpl.OpMapper;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.errors.BasicError; import io.nosqlbench.nb.api.errors.BasicError;
import io.nosqlbench.nb.api.errors.OpConfigError; import io.nosqlbench.nb.api.errors.OpConfigError;
@ -51,19 +52,16 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DryRunOpDispenserWrapper; import io.nosqlbench.adapters.api.activityimpl.uniform.DryRunOpDispenserWrapper;
import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider; import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op; import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.templating.CommandTemplate;
import io.nosqlbench.adapters.api.templating.ParsedOp; import io.nosqlbench.adapters.api.templating.ParsedOp;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.io.InputStream; import java.io.InputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.lang.reflect.AnnotatedType;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors;
/** /**
* A default implementation of an Activity, suitable for building upon. * A default implementation of an Activity, suitable for building upon.
@ -73,7 +71,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
protected ActivityDef activityDef; protected ActivityDef activityDef;
private final List<AutoCloseable> closeables = new ArrayList<>(); private final List<AutoCloseable> closeables = new ArrayList<>();
private MotorDispenser motorDispenser; private MotorDispenser<?> motorDispenser;
private InputDispenser inputDispenser; private InputDispenser inputDispenser;
private ActionDispenser actionDispenser; private ActionDispenser actionDispenser;
private OutputDispenser markerDispenser; private OutputDispenser markerDispenser;
@ -92,26 +90,26 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
private final RunStateTally tally = new RunStateTally(); private final RunStateTally tally = new RunStateTally();
public SimpleActivity(NBComponent parent, ActivityDef activityDef) { public SimpleActivity(NBComponent parent, ActivityDef activityDef) {
super(parent,NBLabels.forKV("activity",activityDef.getAlias()).and(activityDef.auxLabels())); super(parent, NBLabels.forKV("activity", activityDef.getAlias()).and(activityDef.auxLabels()));
this.activityDef = activityDef; this.activityDef = activityDef;
if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) { if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) {
Optional<String> workloadOpt = activityDef.getParams().getOptionalString( Optional<String> workloadOpt = activityDef.getParams().getOptionalString(
"workload", "workload",
"yaml" "yaml"
); );
if (workloadOpt.isPresent()) { if (workloadOpt.isPresent()) {
activityDef.getParams().set("alias", workloadOpt.get()); activityDef.getParams().set("alias", workloadOpt.get());
} else { } else {
activityDef.getParams().set("alias", activityDef.getParams().set("alias",
activityDef.getActivityType().toUpperCase(Locale.ROOT) activityDef.getActivityType().toUpperCase(Locale.ROOT)
+ nameEnumerator); + nameEnumerator);
nameEnumerator++; nameEnumerator++;
} }
} }
} }
public SimpleActivity(NBComponent parent, String activityDefString) { public SimpleActivity(NBComponent parent, String activityDefString) {
this(parent,ActivityDef.parseActivityDef(activityDefString)); this(parent, ActivityDef.parseActivityDef(activityDefString));
} }
@Override @Override
@ -122,8 +120,8 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
public synchronized NBErrorHandler getErrorHandler() { public synchronized NBErrorHandler getErrorHandler() {
if (null == this.errorHandler) { if (null == this.errorHandler) {
errorHandler = new NBErrorHandler( errorHandler = new NBErrorHandler(
() -> activityDef.getParams().getOptionalString("errors").orElse("stop"), () -> activityDef.getParams().getOptionalString("errors").orElse("stop"),
() -> getExceptionMetrics()); this::getExceptionMetrics);
} }
return errorHandler; return errorHandler;
} }
@ -147,12 +145,12 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
} }
@Override @Override
public final MotorDispenser getMotorDispenserDelegate() { public final MotorDispenser<?> getMotorDispenserDelegate() {
return motorDispenser; return motorDispenser;
} }
@Override @Override
public final void setMotorDispenserDelegate(MotorDispenser motorDispenser) { public final void setMotorDispenserDelegate(MotorDispenser<?> motorDispenser) {
this.motorDispenser = motorDispenser; this.motorDispenser = motorDispenser;
} }
@ -202,7 +200,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
} }
public String toString() { public String toString() {
return (activityDef!=null ? activityDef.getAlias() : "unset_alias" ) + ':' + this.runState + ':' + this.tally ; return (activityDef != null ? activityDef.getAlias() : "unset_alias") + ':' + this.runState + ':' + this.tally;
} }
@Override @Override
@ -308,16 +306,17 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
public synchronized void initOrUpdateRateLimiters(ActivityDef activityDef) { public synchronized void initOrUpdateRateLimiters(ActivityDef activityDef) {
activityDef.getParams().getOptionalNamedParameter("striderate") activityDef.getParams().getOptionalNamedParameter("striderate")
.map(StrideRateSpec::new).ifPresent(sr -> this.onEvent(new ParamChange<>(sr))); .map(StrideRateSpec::new).ifPresent(sr -> this.onEvent(new ParamChange<>(sr)));
activityDef.getParams().getOptionalNamedParameter("cyclerate", "targetrate", "rate") activityDef.getParams().getOptionalNamedParameter("cyclerate", "targetrate", "rate")
.map(CycleRateSpec::new).ifPresent(sr -> this.onEvent(new ParamChange<>(sr))); .map(CycleRateSpec::new).ifPresent(sr -> this.onEvent(new ParamChange<>(sr)));
} }
public void createOrUpdateStrideLimiter(SimRateSpec spec) { public void createOrUpdateStrideLimiter(SimRateSpec spec) {
strideLimiter = RateLimiters.createOrUpdate(this, strideLimiter, spec); strideLimiter = RateLimiters.createOrUpdate(this, strideLimiter, spec);
} }
public void createOrUpdateCycleLimiter(SimRateSpec spec) { public void createOrUpdateCycleLimiter(SimRateSpec spec) {
cycleLimiter = RateLimiters.createOrUpdate(this, cycleLimiter, spec); cycleLimiter = RateLimiters.createOrUpdate(this, cycleLimiter, spec);
} }
@ -328,7 +327,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
* defaults when requested. * defaults when requested.
* *
* @param seq * @param seq
* - The {@link OpSequence} to derive the defaults from * - The {@link OpSequence} to derive the defaults from
*/ */
public synchronized void setDefaultsFromOpSequence(OpSequence<?> seq) { public synchronized void setDefaultsFromOpSequence(OpSequence<?> seq) {
Optional<String> strideOpt = getParams().getOptionalString("stride"); Optional<String> strideOpt = getParams().getOptionalString("stride");
@ -351,15 +350,15 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
} else { } else {
if (0 == activityDef.getCycleCount()) { if (0 == activityDef.getCycleCount()) {
throw new RuntimeException( throw new RuntimeException(
"You specified cycles, but the range specified means zero cycles: " + getParams().get("cycles") "You specified cycles, but the range specified means zero cycles: " + getParams().get("cycles")
); );
} }
long stride = getParams().getOptionalLong("stride").orElseThrow(); long stride = getParams().getOptionalLong("stride").orElseThrow();
long cycles = this.activityDef.getCycleCount(); long cycles = this.activityDef.getCycleCount();
if (cycles < stride) { if (cycles < stride) {
throw new RuntimeException( throw new RuntimeException(
"The specified cycles (" + cycles + ") are less than the stride (" + stride + "). This means there aren't enough cycles to cause a stride to be executed." + "The specified cycles (" + cycles + ") are less than the stride (" + stride + "). This means there aren't enough cycles to cause a stride to be executed." +
" If this was intended, then set stride low enough to allow it." " If this was intended, then set stride low enough to allow it."
); );
} }
} }
@ -369,7 +368,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
if (0 < stride && 0 != cycleCount % stride) { if (0 < stride && 0 != cycleCount % stride) {
logger.warn(() -> "The stride does not evenly divide cycles. Only full strides will be executed," + logger.warn(() -> "The stride does not evenly divide cycles. Only full strides will be executed," +
"leaving some cycles unused. (stride=" + stride + ", cycles=" + cycleCount + ')'); "leaving some cycles unused. (stride=" + stride + ", cycles=" + cycleCount + ')');
} }
Optional<String> threadSpec = activityDef.getParams().getOptionalString("threads"); Optional<String> threadSpec = activityDef.getParams().getOptionalString("threads");
@ -400,68 +399,42 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
if (activityDef.getThreads() > activityDef.getCycleCount()) { if (activityDef.getThreads() > activityDef.getCycleCount()) {
logger.warn(() -> "threads=" + activityDef.getThreads() + " and cycles=" + activityDef.getCycleSummary() logger.warn(() -> "threads=" + activityDef.getThreads() + " and cycles=" + activityDef.getCycleSummary()
+ ", you should have more cycles than threads."); + ", you should have more cycles than threads.");
} }
} else if (1000 < cycleCount) { } else if (1000 < cycleCount) {
logger.warn(() -> "For testing at scale, it is highly recommended that you " + logger.warn(() -> "For testing at scale, it is highly recommended that you " +
"set threads to a value higher than the default of 1." + "set threads to a value higher than the default of 1." +
" hint: you can use threads=auto for reasonable default, or" + " hint: you can use threads=auto for reasonable default, or" +
" consult the topic on threads with `help threads` for" + " consult the topic on threads with `help threads` for" +
" more information."); " more information.");
} }
if (0 < this.activityDef.getCycleCount() && 0 == seq.getOps().size()) { if (0 < this.activityDef.getCycleCount() && seq.getOps().isEmpty()) {
throw new BasicError("You have configured a zero-length sequence and non-zero cycles. Tt is not possible to continue with this activity."); throw new BasicError("You have configured a zero-length sequence and non-zero cycles. Tt is not possible to continue with this activity.");
} }
} }
/**
* Given a function that can create an op of type <O> from a CommandTemplate, generate
* an indexed sequence of ready to call operations.
* <p>
* This method works almost exactly like the ,
* except that it uses the {@link CommandTemplate} semantics, which are more general and allow
* for map-based specification of operations with bindings in each field.
* <p>
* It is recommended to use the CommandTemplate form
* than the
*
* @param <O>
* @param opinit
* @param strict
* @return
*/
protected <O extends Op> OpSequence<OpDispenser<? extends O>> createOpSequenceFromCommands(
Function<CommandTemplate, OpDispenser<O>> opinit,
boolean strict
) {
Function<OpTemplate, CommandTemplate> f = CommandTemplate::new;
Function<OpTemplate, OpDispenser<? extends O>> opTemplateOFunction = f.andThen(opinit);
return createOpSequence(opTemplateOFunction, strict, Optional.empty());
}
protected <O extends Op> OpSequence<OpDispenser<? extends O>> createOpSourceFromParsedOps( protected <O extends Op> OpSequence<OpDispenser<? extends O>> createOpSourceFromParsedOps(
Map<String, DriverAdapter> adapterCache, // Map<String, DriverAdapter<?,?>> adapterCache,
Map<String, OpMapper<Op>> mapperCache, // Map<String, OpMapper<? extends Op>> mapperCache,
List<DriverAdapter> adapters, List<DriverAdapter<?,?>> adapters,
List<ParsedOp> pops List<ParsedOp> pops
) { ) {
try { try {
List<Long> ratios = new ArrayList<>(pops.size()); List<Long> ratios = new ArrayList<>(pops.size());
for (int i = 0; i < pops.size(); i++) { for (ParsedOp pop : pops) {
ParsedOp pop = pops.get(i);
long ratio = pop.takeStaticConfigOr("ratio", 1); long ratio = pop.takeStaticConfigOr("ratio", 1);
ratios.add(ratio); ratios.add(ratio);
} }
SequencerType sequencerType = getParams() SequencerType sequencerType = getParams()
.getOptionalString("seq") .getOptionalString("seq")
.map(SequencerType::valueOf) .map(SequencerType::valueOf)
.orElse(SequencerType.bucket); .orElse(SequencerType.bucket);
SequencePlanner<OpDispenser<? extends O>> planner = new SequencePlanner<>(sequencerType); SequencePlanner<OpDispenser<? extends O>> planner = new SequencePlanner<>(sequencerType);
int dryrunCount = 0; int dryrunCount = 0;
@ -472,16 +445,21 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
logger.info(() -> "skipped mapping op '" + pop.getName() + '\''); logger.info(() -> "skipped mapping op '" + pop.getName() + '\'');
continue; continue;
} }
String dryrunSpec = pop.takeStaticConfigOr("dryrun", "none");
boolean dryrun = "op".equalsIgnoreCase(dryrunSpec);
DriverAdapter adapter = adapters.get(i); DriverAdapter<?,?> adapter = adapters.get(i);
OpMapper opMapper = adapter.getOpMapper(); OpMapper<? extends Op> opMapper = adapter.getOpMapper();
OpDispenser<? extends Op> dispenser = opMapper.apply(pop); OpDispenser<? extends Op> dispenser = opMapper.apply(pop);
if (dryrun) { String dryrunSpec = pop.takeStaticConfigOr("dryrun", "none");
dispenser = new DryRunOpDispenserWrapper(adapter, pop, dispenser); if ("op".equalsIgnoreCase(dryrunSpec)) {
dispenser = new DryRunOpDispenserWrapper((DriverAdapter<Op,Object>)adapter, pop, dispenser);
dryrunCount++; dryrunCount++;
} else if ("emit".equalsIgnoreCase(dryrunSpec)) {
dispenser = new EmitterOpDispenserWrapper(
(DriverAdapter<Op,Object>)adapter,
pop,
(OpDispenser<? extends CycleOp<?>>) dispenser
);
} }
// if (strict) { // if (strict) {
@ -502,27 +480,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
} }
protected List<OpTemplate> loadOpTemplates(DriverAdapter<?, ?> defaultDriverAdapter) {
protected <O extends Op> OpSequence<OpDispenser<? extends O>> createOpSourceFromCommands(
Function<ParsedOp, OpDispenser<? extends O>> opinit,
NBConfiguration cfg,
List<Function<Map<String, Object>, Map<String, Object>>> parsers,
boolean strict
) {
Function<OpTemplate, ParsedOp> f = t -> new ParsedOp(t, cfg, parsers, this);
Function<OpTemplate, OpDispenser<? extends O>> opTemplateOFunction = f.andThen(opinit);
return createOpSequence(opTemplateOFunction, strict, Optional.empty());
}
protected List<ParsedOp> loadParsedOps(NBConfiguration cfg, Optional<DriverAdapter> defaultAdapter) {
List<ParsedOp> parsedOps = loadOpTemplates(defaultAdapter).stream().map(
ot -> new ParsedOp(ot, cfg, List.of(), this)
).toList();
return parsedOps;
}
protected List<OpTemplate> loadOpTemplates(Optional<DriverAdapter> defaultDriverAdapter) {
String tagfilter = activityDef.getParams().getOptionalString("tags").orElse(""); String tagfilter = activityDef.getParams().getOptionalString("tags").orElse("");
@ -531,52 +489,51 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
List<OpTemplate> unfilteredOps = opsDocList.getOps(false); List<OpTemplate> unfilteredOps = opsDocList.getOps(false);
List<OpTemplate> filteredOps = opsDocList.getOps(tagfilter, true); List<OpTemplate> filteredOps = opsDocList.getOps(tagfilter, true);
if (0 == filteredOps.size()) { if (filteredOps.isEmpty()) {
// There were no ops, and it *wasn't* because they were all filtered out. // There were no ops, and it *wasn't* because they were all filtered out.
// In this case, let's try to synthesize the ops as long as at least a default driver was provided // In this case, let's try to synthesize the ops as long as at least a default driver was provided
// But if there were no ops, and there was no default driver provided, we can't continue // But if there were no ops, and there was no default driver provided, we can't continue
// There were no ops, and it was because they were all filtered out // There were no ops, and it was because they were all filtered out
if (0 < unfilteredOps.size()) { if (!unfilteredOps.isEmpty()) {
throw new BasicError("There were no active op templates with tag filter '" throw new BasicError("There were no active op templates with tag filter '"
+ tagfilter + "', since all " + unfilteredOps.size() + " were filtered out."); + tagfilter + "', since all " + unfilteredOps.size() + " were filtered out.");
} }
if (defaultDriverAdapter.isPresent() && defaultDriverAdapter.get() instanceof SyntheticOpTemplateProvider sotp) { if (defaultDriverAdapter instanceof SyntheticOpTemplateProvider sotp) {
filteredOps = sotp.getSyntheticOpTemplates(opsDocList, this.activityDef.getParams()); filteredOps = sotp.getSyntheticOpTemplates(opsDocList, this.activityDef.getParams());
Objects.requireNonNull(filteredOps); Objects.requireNonNull(filteredOps);
if (0 == filteredOps.size()) { if (filteredOps.isEmpty()) {
throw new BasicError("Attempted to create synthetic ops from driver '" + defaultDriverAdapter.get().getAdapterName() + '\'' + throw new BasicError("Attempted to create synthetic ops from driver '" + defaultDriverAdapter.getAdapterName() + '\'' +
" but no ops were created. You must provide either a workload or an op parameter. Activities require op templates."); " but no ops were created. You must provide either a workload or an op parameter. Activities require op templates.");
} }
} else { } else {
throw new BasicError(""" throw new BasicError("""
No op templates were provided. You must provide one of these activity parameters: No op templates were provided. You must provide one of these activity parameters:
1) workload=some.yaml 1) workload=some.yaml
2) op='inline template' 2) op='inline template'
3) driver=stdout (or any other drive that can synthesize ops)"""); 3) driver=stdout (or any other drive that can synthesize ops)""");
}
if (0 == filteredOps.size()) {
throw new BasicError("There were no active op templates with tag filter '" + tagfilter + '\'');
} }
} }
// if (filteredOps.isEmpty()) {
// throw new BasicError("There were no active op templates with tag filter '" + tagfilter + '\'');
// }
if (0 == filteredOps.size()) { // if (filteredOps.isEmpty()) {
throw new OpConfigError("No op templates found. You must provide either workload=... or op=..., or use " + // throw new OpConfigError("No op templates found. You must provide either workload=... or op=..., or use " +
"a default driver (driver=___). This includes " + // "a default driver (driver=___). This includes " +
ServiceLoader.load(DriverAdapter.class).stream() // ServiceLoader.load(DriverAdapter.class).stream()
.filter(p -> { // .filter(p -> {
AnnotatedType[] annotatedInterfaces = p.type().getAnnotatedInterfaces(); // AnnotatedType[] annotatedInterfaces = p.type().getAnnotatedInterfaces();
for (AnnotatedType ai : annotatedInterfaces) { // for (AnnotatedType ai : annotatedInterfaces) {
if (ai.getType().equals(SyntheticOpTemplateProvider.class)) { // if (ai.getType().equals(SyntheticOpTemplateProvider.class)) {
return true; // return true;
} // }
} // }
return false; // return false;
}) // })
.map(d -> d.get().getAdapterName()) // .map(d -> d.get().getAdapterName())
.collect(Collectors.joining(","))); // .collect(Collectors.joining(",")));
} // }
//
return filteredOps; return filteredOps;
} }
@ -598,30 +555,29 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
* </OL> * </OL>
* *
* @param <O> * @param <O>
* A holder for an executable operation for the native driver used by this activity. * A holder for an executable operation for the native driver used by this activity.
* @param opinit * @param opinit
* A function to map an OpTemplate to the executable operation form required by * A function to map an OpTemplate to the executable operation form required by
* the native driver for this activity. * the native driver for this activity.
* @param defaultAdapter * @param defaultAdapter The adapter which will be used for any op templates with no explicit adapter
* @return The sequence of operations as determined by filtering and ratios * @return The sequence of operations as determined by filtering and ratios
*/ */
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
protected <O> OpSequence<OpDispenser<? extends O>> createOpSequence(Function<OpTemplate, OpDispenser<? extends O>> opinit, boolean strict, Optional<DriverAdapter> defaultAdapter) { protected <O> OpSequence<OpDispenser<? extends O>> createOpSequence(Function<OpTemplate, OpDispenser<? extends O>> opinit, boolean strict, DriverAdapter<?, ?> defaultAdapter) {
var stmts = loadOpTemplates(defaultAdapter); var stmts = loadOpTemplates(defaultAdapter);
List<Long> ratios = new ArrayList<>(stmts.size()); List<Long> ratios = new ArrayList<>(stmts.size());
for (int i = 0; i < stmts.size(); i++) { for (OpTemplate opTemplate : stmts) {
OpTemplate opTemplate = stmts.get(i);
long ratio = opTemplate.removeParamOrDefault("ratio", 1); long ratio = opTemplate.removeParamOrDefault("ratio", 1);
ratios.add(ratio); ratios.add(ratio);
} }
SequencerType sequencerType = getParams() SequencerType sequencerType = getParams()
.getOptionalString("seq") .getOptionalString("seq")
.map(SequencerType::valueOf) .map(SequencerType::valueOf)
.orElse(SequencerType.bucket); .orElse(SequencerType.bucket);
SequencePlanner<OpDispenser<? extends O>> planner = new SequencePlanner<>(sequencerType); SequencePlanner<OpDispenser<? extends O>> planner = new SequencePlanner<>(sequencerType);
try { try {
@ -644,22 +600,38 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
protected OpsDocList loadStmtsDocList() { protected OpsDocList loadStmtsDocList() {
try { try {
Optional<String> stmt = activityDef.getParams().getOptionalString("op", "stmt", "statement"); String op = activityDef.getParams().getOptionalString("op").orElse(null);
Optional<String> op_yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload"); String stmt = activityDef.getParams().getOptionalString("stmt", "statement").orElse(null);
if (stmt.isPresent()) { String workload = activityDef.getParams().getOptionalString("workload").orElse(null);
String op = stmt.get();
workloadSource = "commandline:" + stmt.get(); if ((op != null ? 1 : 0) + (stmt != null ? 1 : 0) + (workload != null ? 1 : 0) > 1) {
if (op.startsWith("{") || op.startsWith("[")) { throw new OpConfigError("Only op, statement, or workload may be provided, not more than one.");
return OpsLoader.loadString(stmt.get(), OpTemplateFormat.json, activityDef.getParams(), null);
} else {
return OpsLoader.loadString(stmt.get(), OpTemplateFormat.inline, activityDef.getParams(), null);
}
}
if (op_yaml_loc.isPresent()) {
workloadSource = "yaml:" + op_yaml_loc.get();
return OpsLoader.loadPath(op_yaml_loc.get(), activityDef.getParams(), "activities");
} }
if (workload != null && OpsLoader.isJson(workload)) {
workloadSource = "commandline: (workload/json):" + workload;
return OpsLoader.loadString(workload, OpTemplateFormat.json, activityDef.getParams(), null);
} else if (workload != null && OpsLoader.isYaml(workload)) {
workloadSource = "commandline: (workload/yaml):" + workload;
return OpsLoader.loadString(workload, OpTemplateFormat.yaml, activityDef.getParams(), null);
} else if (workload != null) {
return OpsLoader.loadPath(workload, activityDef.getParams(), "activities");
}
if (stmt != null) {
workloadSource = "commandline: (stmt/inline): '" + stmt + "'";
return OpsLoader.loadString(stmt, OpTemplateFormat.inline, activityDef.getParams(), null);
}
if (op != null && OpsLoader.isJson(op)) {
workloadSource = "commandline: (op/json): '" + op + "'";
return OpsLoader.loadString(op, OpTemplateFormat.json, activityDef.getParams(), null);
}
else if (op != null) {
workloadSource = "commandline: (op/inline): '" + op + "'";
return OpsLoader.loadString(op, OpTemplateFormat.inline, activityDef.getParams(), null);
}
return OpsDocList.none(); return OpsDocList.none();
} catch (Exception e) { } catch (Exception e) {

View File

@ -18,8 +18,8 @@ package io.nosqlbench.engine.api.activityimpl.input;
import com.codahale.metrics.Gauge; import com.codahale.metrics.Gauge;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.engine.activityimpl.CyclesSpec; import io.nosqlbench.nb.api.engine.activityimpl.CyclesSpec;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver; import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver;
import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegment; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegment;
import io.nosqlbench.engine.api.activityapi.input.Input; import io.nosqlbench.engine.api.activityapi.input.Input;

View File

@ -16,7 +16,6 @@
package io.nosqlbench.engine.api.activityimpl.uniform; package io.nosqlbench.engine.api.activityimpl.uniform;
import com.codahale.metrics.Gauge;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.adapters.api.activityconfig.OpsLoader; import io.nosqlbench.adapters.api.activityconfig.OpsLoader;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate; import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate;
@ -28,7 +27,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTem
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op; import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.templating.ParsedOp; import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.lifecycle.Shutdownable; import io.nosqlbench.nb.api.lifecycle.Shutdownable;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.config.standard.*; import io.nosqlbench.nb.api.config.standard.*;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.errors.BasicError; import io.nosqlbench.nb.api.errors.BasicError;
@ -59,21 +58,15 @@ import java.util.concurrent.ConcurrentHashMap;
*/ */
public class StandardActivity<R extends Op, S> extends SimpleActivity implements SyntheticOpTemplateProvider, ActivityDefObserver { public class StandardActivity<R extends Op, S> extends SimpleActivity implements SyntheticOpTemplateProvider, ActivityDefObserver {
private static final Logger logger = LogManager.getLogger("ACTIVITY"); private static final Logger logger = LogManager.getLogger("ACTIVITY");
private final OpSequence<OpDispenser<? extends Op>> sequence; private final OpSequence<OpDispenser<? extends Op>> sequence;
private final NBConfigModel yamlmodel; private final ConcurrentHashMap<String, DriverAdapter<?,?>> adapters = new ConcurrentHashMap<>();
private final ConcurrentHashMap<String, DriverAdapter> adapters = new ConcurrentHashMap<>();
private final ConcurrentHashMap<String, OpMapper<Op>> mappers = new ConcurrentHashMap<>();
private final Gauge<Double> pendingOpsGauge;
private final Gauge<Double> activeOpsGauge;
private final Gauge<Double> completeOpsGauge;
public StandardActivity(NBComponent parent, ActivityDef activityDef) { public StandardActivity(NBComponent parent, ActivityDef activityDef) {
super(parent,activityDef); super(parent,activityDef);
OpsDocList workload; OpsDocList workload;
Optional<String> yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload"); Optional<String> yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload");
NBConfigModel yamlmodel;
if (yaml_loc.isPresent()) { if (yaml_loc.isPresent()) {
Map<String, Object> disposable = new LinkedHashMap<>(activityDef.getParams()); Map<String, Object> disposable = new LinkedHashMap<>(activityDef.getParams());
workload = OpsLoader.loadPath(yaml_loc.get(), disposable, "activities"); workload = OpsLoader.loadPath(yaml_loc.get(), disposable, "activities");
@ -83,7 +76,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
} }
Optional<String> defaultDriverName = activityDef.getParams().getOptionalString("driver"); Optional<String> defaultDriverName = activityDef.getParams().getOptionalString("driver");
Optional<DriverAdapter> defaultAdapter = activityDef.getParams().getOptionalString("driver") Optional<DriverAdapter<?,?>> defaultAdapter = activityDef.getParams().getOptionalString("driver")
.flatMap(name -> ServiceSelector.of(name,ServiceLoader.load(DriverAdapterLoader.class)).get()) .flatMap(name -> ServiceSelector.of(name,ServiceLoader.load(DriverAdapterLoader.class)).get())
.map(l -> l.load(this,NBLabels.forKV())); .map(l -> l.load(this,NBLabels.forKV()));
@ -92,14 +85,15 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
} }
// HERE, op templates are loaded before drivers are loaded // HERE, op templates are loaded before drivers are loaded
List<OpTemplate> opTemplates = loadOpTemplates(defaultAdapter); List<OpTemplate> opTemplates = loadOpTemplates(defaultAdapter.orElse(null));
List<ParsedOp> pops = new ArrayList<>(); List<ParsedOp> pops = new ArrayList<>();
List<DriverAdapter> adapterlist = new ArrayList<>(); List<DriverAdapter<?,?>> adapterlist = new ArrayList<>();
NBConfigModel supersetConfig = ConfigModel.of(StandardActivity.class).add(yamlmodel); NBConfigModel supersetConfig = ConfigModel.of(StandardActivity.class).add(yamlmodel);
Optional<String> defaultDriverOption = activityDef.getParams().getOptionalString("driver"); Optional<String> defaultDriverOption = activityDef.getParams().getOptionalString("driver");
ConcurrentHashMap<String, OpMapper<? extends Op>> mappers = new ConcurrentHashMap<>();
for (OpTemplate ot : opTemplates) { for (OpTemplate ot : opTemplates) {
// ParsedOp incompleteOpDef = new ParsedOp(ot, NBConfiguration.empty(), List.of(), this); // ParsedOp incompleteOpDef = new ParsedOp(ot, NBConfiguration.empty(), List.of(), this);
String driverName = ot.getOptionalStringParam("driver", String.class) String driverName = ot.getOptionalStringParam("driver", String.class)
@ -116,7 +110,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
// HERE // HERE
if (!adapters.containsKey(driverName)) { if (!adapters.containsKey(driverName)) {
DriverAdapter adapter = Optional.of(driverName) DriverAdapter<?,?> adapter = Optional.of(driverName)
.flatMap(name -> ServiceSelector.of(name,ServiceLoader.load(DriverAdapterLoader.class)).get()) .flatMap(name -> ServiceSelector.of(name,ServiceLoader.load(DriverAdapterLoader.class)).get())
.map(l -> l.load(this,NBLabels.forKV())).orElseThrow(); .map(l -> l.load(this,NBLabels.forKV())).orElseThrow();
@ -137,7 +131,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
supersetConfig.assertValidConfig(activityDef.getParams().getStringStringMap()); supersetConfig.assertValidConfig(activityDef.getParams().getStringStringMap());
DriverAdapter adapter = adapters.get(driverName); DriverAdapter<?,?> adapter = adapters.get(driverName);
adapterlist.add(adapter); adapterlist.add(adapter);
ParsedOp pop = new ParsedOp(ot, adapter.getConfiguration(), List.of(adapter.getPreprocessor()), this); ParsedOp pop = new ParsedOp(ot, adapter.getConfiguration(), List.of(adapter.getPreprocessor()), this);
Optional<String> discard = pop.takeOptionalStaticValue("driver", String.class); Optional<String> discard = pop.takeOptionalStaticValue("driver", String.class);
@ -152,8 +146,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
} }
try { try {
boolean strict = activityDef.getParams().getOptionalBoolean("strict").orElse(false); sequence = createOpSourceFromParsedOps(adapterlist, pops);
sequence = createOpSourceFromParsedOps(adapters, mappers, adapterlist, pops);
} catch (Exception e) { } catch (Exception e) {
if (e instanceof OpConfigError) { if (e instanceof OpConfigError) {
throw e; throw e;
@ -161,12 +154,12 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
throw new OpConfigError("Error mapping workload template to operations: " + e.getMessage(), null, e); throw new OpConfigError("Error mapping workload template to operations: " + e.getMessage(), null, e);
} }
this.pendingOpsGauge = create().gauge( create().gauge(
"ops_pending",() -> this.getProgressMeter().getSummary().pending()); "ops_pending", () -> this.getProgressMeter().getSummary().pending());
this.activeOpsGauge = create().gauge( create().gauge(
"ops_active",() -> this.getProgressMeter().getSummary().current()); "ops_active", () -> this.getProgressMeter().getSummary().current());
this.completeOpsGauge = create().gauge( create().gauge(
"ops_complete",() -> this.getProgressMeter().getSummary().complete()); "ops_complete", () -> this.getProgressMeter().getSummary().complete());
} }
@Override @Override
@ -196,7 +189,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
public synchronized void onActivityDefUpdate(ActivityDef activityDef) { public synchronized void onActivityDefUpdate(ActivityDef activityDef) {
super.onActivityDefUpdate(activityDef); super.onActivityDefUpdate(activityDef);
for (DriverAdapter adapter : adapters.values()) { for (DriverAdapter<?,?> adapter : adapters.values()) {
if (adapter instanceof NBReconfigurable configurable) { if (adapter instanceof NBReconfigurable configurable) {
NBConfigModel cfgModel = configurable.getReconfigModel(); NBConfigModel cfgModel = configurable.getReconfigModel();
NBConfiguration cfg = cfgModel.matchConfig(activityDef.getParams()); NBConfiguration cfg = cfgModel.matchConfig(activityDef.getParams());
@ -227,7 +220,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
@Override @Override
public List<OpTemplate> getSyntheticOpTemplates(OpsDocList opsDocList, Map<String, Object> cfg) { public List<OpTemplate> getSyntheticOpTemplates(OpsDocList opsDocList, Map<String, Object> cfg) {
List<OpTemplate> opTemplates = new ArrayList<>(); List<OpTemplate> opTemplates = new ArrayList<>();
for (DriverAdapter adapter : adapters.values()) { for (DriverAdapter<?,?> adapter : adapters.values()) {
if (adapter instanceof SyntheticOpTemplateProvider sotp) { if (adapter instanceof SyntheticOpTemplateProvider sotp) {
List<OpTemplate> newTemplates = sotp.getSyntheticOpTemplates(opsDocList, cfg); List<OpTemplate> newTemplates = sotp.getSyntheticOpTemplates(opsDocList, cfg);
opTemplates.addAll(newTemplates); opTemplates.addAll(newTemplates);
@ -243,7 +236,7 @@ public class StandardActivity<R extends Op, S> extends SimpleActivity implements
*/ */
@Override @Override
public void shutdownActivity() { public void shutdownActivity() {
for (Map.Entry<String, DriverAdapter> entry : adapters.entrySet()) { for (Map.Entry<String, DriverAdapter<?,?>> entry : adapters.entrySet()) {
String adapterName = entry.getKey(); String adapterName = entry.getKey();
DriverAdapter<?, ?> adapter = entry.getValue(); DriverAdapter<?, ?> adapter = entry.getValue();
adapter.getSpaceCache().getElements().forEach((spaceName, space) -> { adapter.getSpaceCache().getElements().forEach((spaceName, space) -> {

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.activityimpl.uniform; package io.nosqlbench.engine.api.activityimpl.uniform;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityapi.core.ActionDispenser;
import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityapi.core.ActivityType;

View File

@ -103,7 +103,7 @@ public class StandardAction<A extends StandardActivity<R, ?>, R extends Op> impl
if (op instanceof RunnableOp) { if (op instanceof RunnableOp) {
((RunnableOp) op).run(); ((RunnableOp) op).run();
} else if (op instanceof CycleOp<?>) { } else if (op instanceof CycleOp<?>) {
result = ((CycleOp) op).apply(cycle); result = ((CycleOp<?>) op).apply(cycle);
} else if (op instanceof ChainingOp) { } else if (op instanceof ChainingOp) {
result = ((ChainingOp) op).apply(result); result = ((ChainingOp) op).apply(result);
} else { } else {

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.metrics; package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Counter; import com.codahale.metrics.Counter;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.metrics; package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Counter; import com.codahale.metrics.Counter;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
/** /**

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Histogram; import com.codahale.metrics.Histogram;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.metrics; package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Meter; import com.codahale.metrics.Meter;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Timer; import com.codahale.metrics.Timer;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.cmdstream; package io.nosqlbench.engine.cmdstream;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand; import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo; import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
import io.nosqlbench.nb.annotations.ServiceSelector; import io.nosqlbench.nb.annotations.ServiceSelector;

View File

@ -18,8 +18,8 @@ package io.nosqlbench.engine.core.clientload;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge; import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;

View File

@ -23,10 +23,10 @@ import com.codahale.metrics.MetricFilter;
import io.nosqlbench.nb.api.engine.metrics.instruments.*; import io.nosqlbench.nb.api.engine.metrics.instruments.*;
import io.nosqlbench.nb.api.engine.metrics.reporters.ConsoleReporter; import io.nosqlbench.nb.api.engine.metrics.reporters.ConsoleReporter;
import io.nosqlbench.nb.api.engine.metrics.reporters.Log4JMetricsReporter; import io.nosqlbench.nb.api.engine.metrics.reporters.Log4JMetricsReporter;
import io.nosqlbench.nb.api.components.NBCreators; import io.nosqlbench.nb.api.components.core.NBCreators;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.NBComponentTraversal; import io.nosqlbench.nb.api.components.core.NBComponentTraversal;
import io.nosqlbench.nb.api.components.NBFinders; import io.nosqlbench.nb.api.components.core.NBFinders;
import io.nosqlbench.engine.core.metrics.NBMetricsSummary; import io.nosqlbench.engine.core.metrics.NBMetricsSummary;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;

View File

@ -80,6 +80,10 @@ public class ActivitiesProgressIndicator implements Runnable {
@Override @Override
public void run() { public void run() {
report();
}
private void report() {
Collection<ProgressMeterDisplay> progressMeterDisplays = sc.getProgressMeters(); Collection<ProgressMeterDisplay> progressMeterDisplays = sc.getProgressMeters();
for (ProgressMeterDisplay meter : progressMeterDisplays) { for (ProgressMeterDisplay meter : progressMeterDisplays) {
@ -117,4 +121,7 @@ public class ActivitiesProgressIndicator implements Runnable {
return "ProgressIndicator/" + this.indicatorSpec; return "ProgressIndicator/" + this.indicatorSpec;
} }
public void finish() {
report();
}
} }

View File

@ -19,7 +19,7 @@ import com.codahale.metrics.Gauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge; import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBComponentExecutionScope; import io.nosqlbench.nb.api.components.core.NBComponentExecutionScope;
import io.nosqlbench.engine.api.activityapi.core.*; import io.nosqlbench.engine.api.activityapi.core.*;
import io.nosqlbench.engine.api.activityimpl.MotorState; import io.nosqlbench.engine.api.activityimpl.MotorState;
import io.nosqlbench.nb.api.annotations.Annotation; import io.nosqlbench.nb.api.annotations.Annotation;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.core.lifecycle.activity; package io.nosqlbench.engine.core.lifecycle.activity;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityimpl.uniform.StandardActivityType; import io.nosqlbench.engine.api.activityimpl.uniform.StandardActivityType;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.core.lifecycle.activity;
import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.nbio.Content; import io.nosqlbench.nb.api.nbio.Content;
import io.nosqlbench.nb.api.nbio.NBIO; import io.nosqlbench.nb.api.nbio.NBIO;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;

View File

@ -17,9 +17,9 @@ package io.nosqlbench.engine.core.lifecycle.scenario.container;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap; import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.NBComponentErrorHandler; import io.nosqlbench.nb.api.components.core.NBComponentErrorHandler;
import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressMeterDisplay; import io.nosqlbench.engine.api.activityapi.core.progress.ProgressMeterDisplay;
import io.nosqlbench.engine.core.lifecycle.ExecutionResult; import io.nosqlbench.engine.core.lifecycle.ExecutionResult;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.core.lifecycle.scenario.container;
*/ */
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.Reader; import java.io.Reader;

View File

@ -24,8 +24,8 @@ import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand
import io.nosqlbench.nb.api.annotations.Annotation; import io.nosqlbench.nb.api.annotations.Annotation;
import io.nosqlbench.nb.api.annotations.Layer; import io.nosqlbench.nb.api.annotations.Layer;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -95,7 +95,8 @@ public class NBBufferedContainer extends NBBaseComponent implements NBContainer
.build() .build()
); );
this.activitiesProgressIndicator = new ActivitiesProgressIndicator(this.controller, "console:10s"); String progress = getComponentProp("progress").orElse("console:10s");
this.activitiesProgressIndicator = new ActivitiesProgressIndicator(this.controller, progress);
} }
@ -175,6 +176,7 @@ public class NBBufferedContainer extends NBBaseComponent implements NBContainer
logger.debug("no object was provided to set the container result"); logger.debug("no object was provided to set the container result");
} }
activitiesProgressIndicator.finish();
return safeCmdResult; return safeCmdResult;
} }
@ -195,6 +197,6 @@ public class NBBufferedContainer extends NBBaseComponent implements NBContainer
final var retiringScenarioShutdownHook = this.containerShutdownHook; final var retiringScenarioShutdownHook = this.containerShutdownHook;
this.containerShutdownHook = null; this.containerShutdownHook = null;
retiringScenarioShutdownHook.run(); retiringScenarioShutdownHook.run();
this.logger.debug("removing container shutdown hook"); logger.debug("removing container shutdown hook");
} }
} }

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.core.lifecycle.scenario.container;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandResult; import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandResult;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand; import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.Reader; import java.io.Reader;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.core.lifecycle.scenario.container;
*/ */
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;

View File

@ -17,7 +17,7 @@
package io.nosqlbench.engine.core.lifecycle.scenario.execution; package io.nosqlbench.engine.core.lifecycle.scenario.execution;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer; import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -18,7 +18,7 @@ package io.nosqlbench.engine.core.lifecycle.scenario.execution;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer; import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams; import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -16,7 +16,7 @@
package io.nosqlbench.engine.core.lifecycle.scenario.execution; package io.nosqlbench.engine.core.lifecycle.scenario.execution;
import io.nosqlbench.nb.api.components.NBComponent; import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.core.lifecycle.ExecutionMetricsResult; import io.nosqlbench.engine.core.lifecycle.ExecutionMetricsResult;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@ -46,11 +46,11 @@ public class NBCommandAssembly {
for (Cmd cmd : cmds) { for (Cmd cmd : cmds) {
if (cmd.getArgs().containsKey("container")) { if (cmd.getArgs().containsKey("container")) {
String ctx = cmd.getArgs().remove("container").getValue(); String specificContainer = cmd.getArgs().remove("container").getValue();
String step = cmd.getArgs().containsKey("step") ? cmd.getArgs().remove("step").getValue() : "no-step"; String step = cmd.getArgs().containsKey("step") ? cmd.getArgs().remove("step").getValue() : "no-step";
tagged.add(cmd.forContainer(ctx, step)); tagged.add(cmd.forContainer(specificContainer, step));
} else if (cmd.getCmdType() == CmdType.container) { } else if (cmd.getCmdType() == CmdType.container) {
containerName = cmd.getArgValue("container"); containerName = cmd.getArgValue("name");
if (containerName.equals(Cmd.DEFAULT_TARGET_CONTEXT)) { if (containerName.equals(Cmd.DEFAULT_TARGET_CONTEXT)) {
logger.warn("You are explicitly setting the scenario name to " + Cmd.DEFAULT_TARGET_CONTEXT + "'. This is likely an error. " + logger.warn("You are explicitly setting the scenario name to " + Cmd.DEFAULT_TARGET_CONTEXT + "'. This is likely an error. " +
"This is the default scenario name, and if you are using different scenario names you should pick something that is different and specific."); "This is the default scenario name, and if you are using different scenario names you should pick something that is different and specific.");

View File

@ -16,12 +16,13 @@
package io.nosqlbench.engine.core.lifecycle.session; package io.nosqlbench.engine.core.lifecycle.session;
import io.nosqlbench.nb.api.components.core.NBComponentProps;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef; import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge; import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge; import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.NBBaseComponent; import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.decorators.NBTokenWords; import io.nosqlbench.nb.api.components.decorators.NBTokenWords;
import io.nosqlbench.engine.cmdstream.Cmd; import io.nosqlbench.engine.cmdstream.Cmd;
import io.nosqlbench.engine.core.clientload.*; import io.nosqlbench.engine.core.clientload.*;
@ -55,13 +56,6 @@ public class NBSession extends NBBaseComponent implements Function<List<Cmd>, Ex
ERROR ERROR
} }
private NBBufferedContainer getContext(String name) {
return containers.computeIfAbsent(
name,
n -> NBContainer.builder().name(n).build(this)
);
}
public NBSession( public NBSession(
NBLabeledElement labelContext, NBLabeledElement labelContext,
String sessionName String sessionName
@ -205,5 +199,12 @@ public class NBSession extends NBBaseComponent implements Function<List<Cmd>, Ex
clientMetricChecker.addRatioMetricToCheck(cpuUserGauge, cpuTotalGauge, 50.0, true); clientMetricChecker.addRatioMetricToCheck(cpuUserGauge, cpuTotalGauge, 50.0, true);
} }
private NBBufferedContainer getContext(String name) {
return containers.computeIfAbsent(
name,
n -> NBContainer.builder().name(n).build(this)
);
}
} }

Some files were not shown because too many files have changed in this diff Show More