from a CommandTemplate, generate
- * an indexed sequence of ready to call operations.
- *
- * 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.
- *
- * It is recommended to use the CommandTemplate form
- * than the
- *
- * @param
- * @param opinit
- * @param strict
- * @return
- */
- protected OpSequence> createOpSequenceFromCommands(
- Function> opinit,
- boolean strict
- ) {
- Function f = CommandTemplate::new;
- Function> opTemplateOFunction = f.andThen(opinit);
-
- return createOpSequence(opTemplateOFunction, strict, Optional.empty());
- }
protected OpSequence> createOpSourceFromParsedOps(
Map adapterCache,
@@ -502,27 +476,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
}
-
- protected OpSequence> createOpSourceFromCommands(
- Function> opinit,
- NBConfiguration cfg,
- List, Map>> parsers,
- boolean strict
- ) {
- Function f = t -> new ParsedOp(t, cfg, parsers, this);
- Function> opTemplateOFunction = f.andThen(opinit);
-
- return createOpSequence(opTemplateOFunction, strict, Optional.empty());
- }
-
- protected List loadParsedOps(NBConfiguration cfg, Optional defaultAdapter) {
- List parsedOps = loadOpTemplates(defaultAdapter).stream().map(
- ot -> new ParsedOp(ot, cfg, List.of(), this)
- ).toList();
- return parsedOps;
- }
-
- protected List loadOpTemplates(Optional defaultDriverAdapter) {
+ protected List loadOpTemplates(Optional> defaultDriverAdapter) {
String tagfilter = activityDef.getParams().getOptionalString("tags").orElse("");
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/api/templating/CommandTemplateTest.java b/engine-core/src/test/java/io/nosqlbench/engine/api/templating/CommandTemplateTest.java
deleted file mode 100644
index 433e4e84a..000000000
--- a/engine-core/src/test/java/io/nosqlbench/engine/api/templating/CommandTemplateTest.java
+++ /dev/null
@@ -1,63 +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.engine.api.templating;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import io.nosqlbench.adapters.api.activityconfig.OpsLoader;
-import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate;
-import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplateFormat;
-import io.nosqlbench.adapters.api.activityconfig.yaml.OpsDocList;
-import io.nosqlbench.adapters.api.templating.CommandTemplate;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.junit.jupiter.api.Test;
-
-import java.util.Map;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class CommandTemplateTest {
- private final static Logger logger = LogManager.getLogger(CommandTemplateTest.class);
-
- @Test
- public void testCommandTemplate() {
- OpsDocList opsDocs = OpsLoader.loadString("ops:\n" +
- " - s1: test1=foo test2=bar",
- OpTemplateFormat.yaml, Map.of(), null);
- OpTemplate optpl = opsDocs.getOps(true).get(0);
- CommandTemplate ct = new CommandTemplate(optpl);
- assertThat(ct.isStatic()).isTrue();
- }
-
- @Test
- public void testCommandTemplateFormat() {
- Gson gson = new GsonBuilder().setPrettyPrinting().create();
- OpsDocList stmtsDocs = OpsLoader.loadString("ops:\n" +
- " - s1: test1=foo test2={bar}\n" +
- " bindings:\n" +
- " bar: NumberNameToString();\n",
- OpTemplateFormat.yaml, Map.of(), null
- );
- OpTemplate optpl = stmtsDocs.getOps(true).get(0);
- CommandTemplate ct = new CommandTemplate(optpl);
- String format = gson.toJson(ct);
- logger.debug(format);
-
- }
-
-}
From 4e407573ce484f1bcd80fe645287cef0e2088233 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Fri, 8 Dec 2023 19:37:09 -0600
Subject: [PATCH 02/26] minor syntax improvements
---
.../engine/api/activityapi/core/Activity.java | 4 ++--
.../api/activityimpl/SimpleActivity.java | 18 ++++++++----------
2 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
index 1476e2e95..1c27f5fa4 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
@@ -64,9 +64,9 @@ public interface Activity extends Comparable, ActivityDefObserver, Pro
*/
void closeAutoCloseables();
- MotorDispenser getMotorDispenserDelegate();
+ MotorDispenser> getMotorDispenserDelegate();
- void setMotorDispenserDelegate(MotorDispenser motorDispenser);
+ void setMotorDispenserDelegate(MotorDispenser> motorDispenser);
InputDispenser getInputDispenserDelegate();
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
index ba87a242b..71e0e396f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
@@ -32,7 +32,6 @@ import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.adapters.api.activityimpl.OpDispenser;
import io.nosqlbench.adapters.api.activityimpl.OpMapper;
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.errors.BasicError;
import io.nosqlbench.nb.api.errors.OpConfigError;
@@ -146,12 +145,12 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
}
@Override
- public final MotorDispenser getMotorDispenserDelegate() {
+ public final MotorDispenser> getMotorDispenserDelegate() {
return motorDispenser;
}
@Override
- public final void setMotorDispenserDelegate(MotorDispenser motorDispenser) {
+ public final void setMotorDispenserDelegate(MotorDispenser> motorDispenser) {
this.motorDispenser = motorDispenser;
}
@@ -485,19 +484,19 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
List unfilteredOps = opsDocList.getOps(false);
List 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.
// 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
// 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 '"
+ tagfilter + "', since all " + unfilteredOps.size() + " were filtered out.");
}
if (defaultDriverAdapter.isPresent() && defaultDriverAdapter.get() instanceof SyntheticOpTemplateProvider sotp) {
filteredOps = sotp.getSyntheticOpTemplates(opsDocList, this.activityDef.getParams());
Objects.requireNonNull(filteredOps);
- if (0 == filteredOps.size()) {
+ if (filteredOps.isEmpty()) {
throw new BasicError("Attempted to create synthetic ops from driver '" + defaultDriverAdapter.get().getAdapterName() + '\'' +
" but no ops were created. You must provide either a workload or an op parameter. Activities require op templates.");
}
@@ -508,13 +507,12 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
2) op='inline template'
3) driver=stdout (or any other drive that can synthesize ops)""");
}
- if (0 == filteredOps.size()) {
-
+ 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 " +
"a default driver (driver=___). This includes " +
ServiceLoader.load(DriverAdapter.class).stream()
@@ -560,7 +558,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
* @return The sequence of operations as determined by filtering and ratios
*/
@Deprecated(forRemoval = true)
- protected OpSequence> createOpSequence(Function> opinit, boolean strict, Optional defaultAdapter) {
+ protected OpSequence> createOpSequence(Function> opinit, boolean strict, Optional> defaultAdapter) {
var stmts = loadOpTemplates(defaultAdapter);
From 6dab0cb88d9b7e1e7ea6128d80d790f7a28b03ac Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Fri, 8 Dec 2023 19:37:12 -0600
Subject: [PATCH 03/26] make op,stmt,workload more specific
---
.../api/activityimpl/SimpleActivity.java | 38 +++++++++++--------
1 file changed, 23 insertions(+), 15 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
index 71e0e396f..1b3408be8 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
@@ -596,23 +596,31 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
protected OpsDocList loadStmtsDocList() {
try {
- Optional stmt = activityDef.getParams().getOptionalString("op", "stmt", "statement");
- Optional op_yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload");
- if (stmt.isPresent()) {
- String op = stmt.get();
- workloadSource = "commandline:" + stmt.get();
- if (op.startsWith("{") || op.startsWith("[")) {
- 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");
+ String op = activityDef.getParams().getOptionalString("op").orElse(null);
+ String stmt = activityDef.getParams().getOptionalString("stmt", "statement").orElse(null);
+ String workload = activityDef.getParams().getOptionalString("workload").orElse(null);
+ if ((op!=null ? 1 : 0) + (stmt!=null ? 1 : 0) + (workload!=null ? 1 : 0) > 1) {
+ throw new OpConfigError("Only op, statement, or workload may be provided, not more than one.");
}
- return OpsDocList.none();
+ if (op!=null && op.matches("^\\{[^}]+:[^}]+}$(?s)(?m)")) {
+ workloadSource = "commandline: (op/json): '" + op + "'";
+ return OpsLoader.loadString(op, OpTemplateFormat.json, activityDef.getParams(), null);
+ } else if (op!=null && op.matches("^\\[[^]]+]$")) {
+ 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);
+ } else if (stmt!=null) {
+ workloadSource = "commandline: (stmt/inline): '" + stmt + "'";
+ return OpsLoader.loadString(stmt, OpTemplateFormat.inline, activityDef.getParams(), null);
+ } else if (workload!=null) {
+ workloadSource = "yaml:" + workload;
+ return OpsLoader.loadPath(workload, activityDef.getParams(), "activities");
+ } else {
+ return OpsDocList.none();
+ }
} catch (Exception e) {
throw new OpConfigError("Error loading op templates: " + e, workloadSource, e);
From 5ae22195ba9bc4be2df3ac0864d6b2cb36c2a0ef Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:16:44 -0600
Subject: [PATCH 04/26] package factoring
---
.../adapter/amqp/AmqpDriverAdapter.java | 2 +-
.../adapter/amqp/AmqpDriverAdapterLoader.java | 2 +-
.../adapter/cqld4/CqlDriverAdapterStub.java | 2 +-
.../adapter/cqld4/Cqld4DriverAdapter.java | 2 +-
.../cqld4/Cqld4DriverAdapterLoader.java | 2 +-
.../cqlgen/api/CGModelTransformer.java | 2 +-
.../cqlgen/model/CqlColumnBase.java | 2 +-
.../cqlgen/model/CqlKeyspaceDef.java | 2 +-
.../io/nosqlbench/cqlgen/model/CqlTable.java | 2 +-
.../io/nosqlbench/cqlgen/model/CqlType.java | 2 +-
.../extensions/vectormath/CqlUtils.java | 4 +-
.../vectormath/CqlUtilsPluginInfo.java | 2 +-
.../adapter/diag/DiagDriverAdapter.java | 2 +-
.../adapter/diag/DiagDriverAdapterLoader.java | 2 +-
.../adapter/diag/DiagOpDispenser.java | 2 +-
.../adapter/diag/optasks/BaseDiagTask.java | 2 +-
.../adapter/diag/optasks/DiagTask.java | 2 +-
.../adapter/diag/optasks/DiagTask_gauge.java | 2 +-
.../diag/optasks/DiagTask_gaugeTest.java | 2 +-
.../dynamodb/DynamoDBDriverAdapter.java | 2 +-
.../dynamodb/DynamoDBDriverAdapterLoader.java | 2 +-
.../adapter/http/HttpDriverAdapter.java | 2 +-
.../adapter/http/HttpDriverAdapterLoader.java | 2 +-
.../adapter/http/core/HttpMetrics.java | 2 +-
.../adapter/http/core/HttpSpace.java | 2 +-
.../adapter/jdbc/JDBCDriverAdapter.java | 2 +-
.../jdbc/utils/JDBCDriverAdapterLoader.java | 2 +-
.../adapter/kafka/KafkaDriverAdapter.java | 2 +-
.../kafka/KafkaDriverAdapterLoader.java | 2 +-
.../core/MongoDriverAdapterLoader.java | 2 +-
.../adapter/mongodb/core/MongoSpace.java | 2 +-
.../mongodb/core/MongodbDriverAdapter.java | 2 +-
.../pinecone/PineconeDriverAdapter.java | 2 +-
.../pinecone/PineconeDriverAdapterLoader.java | 2 +-
.../vectormath/PineconeScriptingUtils.java | 4 +-
.../PineconeScriptingUtilsPluginInfo.java | 2 +-
.../PineconeScriptingUtilsTest.java | 2 +-
.../adapter/pulsar/PulsarDriverAdapter.java | 2 +-
.../pulsar/PulsarDriverAdapterLoader.java | 2 +-
.../adapter/s4j/S4JDriverAdapter.java | 2 +-
.../adapter/s4j/S4JDriverAdapterLoader.java | 2 +-
.../adapter/stdout/StdoutDriverAdapter.java | 2 +-
.../stdout/StdoutDriverAdapterLoader.java | 2 +-
.../tcpclient/TcpClientDriverAdapter.java | 2 +-
.../TcpClientDriverAdapterLoader.java | 2 +-
.../tcpserver/TcpServerDriverAdapter.java | 2 +-
.../TcpServerDriverAdapterLoader.java | 2 +-
.../adapter/diag/DriverAdapterLoader.java | 2 +-
.../api/activityimpl/BaseOpDispenser.java | 3 +-
.../docs/BundledDriverAdapterDocs.java | 2 +-
.../uniform/BaseDriverAdapter.java | 4 +-
.../activityimpl/uniform/DriverAdapter.java | 2 +-
.../adapters/api/templating/ParsedOp.java | 4 +-
.../adapters/api/templating/ParsedOpTest.java | 2 +-
.../java/io/nosqlbench/engine/cli/NBCLI.java | 3 +-
.../engine/api/activityapi/core/Activity.java | 2 +-
.../api/activityapi/core/ActivityType.java | 2 +-
.../errorhandling/ErrorMetrics.java | 2 +-
.../activityapi/ratelimits/RateLimiters.java | 2 +-
.../ratelimits/simrate/SimRate.java | 4 +-
.../api/activityimpl/SimpleActivity.java | 4 +-
.../api/activityimpl/input/AtomicInput.java | 4 +-
.../uniform/StandardActivity.java | 2 +-
.../uniform/StandardActivityType.java | 2 +-
.../api/metrics/ExceptionCountMetrics.java | 2 +-
...tionExpectedResultVerificationMetrics.java | 2 +-
.../api/metrics/ExceptionHistoMetrics.java | 2 +-
.../api/metrics/ExceptionMeterMetrics.java | 2 +-
.../api/metrics/ExceptionTimerMetrics.java | 2 +-
.../engine/cmdstream/NBJavaCommandLoader.java | 2 +-
.../clientload/ClientSystemMetricChecker.java | 4 +-
.../lifecycle/ExecutionMetricsResult.java | 8 +-
.../lifecycle/activity/ActivityExecutor.java | 2 +-
.../lifecycle/activity/ActivityLoader.java | 2 +-
.../activity/ActivityTypeLoader.java | 2 +-
.../ContainerActivitiesController.java | 6 +-
.../container/ContainerBuilderFacets.java | 2 +-
.../container/NBBufferedContainer.java | 4 +-
.../scenario/container/NBContainer.java | 2 +-
.../container/NBScenarioContainerBuilder.java | 2 +-
.../scenario/execution/NBCommandInfo.java | 2 +-
.../execution/NBInvokableCommand.java | 2 +-
.../scenario/execution/ScenarioSummary.java | 2 +-
.../core/lifecycle/session/NBSession.java | 2 +-
.../api/metrics/HistoIntervalLoggerTest.java | 2 +-
.../engine/core/NBBaseCommandTest.java | 2 +-
.../engine/sandbox/SimRateSanityTest.java | 2 +-
.../engine/sandbox/SimRateTest.java | 2 +-
.../ComputeFunctionPluginInfo.java | 2 +-
.../computefunctions/ComputeFunctions.java | 4 +-
.../extensions/example/ExamplePlugin.java | 4 +-
.../extensions/example/ExamplePluginData.java | 2 +-
...lobalVarsScriptingExtensionPluginData.java | 2 +-
.../csvoutput/CsvOutputPluginWriterTest.java | 2 +-
.../nb/api/components/NBMetricsBuffer.java | 56 --------
.../{ => core}/NBBaseComponent.java | 37 +++++-
.../{ => core}/NBBaseComponentMetrics.java | 2 +-
.../components/{ => core}/NBComponent.java | 7 +-
.../{ => core}/NBComponentErrorHandler.java | 2 +-
.../{ => core}/NBComponentEvents.java | 2 +-
.../{ => core}/NBComponentExecutionScope.java | 2 +-
.../{ => core}/NBComponentFinder.java | 2 +-
.../{ => core}/NBComponentFormats.java | 2 +-
.../{ => core}/NBComponentLoader.java | 2 +-
.../{ => core}/NBComponentMetrics.java | 2 +-
.../{ => core}/NBComponentServices.java | 2 +-
.../{ => core}/NBComponentTraversal.java | 2 +-
.../api/components/{ => core}/NBCreators.java | 3 +-
.../api/components/{ => core}/NBFinders.java | 2 +-
.../api/components/core/NBMetricsBuffer.java | 122 ++++++++++++++++++
.../components/{ => core}/NBNamedElement.java | 2 +-
.../NBParentComponentInjection.java | 2 +-
.../{ => core}/PeriodicTaskComponent.java | 2 +-
.../events/ComponentOutOfScope.java | 2 +-
.../nb/api/config/standard/TestComponent.java | 4 +-
.../api/csvoutput/CsvOutputPluginWriter.java | 4 +-
.../api/engine/activityimpl/ActivityDef.java | 2 +-
.../nb/api/engine/metrics/CapabilityHook.java | 4 +-
.../engine/metrics/ClassicHistoListener.java | 2 +-
.../engine/metrics/ClassicTimerListener.java | 2 +-
.../engine/metrics/HistoIntervalLogger.java | 2 +-
.../api/engine/metrics/HistoStatsLogger.java | 2 +-
.../metrics/instruments/NBFunctionGauge.java | 2 +-
.../metrics/instruments/NBVariableGauge.java | 2 +-
.../metrics/reporters/ConsoleReporter.java | 6 +-
.../engine/metrics/reporters/CsvReporter.java | 4 +-
.../reporters/Log4JMetricsReporter.java | 8 +-
.../reporters/PromPushReporterComponent.java | 4 +-
.../metrics/wrappers/RelevancyMeasures.java | 2 +-
.../ScriptingExtensionPluginInfo.java | 2 +-
.../nosqlbench/nb/api/histo/HdrHistoLog.java | 4 +-
.../nosqlbench/nb/api/histo/HistoStats.java | 4 +-
.../io/nosqlbench/nb/api/http/HttpPlugin.java | 4 +-
.../api/loaders/BundledExtensionsLoader.java | 2 +-
.../optimizers/BobyqaOptimizerInstance.java | 4 +-
.../nb/api/s3uploader/S3Uploader.java | 4 +-
.../nb/api/shutdown/NBShutdownHook.java | 4 +-
.../nosqlbench/nb/api/tagging/TagFilter.java | 2 +-
.../AttachedMetricsSummaryReporterTest.java | 2 +-
.../NBBaseComponentMetricsTest.java | 4 +-
.../{ => core}/NBComponentFormatsTest.java | 6 +-
.../{ => core}/NBComponentLifecycleTest.java | 2 +-
.../NBComponentScaffoldingTest.java | 2 +-
.../{ => core}/NBComponentServicesTest.java | 2 +-
.../{ => core}/NBComponentTraversalTest.java | 6 +-
.../{ => core}/NBMetricsQueryTest.java | 2 +-
.../standard/TestComponentViewTest.java | 3 +-
.../injava/NB_cocycledelay_bursty.java | 2 +-
.../injavascript/ScriptExampleTests.java | 2 +-
.../core/script/MetricsIntegrationTest.java | 2 +-
150 files changed, 346 insertions(+), 246 deletions(-)
delete mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/components/NBMetricsBuffer.java
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBBaseComponent.java (86%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBBaseComponentMetrics.java (98%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponent.java (94%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentErrorHandler.java (93%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentEvents.java (94%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentExecutionScope.java (97%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentFinder.java (97%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentFormats.java (97%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentLoader.java (97%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentMetrics.java (97%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentServices.java (93%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentTraversal.java (98%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBCreators.java (99%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBFinders.java (99%)
create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBMetricsBuffer.java
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBNamedElement.java (93%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/NBParentComponentInjection.java (93%)
rename nb-api/src/main/java/io/nosqlbench/nb/api/components/{ => core}/PeriodicTaskComponent.java (98%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/AttachedMetricsSummaryReporterTest.java (98%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/NBBaseComponentMetricsTest.java (94%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentFormatsTest.java (90%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentLifecycleTest.java (97%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentScaffoldingTest.java (97%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentServicesTest.java (97%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/NBComponentTraversalTest.java (93%)
rename nb-api/src/test/java/io/nosqlbench/nb/api/components/{ => core}/NBMetricsQueryTest.java (97%)
diff --git a/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapter.java b/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapter.java
index db9f93c3f..cba516a2e 100644
--- a/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapter.java
+++ b/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapter.java
@@ -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.DriverSpaceCache;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapterLoader.java b/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapterLoader.java
index 0dd4aeca2..9570b863a 100644
--- a/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapterLoader.java
+++ b/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/AmqpDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.amqp;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "amqp")
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterStub.java b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterStub.java
index 8da279000..3d0dd3bdb 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterStub.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterStub.java
@@ -18,7 +18,7 @@ package io.nosqlbench.adapter.cqld4;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
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;
@Service(value = DriverAdapter.class, selector = "cql")
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java
index 7927cd73c..736e40ef5 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapter.java
@@ -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.flowtypes.Op;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapterLoader.java b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapterLoader.java
index 85342bb3c..96b93e291 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapterLoader.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/Cqld4DriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.cqld4;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "cqld4")
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/api/CGModelTransformer.java b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/api/CGModelTransformer.java
index 56493a469..705b7bd91 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/api/CGModelTransformer.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/api/CGModelTransformer.java
@@ -16,7 +16,7 @@
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 java.util.function.Function;
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlColumnBase.java b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlColumnBase.java
index 185df0177..f08dc4c68 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlColumnBase.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlColumnBase.java
@@ -17,7 +17,7 @@
package io.nosqlbench.cqlgen.model;
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;
public abstract class CqlColumnBase implements NBNamedElement, NBLabeledElement {
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlKeyspaceDef.java b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlKeyspaceDef.java
index 4e3ee7f1b..c0f14b926 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlKeyspaceDef.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlKeyspaceDef.java
@@ -18,7 +18,7 @@ package io.nosqlbench.cqlgen.model;
import com.datastax.oss.driver.internal.core.util.Strings;
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.cqlgen.core.CGKeyspaceStats;
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlTable.java b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlTable.java
index 8c2ecdd45..38d075f0d 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlTable.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlTable.java
@@ -17,7 +17,7 @@
package io.nosqlbench.cqlgen.model;
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.cqlgen.core.CGTableStats;
import io.nosqlbench.cqlgen.transformers.ComputedTableStats;
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlType.java b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlType.java
index 12866f4bc..fc56b3b5e 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlType.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlType.java
@@ -18,7 +18,7 @@ package io.nosqlbench.cqlgen.model;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
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.List;
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtils.java b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtils.java
index 838354549..ddcc692b4 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtils.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtils.java
@@ -17,8 +17,8 @@
package io.nosqlbench.engine.extensions.vectormath;
import com.datastax.oss.driver.api.core.cql.Row;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.List;
import java.util.Objects;
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtilsPluginInfo.java b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtilsPluginInfo.java
index 2663b808f..93fd7e6b1 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtilsPluginInfo.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtilsPluginInfo.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.vectormath;
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 org.apache.logging.log4j.Logger;
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapter.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapter.java
index 5003ef1fc..c22077ac7 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapter.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapter.java
@@ -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.decorators.SyntheticOpTemplateProvider;
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.api.config.params.NBParams;
import io.nosqlbench.nb.api.config.standard.NBConfigModel;
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapterLoader.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapterLoader.java
index e32c95ac4..b17258f14 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapterLoader.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagDriverAdapterLoader.java
@@ -19,7 +19,7 @@ package io.nosqlbench.adapter.diag;
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;
@Service(value = DriverAdapterLoader.class, selector = "diag")
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java
index e338c7f82..203604981 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java
@@ -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.NBConfiguration;
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.nb.annotations.ServiceSelector;
import org.apache.logging.log4j.LogManager;
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java
index c9933b7ef..cfc0f941a 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java
@@ -18,7 +18,7 @@ package io.nosqlbench.adapter.diag.optasks;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
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;
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java
index 9cb53b88e..e4719596b 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java
@@ -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.NBReconfigurable;
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.function.BiFunction;
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gauge.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gauge.java
index 9bde8b89f..16cf3c0bc 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gauge.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gauge.java
@@ -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.Param;
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.virtdata.api.bindings.VirtDataConversions;
import io.nosqlbench.virtdata.core.bindings.DataMapper;
diff --git a/adapter-diag/src/test/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gaugeTest.java b/adapter-diag/src/test/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gaugeTest.java
index ad55506ea..036752e16 100644
--- a/adapter-diag/src/test/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gaugeTest.java
+++ b/adapter-diag/src/test/java/io/nosqlbench/adapter/diag/optasks/DiagTask_gaugeTest.java
@@ -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.TestComponent;
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.junit.jupiter.api.Test;
diff --git a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapter.java b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapter.java
index 86e6d4a6a..0bd7802fe 100644
--- a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapter.java
+++ b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapter.java
@@ -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.DriverSpaceCache;
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.Service;
import io.nosqlbench.nb.api.config.standard.NBConfigModel;
diff --git a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapterLoader.java b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapterLoader.java
index f1feb993b..344846937 100644
--- a/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapterLoader.java
+++ b/adapter-dynamodb/src/main/java/io/nosqlbench/adapter/dynamodb/DynamoDBDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.dynamodb;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "dynamodb")
diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java
index 0a328e79f..b443117fa 100644
--- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java
+++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java
@@ -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.DriverSpaceCache;
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.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapterLoader.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapterLoader.java
index c4f783337..921e1e336 100644
--- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapterLoader.java
+++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.http;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "http")
diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java
index 3528c2562..7437bda6f 100644
--- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java
+++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java
@@ -19,7 +19,7 @@ package io.nosqlbench.adapter.http.core;
import com.codahale.metrics.Histogram;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
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 {
private final NBComponent parent;
diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java
index 2cdc8b542..63cffd03f 100644
--- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java
+++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java
@@ -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.NBConfiguration;
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.Logger;
diff --git a/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/JDBCDriverAdapter.java b/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/JDBCDriverAdapter.java
index 1f3cca832..cbf51f176 100644
--- a/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/JDBCDriverAdapter.java
+++ b/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/JDBCDriverAdapter.java
@@ -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.DriverSpaceCache;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/utils/JDBCDriverAdapterLoader.java b/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/utils/JDBCDriverAdapterLoader.java
index d36cb9614..1d3a7daa0 100644
--- a/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/utils/JDBCDriverAdapterLoader.java
+++ b/adapter-jdbc/src/main/java/io/nosqlbench/adapter/jdbc/utils/JDBCDriverAdapterLoader.java
@@ -21,7 +21,7 @@ package io.nosqlbench.adapter.jdbc.utils;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.adapter.jdbc.JDBCDriverAdapter;
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;
@Service(value = DriverAdapterLoader.class, selector = "jdbc")
diff --git a/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapter.java b/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapter.java
index d4bf488de..66afb8291 100644
--- a/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapter.java
+++ b/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapter.java
@@ -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.DriverSpaceCache;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapterLoader.java b/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapterLoader.java
index 2c4a7a23d..5b64c1e99 100644
--- a/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapterLoader.java
+++ b/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/KafkaDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.kafka;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "kafka")
diff --git a/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoDriverAdapterLoader.java b/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoDriverAdapterLoader.java
index 5856881fd..9cd914f1a 100644
--- a/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoDriverAdapterLoader.java
+++ b/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.mongodb.core;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "mongodb")
diff --git a/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoSpace.java b/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoSpace.java
index e19cfa1c1..2c66c76e9 100644
--- a/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoSpace.java
+++ b/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongoSpace.java
@@ -22,7 +22,7 @@ import com.mongodb.ServerApi;
import com.mongodb.ServerApiVersion;
import com.mongodb.client.MongoClient;
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 io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel;
diff --git a/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongodbDriverAdapter.java b/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongodbDriverAdapter.java
index f858973ed..71464108c 100644
--- a/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongodbDriverAdapter.java
+++ b/adapter-mongodb/src/main/java/io/nosqlbench/adapter/mongodb/core/MongodbDriverAdapter.java
@@ -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.flowtypes.Op;
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 java.util.function.Function;
diff --git a/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapter.java b/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapter.java
index 03f342f4f..ee8742839 100644
--- a/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapter.java
+++ b/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapter.java
@@ -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.DriverSpaceCache;
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 java.util.function.Function;
diff --git a/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapterLoader.java b/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapterLoader.java
index f81cb9c00..f6e29ebc0 100644
--- a/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapterLoader.java
+++ b/adapter-pinecone/src/main/java/io/nosqlbench/adapter/pinecone/PineconeDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.pinecone;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "pinecone")
diff --git a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtils.java b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtils.java
index bcce67df4..bfb224553 100644
--- a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtils.java
+++ b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtils.java
@@ -16,8 +16,8 @@
package io.nosqlbench.engine.extensions.vectormath;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import io.pinecone.proto.QueryResponse;
import io.pinecone.proto.ScoredVector;
diff --git a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsPluginInfo.java b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsPluginInfo.java
index 02420c96e..a5b4e4fbe 100644
--- a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsPluginInfo.java
+++ b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsPluginInfo.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.vectormath;
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 org.apache.logging.log4j.Logger;
diff --git a/adapter-pinecone/src/test/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsTest.java b/adapter-pinecone/src/test/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsTest.java
index fdfbe0812..201ad1af5 100644
--- a/adapter-pinecone/src/test/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsTest.java
+++ b/adapter-pinecone/src/test/java/io/nosqlbench/engine/extensions/vectormath/PineconeScriptingUtilsTest.java
@@ -19,7 +19,7 @@ package io.nosqlbench.engine.extensions.vectormath;
import com.google.protobuf.Struct;
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.ScoredVector;
import org.junit.jupiter.api.Test;
diff --git a/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapter.java b/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapter.java
index 84853df1b..15df97bd1 100644
--- a/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapter.java
+++ b/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapter.java
@@ -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.DriverSpaceCache;
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.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
diff --git a/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapterLoader.java b/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapterLoader.java
index 430942c3c..b12be9ead 100644
--- a/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapterLoader.java
+++ b/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/PulsarDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.pulsar;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "pulsar")
diff --git a/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapter.java b/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapter.java
index 823d3a5d1..f995bc21e 100644
--- a/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapter.java
+++ b/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapter.java
@@ -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.DriverSpaceCache;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapterLoader.java b/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapterLoader.java
index 174ec78fa..094b8ee95 100644
--- a/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapterLoader.java
+++ b/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/S4JDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.s4j;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "s4j")
diff --git a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java
index e5a39bb90..4f5180f05 100644
--- a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java
+++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java
@@ -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.decorators.SyntheticOpTemplateProvider;
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.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel;
diff --git a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapterLoader.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapterLoader.java
index cc46f00be..0b89f925e 100644
--- a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapterLoader.java
+++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.stdout;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "stdout")
diff --git a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapter.java b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapter.java
index 076fd8286..80d854041 100644
--- a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapter.java
+++ b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapter.java
@@ -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.decorators.SyntheticOpTemplateProvider;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapterLoader.java b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapterLoader.java
index 4ee66f215..f11a86234 100644
--- a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapterLoader.java
+++ b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpclient/TcpClientDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.tcpclient;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "tcpclient")
diff --git a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapter.java b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapter.java
index e02becf0f..f65d6c54e 100644
--- a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapter.java
+++ b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapter.java
@@ -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.decorators.SyntheticOpTemplateProvider;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapterLoader.java b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapterLoader.java
index e13b830dc..a71442789 100644
--- a/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapterLoader.java
+++ b/adapter-tcp/src/main/java/io/nosqlbench/adapter/tcpserver/TcpServerDriverAdapterLoader.java
@@ -20,7 +20,7 @@ package io.nosqlbench.adapter.tcpserver;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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;
@Service(value = DriverAdapterLoader.class, selector = "tcpserver")
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapter/diag/DriverAdapterLoader.java b/adapters-api/src/main/java/io/nosqlbench/adapter/diag/DriverAdapterLoader.java
index a609d0c34..f16dd88f8 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapter/diag/DriverAdapterLoader.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapter/diag/DriverAdapterLoader.java
@@ -21,7 +21,7 @@ package io.nosqlbench.adapter.diag;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
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 DriverAdapter load(NBComponent parent, NBLabels childLabels);
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
index 47c5ffb58..f514c240d 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
@@ -21,12 +21,11 @@ import groovy.lang.Binding;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.evalctx.*;
-import io.nosqlbench.adapters.api.evalctx.*;
import io.nosqlbench.adapters.api.metrics.ThreadLocalNamedTimers;
import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.labels.NBLabels;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/docs/BundledDriverAdapterDocs.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/docs/BundledDriverAdapterDocs.java
index 6165b4f0a..457e950cd 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/docs/BundledDriverAdapterDocs.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/docs/BundledDriverAdapterDocs.java
@@ -24,7 +24,7 @@ import io.nosqlbench.nb.api.docsapi.Docs;
import io.nosqlbench.nb.api.docsapi.DocsBinder;
import io.nosqlbench.nb.api.labels.NBLabels;
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.Service;
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java
index deaaed604..91a458bd0 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java
@@ -21,8 +21,8 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.fieldmappers.FieldDestruc
import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.nb.api.config.standard.*;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/DriverAdapter.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/DriverAdapter.java
index b5f5fee9c..0bd620bb3 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/DriverAdapter.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/DriverAdapter.java
@@ -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.DocsBinder;
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.Service;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java
index ebc5e3cb0..5f64c2c8b 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java
@@ -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.NBConfiguration;
import io.nosqlbench.nb.api.errors.OpConfigError;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.engine.api.templating.ObjectCache;
import io.nosqlbench.engine.api.templating.ParsedTemplateMap;
import io.nosqlbench.engine.api.templating.TypeAndTarget;
diff --git a/adapters-api/src/test/java/io/nosqlbench/adapters/api/templating/ParsedOpTest.java b/adapters-api/src/test/java/io/nosqlbench/adapters/api/templating/ParsedOpTest.java
index 65719e2d5..9bf906285 100644
--- a/adapters-api/src/test/java/io/nosqlbench/adapters/api/templating/ParsedOpTest.java
+++ b/adapters-api/src/test/java/io/nosqlbench/adapters/api/templating/ParsedOpTest.java
@@ -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.NBConfiguration;
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 java.util.List;
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
index 5ccfd08c7..395fda36e 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
@@ -34,7 +34,7 @@ import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.logging.NBLogLevel;
import io.nosqlbench.nb.api.metadata.SessionNamer;
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.CycleLogImporterUtility;
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.core.annotation.Annotators;
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.activity.ActivityTypeLoader;
import io.nosqlbench.engine.core.lifecycle.session.NBSession;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
index 1c27f5fa4..9dcd74d71 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
@@ -16,7 +16,7 @@
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.ParameterMap;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressCapable;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java
index 39256d4a0..a6fe93b6b 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java
@@ -16,7 +16,7 @@
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.engine.api.activityapi.input.InputDispenser;
import io.nosqlbench.engine.api.activityapi.output.OutputDispenser;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/ErrorMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/ErrorMetrics.java
index 5c68f679e..df6c4027f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/ErrorMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/ErrorMetrics.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.activityapi.errorhandling;
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.ExceptionExpectedResultVerificationMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java
index 86670a009..1a52e0990 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java
@@ -16,7 +16,7 @@
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.SimRateSpec;
import org.apache.logging.log4j.LogManager;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
index 031781f4b..646c2554c 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
@@ -17,8 +17,8 @@
package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
index 1b3408be8..95e2a983f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
@@ -16,8 +16,8 @@
package io.nosqlbench.engine.api.activityimpl;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+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.engine.api.activityapi.core.*;
import io.nosqlbench.engine.api.activityapi.core.progress.ActivityMetricProgressMeter;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
index 643cff61e..85db5bde1 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
@@ -18,8 +18,8 @@ package io.nosqlbench.engine.api.activityimpl.input;
import com.codahale.metrics.Gauge;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.engine.activityimpl.CyclesSpec;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver;
import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegment;
import io.nosqlbench.engine.api.activityapi.input.Input;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
index d34c84243..0616d534e 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
@@ -28,7 +28,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTem
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.templating.ParsedOp;
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.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.errors.BasicError;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivityType.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivityType.java
index 644421d9e..a3e03db0d 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivityType.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivityType.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.activityimpl.uniform;
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.engine.api.activityapi.core.ActionDispenser;
import io.nosqlbench.engine.api.activityapi.core.ActivityType;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java
index 7e591a674..c7cab5177 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.metrics;
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.List;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java
index e66f25d87..ccd8b212f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Counter;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
/**
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java
index a488942cb..4f60bf0c0 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java
@@ -18,7 +18,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Histogram;
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.List;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java
index 840eae18f..16186b5a1 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.api.metrics;
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.List;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java
index eb0935acb..3edcd751e 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java
@@ -18,7 +18,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Timer;
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.List;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/NBJavaCommandLoader.java b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/NBJavaCommandLoader.java
index af296d461..391c51766 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/NBJavaCommandLoader.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/NBJavaCommandLoader.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.cmdstream;
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.nb.annotations.ServiceSelector;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/clientload/ClientSystemMetricChecker.java b/engine-core/src/main/java/io/nosqlbench/engine/core/clientload/ClientSystemMetricChecker.java
index f07fc5a68..3f5371e26 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/clientload/ClientSystemMetricChecker.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/clientload/ClientSystemMetricChecker.java
@@ -18,8 +18,8 @@ package io.nosqlbench.engine.core.clientload;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.concurrent.Executors;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java
index a28bfae75..29ad67bbc 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java
@@ -23,10 +23,10 @@ import com.codahale.metrics.MetricFilter;
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.Log4JMetricsReporter;
-import io.nosqlbench.nb.api.components.NBCreators;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBComponentTraversal;
-import io.nosqlbench.nb.api.components.NBFinders;
+import io.nosqlbench.nb.api.components.core.NBCreators;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponentTraversal;
+import io.nosqlbench.nb.api.components.core.NBFinders;
import io.nosqlbench.engine.core.metrics.NBMetricsSummary;
import java.io.ByteArrayOutputStream;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java
index dc9310d1a..bd6e9743d 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java
@@ -19,7 +19,7 @@ import com.codahale.metrics.Gauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
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.activityimpl.MotorState;
import io.nosqlbench.nb.api.annotations.Annotation;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityLoader.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityLoader.java
index c9268247c..4246ef46c 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityLoader.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityLoader.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.core.lifecycle.activity;
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.activityimpl.uniform.StandardActivityType;
import org.apache.logging.log4j.LogManager;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityTypeLoader.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityTypeLoader.java
index e70b937fd..fc769df7a 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityTypeLoader.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityTypeLoader.java
@@ -18,7 +18,7 @@ package io.nosqlbench.engine.core.lifecycle.activity;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
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.NBIO;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerActivitiesController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerActivitiesController.java
index a51930cb9..a721fe474 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerActivitiesController.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerActivitiesController.java
@@ -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.ParameterMap;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponentErrorHandler;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponentErrorHandler;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressMeterDisplay;
import io.nosqlbench.engine.core.lifecycle.ExecutionResult;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerBuilderFacets.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerBuilderFacets.java
index 1321639a8..c8c84c5fb 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerBuilderFacets.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/ContainerBuilderFacets.java
@@ -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.Reader;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java
index 1b6add0a0..abc0a0730 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java
@@ -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.Layer;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBContainer.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBContainer.java
index ff0b126ba..4d0c78bd2 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBContainer.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBContainer.java
@@ -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.NBInvokableCommand;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.io.PrintWriter;
import java.io.Reader;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBScenarioContainerBuilder.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBScenarioContainerBuilder.java
index 84b97b72e..0523c9855 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBScenarioContainerBuilder.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBScenarioContainerBuilder.java
@@ -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.PrintWriter;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBCommandInfo.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBCommandInfo.java
index 5c0fc9078..b98d57601 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBCommandInfo.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBCommandInfo.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.core.lifecycle.scenario.execution;
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.Logger;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBInvokableCommand.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBInvokableCommand.java
index b94310980..c8e52c3e6 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBInvokableCommand.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/NBInvokableCommand.java
@@ -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.NBCommandParams;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java
index b9d33d3f0..21342b3f3 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java
@@ -16,7 +16,7 @@
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
index 61b688d85..8b3e07bf0 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
@@ -21,7 +21,7 @@ import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
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.engine.cmdstream.Cmd;
import io.nosqlbench.engine.core.clientload.*;
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java b/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java
index 2b855ae93..b97187cdd 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java
@@ -20,7 +20,7 @@ import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.engine.metrics.DeltaHdrHistogramReservoir;
import io.nosqlbench.nb.api.engine.metrics.HistoIntervalLogger;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricHistogram;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import org.HdrHistogram.EncodableHistogram;
import org.HdrHistogram.Histogram;
import org.HdrHistogram.HistogramLogReader;
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/NBBaseCommandTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/NBBaseCommandTest.java
index 06da29283..3dcbd9bdc 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/core/NBBaseCommandTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/core/NBBaseCommandTest.java
@@ -20,7 +20,7 @@ import io.nosqlbench.engine.cmdstream.Cmd;
import io.nosqlbench.engine.cmdstream.CmdArg;
import io.nosqlbench.engine.cmdstream.CmdParam;
import io.nosqlbench.engine.core.lifecycle.session.NBCommandInvoker;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBContainer;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandResult;
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java
index fd799a3b4..761624069 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.sandbox;
import io.nosqlbench.nb.api.config.standard.TestComponent;
-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.SimRateSpec;
import org.junit.jupiter.api.Disabled;
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java
index 2ce0a99a2..dddef78be 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.sandbox;
import io.nosqlbench.nb.api.config.standard.TestComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRate;
import org.junit.jupiter.api.Disabled;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctionPluginInfo.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctionPluginInfo.java
index b674d315a..3c706fae5 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctionPluginInfo.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctionPluginInfo.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.computefunctions;
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 org.apache.logging.log4j.Logger;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java
index 6d18539de..647940ef9 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java
@@ -16,8 +16,8 @@
package io.nosqlbench.engine.extensions.computefunctions;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePlugin.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePlugin.java
index e6ffa6f08..df0c0094f 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePlugin.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePlugin.java
@@ -17,8 +17,8 @@
package io.nosqlbench.engine.extensions.example;
import io.nosqlbench.nb.api.extensions.SandboxPlugin;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
public class ExamplePlugin extends NBBaseComponent implements SandboxPlugin {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java
index 41a8535db..182ef0ba2 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.example;
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 org.apache.logging.log4j.Logger;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingExtensionPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingExtensionPluginData.java
index a7fff201d..a7b1bdde2 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingExtensionPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingExtensionPluginData.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.globalvars;
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.virtdata.library.basics.core.threadstate.SharedState;
import org.apache.logging.log4j.Logger;
diff --git a/engine-extensions/src/test/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginWriterTest.java b/engine-extensions/src/test/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginWriterTest.java
index 95c66af8d..a4581fe7c 100644
--- a/engine-extensions/src/test/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginWriterTest.java
+++ b/engine-extensions/src/test/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginWriterTest.java
@@ -17,7 +17,7 @@
package io.nosqlbench.engine.extensions.csvoutput;
import io.nosqlbench.nb.api.csvoutput.CsvOutputPluginWriter;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import org.assertj.core.util.Files;
import org.graalvm.polyglot.Value;
import org.junit.jupiter.api.Test;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBMetricsBuffer.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBMetricsBuffer.java
deleted file mode 100644
index 901e573ad..000000000
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBMetricsBuffer.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2023 nosqlbench
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package io.nosqlbench.nb.api.components;
-
-import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
-import io.nosqlbench.nb.api.engine.metrics.reporters.ConsoleReporter;
-
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.List;
-
-public class NBMetricsBuffer {
- private List summaryMetrics = new ArrayList<>();
- private PrintStream out = System.out;
-
- public void setPrintStream(PrintStream out) {
- this.out = out;
- }
-
- public List getSummaryMetrics() {
- return summaryMetrics;
- }
-
- public void setSummaryMetrics(List summaryMetrics) {
- this.summaryMetrics = summaryMetrics;
- }
-
- public void addSummaryMetric(NBMetric metric) {
- this.summaryMetrics.add(metric);
- }
-
- public void clearSummaryMetrics() {
- this.summaryMetrics.clear();
- }
-
- public void printMetricSummary(NBComponent caller) {
- try(ConsoleReporter summaryReporter = new NBCreators.ConsoleReporterBuilder(caller, this.out).build()) {
- summaryReporter.reportOnce(summaryMetrics);
- }
- }
-}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBBaseComponent.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponent.java
similarity index 86%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBBaseComponent.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponent.java
index ea6d2739c..fcd0efbf5 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBBaseComponent.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponent.java
@@ -14,27 +14,32 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.components.decorators.NBTokenWords;
import io.nosqlbench.nb.api.components.events.ComponentOutOfScope;
import io.nosqlbench.nb.api.components.events.DownEvent;
import io.nosqlbench.nb.api.components.events.NBEvent;
import io.nosqlbench.nb.api.components.events.UpEvent;
+import io.nosqlbench.nb.api.config.params.ElementData;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
public class NBBaseComponent extends NBBaseComponentMetrics implements NBComponent, NBTokenWords {
private final static Logger logger = LogManager.getLogger("RUNTIME");
protected final NBComponent parent;
protected final NBLabels labels;
private final List children = new ArrayList<>();
+ private long endAt=0L;
+ private final long startAt;
protected NBMetricsBuffer metricsBuffer = new NBMetricsBuffer();
protected boolean bufferOrphanedMetrics = false;
+ private ConcurrentHashMap props = new ConcurrentHashMap<>();
public NBBaseComponent(NBComponent parentComponent) {
this(parentComponent, NBLabels.forKV());
@@ -42,6 +47,7 @@ public class NBBaseComponent extends NBBaseComponentMetrics implements NBCompone
public NBBaseComponent(NBComponent parentComponent, NBLabels componentSpecificLabelsOnly) {
this.labels = componentSpecificLabelsOnly;
+ this.startAt = System.nanoTime();
if (parentComponent != null) {
parent = parentComponent;
parent.attachChild(this);
@@ -134,6 +140,7 @@ public class NBBaseComponent extends NBBaseComponentMetrics implements NBCompone
*/
protected void teardown() {
logger.debug("tearing down " + description());
+ this.endAt = System.nanoTime();
}
@Override
@@ -220,4 +227,32 @@ public class NBBaseComponent extends NBBaseComponentMetrics implements NBCompone
}
}
+ @Override
+ public long getNanosSinceStart() {
+ if (endAt==0) {
+ return System.nanoTime()-startAt;
+ } else {
+ return endAt-startAt;
+ }
+ }
+
+ @Override
+ public Optional getComponentProp(String name) {
+ if (this.props!=null && this.props.containsKey(name)) {
+ return Optional.ofNullable(this.props.get(name));
+ } else if (this.getParent()!=null) {
+ return this.getParent().getComponentProp(name);
+ } else {
+ return Optional.empty();
+ }
+ }
+
+ @Override
+ public NBComponentProps setComponentProp(String name, String value) {
+ if (this.props==null) {
+ this.props = new ConcurrentHashMap<>();
+ }
+ props.put(name, value);
+ return this;
+ }
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBBaseComponentMetrics.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetrics.java
similarity index 98%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBBaseComponentMetrics.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetrics.java
index b297f3ba8..48ab89a65 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBBaseComponentMetrics.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetrics.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.tagging.TagFilter;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponent.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponent.java
similarity index 94%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponent.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponent.java
index 56f0ac300..d3a407092 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponent.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponent.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.components.decorators.NBProviderSearch;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
@@ -42,7 +42,8 @@ public interface NBComponent extends
NBComponentMetrics,
NBComponentServices,
NBComponentEvents,
- NBProviderSearch {
+ NBProviderSearch,
+ NBComponentProps {
NBComponent EMPTY_COMPONENT = new NBBaseComponent(null);
@@ -62,4 +63,6 @@ public interface NBComponent extends
void close() throws RuntimeException;
void reportExecutionMetric(NBMetric m);
+
+ long getNanosSinceStart();
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentErrorHandler.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentErrorHandler.java
similarity index 93%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentErrorHandler.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentErrorHandler.java
index 8e02f1862..8ef790e5c 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentErrorHandler.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentErrorHandler.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
public interface NBComponentErrorHandler {
public void notifyException(Thread t, Throwable e);
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentEvents.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentEvents.java
similarity index 94%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentEvents.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentEvents.java
index ee04142ab..e4508e16f 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentEvents.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentEvents.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.components.events.NBEvent;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentExecutionScope.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentExecutionScope.java
similarity index 97%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentExecutionScope.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentExecutionScope.java
index d8d00e16c..a2ae8e5fb 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentExecutionScope.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentExecutionScope.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.components.events.ComponentOutOfScope;
import io.nosqlbench.nb.api.config.standard.TestComponent;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentFinder.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentFinder.java
similarity index 97%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentFinder.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentFinder.java
index 75a3f4e60..d8c50c7b5 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentFinder.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentFinder.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.tagging.TagFilter;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentFormats.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentFormats.java
similarity index 97%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentFormats.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentFormats.java
index ea95b9871..040267e71 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentFormats.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentFormats.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentLoader.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentLoader.java
similarity index 97%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentLoader.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentLoader.java
index 17c1f4987..9701d05b3 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentLoader.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentLoader.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.annotations.Service;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentMetrics.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentMetrics.java
similarity index 97%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentMetrics.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentMetrics.java
index 8a9c357c3..47689cbca 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentMetrics.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentMetrics.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentServices.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentServices.java
similarity index 93%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentServices.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentServices.java
index e191ea1e5..052d993f7 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentServices.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentServices.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
public interface NBComponentServices {
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentTraversal.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentTraversal.java
similarity index 98%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentTraversal.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentTraversal.java
index 9df67b9b4..52defc699 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBComponentTraversal.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentTraversal.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import java.util.Iterator;
import java.util.LinkedList;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBCreators.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
similarity index 99%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBCreators.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
index 1a7103472..e52502471 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBCreators.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.csvoutput.CsvOutputPluginWriter;
import com.codahale.metrics.Meter;
@@ -38,7 +38,6 @@ import com.codahale.metrics.MetricFilter;
import org.apache.logging.log4j.Marker;
import java.io.PrintStream;
-import java.net.URI;
import java.util.*;
import java.nio.file.Path;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBFinders.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBFinders.java
similarity index 99%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBFinders.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBFinders.java
index dc452dce5..7e03c3e5c 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBFinders.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBFinders.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.engine.metrics.instruments.*;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBMetricsBuffer.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBMetricsBuffer.java
new file mode 100644
index 000000000..67998a274
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBMetricsBuffer.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.nb.api.components.core;
+
+import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
+import io.nosqlbench.nb.api.engine.metrics.reporters.ConsoleReporter;
+import io.nosqlbench.nb.api.engine.util.Unit;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+public class NBMetricsBuffer {
+
+ private final static Logger logger = LogManager.getLogger(NBMetricsBuffer.class);
+ private List summaryMetrics = new ArrayList<>();
+// private PrintStream out = System.out;
+
+// public void setPrintStream(PrintStream out) {
+// this.out = out;
+// }
+
+ public List getSummaryMetrics() {
+ return summaryMetrics;
+ }
+
+ public void setSummaryMetrics(List summaryMetrics) {
+ this.summaryMetrics = summaryMetrics;
+ }
+
+ public void addSummaryMetric(NBMetric metric) {
+ this.summaryMetrics.add(metric);
+ }
+
+ public void clearSummaryMetrics() {
+ this.summaryMetrics.clear();
+ }
+
+ public void printMetricSummary(NBComponent caller) {
+ caller.getComponentProp(NBComponentProps.SUMMARY).ifPresent(
+ summary -> {
+ Config config = new Config(caller, summary);
+ for (PrintStream channel : config.fullChannels) {
+ try (ConsoleReporter summaryReporter = new NBCreators.ConsoleReporterBuilder(caller, channel).build()) {
+ summaryReporter.reportOnce(summaryMetrics);
+ }
+ }
+ for (PrintStream channel : config.briefChannels) {
+ try (ConsoleReporter summaryReporter = new NBCreators.ConsoleReporterBuilder(caller, channel).build()) {
+ summaryReporter.reportCountsOnce(summaryMetrics);
+ }
+ }
+
+ }
+ );
+ }
+
+ private static class Config {
+ final List fullChannels = new ArrayList<>();
+ final List briefChannels = new ArrayList<>();
+
+ public Config(NBComponent caller, String reportSummaryTo) {
+ final String[] destinationSpecs = reportSummaryTo.split(", *");
+ long seconds = caller.getNanosSinceStart() / 1_000_000_000;
+
+ for (final String spec : destinationSpecs)
+ if ((null != spec) && !spec.isBlank()) {
+ final String[] split = spec.split(":", 2);
+ final String summaryTo = split[0];
+ final long summaryWhen = (2 == split.length) ? (Unit.secondsFor(split[1]).orElseThrow()) : 0;
+
+ PrintStream out = null;
+ switch (summaryTo.toLowerCase()) {
+ case "console":
+ case "stdout":
+ out = System.out;
+ break;
+ case "stderr":
+ out = System.err;
+ break;
+ default:
+ final String outName = summaryTo
+ .replaceAll("_SESSION_", caller.getLabels().valueOf("session"))
+ .replaceAll("_LOGS_", caller.getComponentProp("logsdir").orElseThrow());
+ try {
+ out = new PrintStream(new FileOutputStream(outName));
+ break;
+ } catch (final FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ if (seconds > summaryWhen) fullChannels.add(out);
+ else {
+ logger.debug("Summarizing counting metrics only to {} with scenario duration of {}S (<{})", spec, summaryWhen, summaryWhen);
+ briefChannels.add(out);
+ }
+ }
+
+ }
+ }
+
+}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBNamedElement.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBNamedElement.java
similarity index 93%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBNamedElement.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBNamedElement.java
index fa4bde533..f67cf9c33 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBNamedElement.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBNamedElement.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
public interface NBNamedElement {
String getName();
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBParentComponentInjection.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBParentComponentInjection.java
similarity index 93%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/NBParentComponentInjection.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBParentComponentInjection.java
index 95e122d83..62a11001f 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/NBParentComponentInjection.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBParentComponentInjection.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
public interface NBParentComponentInjection {
void applyParentComponent(NBComponent component);
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/PeriodicTaskComponent.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/PeriodicTaskComponent.java
similarity index 98%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/components/PeriodicTaskComponent.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/components/core/PeriodicTaskComponent.java
index f86cee2df..06bdd6c61 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/PeriodicTaskComponent.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/PeriodicTaskComponent.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/events/ComponentOutOfScope.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/events/ComponentOutOfScope.java
index 1f2c70069..171208434 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/events/ComponentOutOfScope.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/events/ComponentOutOfScope.java
@@ -17,7 +17,7 @@
package io.nosqlbench.nb.api.components.events;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
public class ComponentOutOfScope implements NBEvent {
private final NBComponent component;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/standard/TestComponent.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/standard/TestComponent.java
index c00c58888..f7fa6f6cc 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/standard/TestComponent.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/standard/TestComponent.java
@@ -17,8 +17,8 @@
package io.nosqlbench.nb.api.config.standard;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/csvoutput/CsvOutputPluginWriter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/csvoutput/CsvOutputPluginWriter.java
index a670bfdde..5330b0ddc 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/csvoutput/CsvOutputPluginWriter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/csvoutput/CsvOutputPluginWriter.java
@@ -16,8 +16,8 @@
package io.nosqlbench.nb.api.csvoutput;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.graalvm.polyglot.Value;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ActivityDef.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ActivityDef.java
index ddc2db66f..945bd70ab 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ActivityDef.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ActivityDef.java
@@ -16,7 +16,7 @@
package io.nosqlbench.nb.api.engine.activityimpl;
-import io.nosqlbench.nb.api.components.NBNamedElement;
+import io.nosqlbench.nb.api.components.core.NBNamedElement;
import io.nosqlbench.nb.api.errors.BasicError;
import io.nosqlbench.nb.api.labels.NBLabelSpec;
import io.nosqlbench.nb.api.labels.NBLabels;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/CapabilityHook.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/CapabilityHook.java
index f29fdf7f7..37781f34a 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/CapabilityHook.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/CapabilityHook.java
@@ -17,8 +17,8 @@
package io.nosqlbench.nb.api.engine.metrics;
import com.codahale.metrics.*;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.HashMap;
import java.util.Map;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicHistoListener.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicHistoListener.java
index 10b5efe50..cf5c9563a 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicHistoListener.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicHistoListener.java
@@ -17,7 +17,7 @@
package io.nosqlbench.nb.api.engine.metrics;
import com.codahale.metrics.*;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicTimerListener.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicTimerListener.java
index 43d6af01a..ef5cb3ae2 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicTimerListener.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/ClassicTimerListener.java
@@ -19,7 +19,7 @@ package io.nosqlbench.nb.api.engine.metrics;
import com.codahale.metrics.ExponentiallyDecayingReservoir;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoIntervalLogger.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoIntervalLogger.java
index 15a656217..3ba20a6cd 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoIntervalLogger.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoIntervalLogger.java
@@ -16,7 +16,7 @@
package io.nosqlbench.nb.api.engine.metrics;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.HdrHistogram.EncodableHistogram;
import org.HdrHistogram.HistogramLogWriter;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoStatsLogger.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoStatsLogger.java
index dc8da52cd..5fa381451 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoStatsLogger.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/HistoStatsLogger.java
@@ -16,7 +16,7 @@
package io.nosqlbench.nb.api.engine.metrics;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.HdrHistogram.EncodableHistogram;
import org.HdrHistogram.Histogram;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java
index e69824c35..5e9b14300 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java
@@ -18,7 +18,7 @@ package io.nosqlbench.nb.api.engine.metrics.instruments;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
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.function.Supplier;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java
index 19e92238d..94c7d498d 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java
@@ -18,7 +18,7 @@ package io.nosqlbench.nb.api.engine.metrics.instruments;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
/**
* Use this gauge type when you are setting the gauge value directly. It is merely a holder
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
index ab6c7b434..bd5b0f163 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
@@ -19,9 +19,9 @@ package io.nosqlbench.nb.api.engine.metrics.reporters;
import com.codahale.metrics.Timer;
import com.codahale.metrics.*;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBFinders;
-import io.nosqlbench.nb.api.components.PeriodicTaskComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBFinders;
+import io.nosqlbench.nb.api.components.core.PeriodicTaskComponent;
import io.nosqlbench.nb.api.engine.metrics.instruments.*;
import java.io.PrintStream;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/CsvReporter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/CsvReporter.java
index 20b7839ee..e51ccd9fd 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/CsvReporter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/CsvReporter.java
@@ -19,8 +19,8 @@ package io.nosqlbench.nb.api.engine.metrics.reporters;
import com.codahale.metrics.*;
import io.nosqlbench.nb.api.labels.NBLabelUtils;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.PeriodicTaskComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.PeriodicTaskComponent;
import io.nosqlbench.nb.api.engine.metrics.instruments.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/Log4JMetricsReporter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/Log4JMetricsReporter.java
index cbaf8bafb..e9fee0442 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/Log4JMetricsReporter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/Log4JMetricsReporter.java
@@ -18,10 +18,10 @@ package io.nosqlbench.nb.api.engine.metrics.reporters;
import com.codahale.metrics.*;
import io.nosqlbench.nb.api.labels.NBLabels;
-import io.nosqlbench.nb.api.components.NBCreators;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBFinders;
-import io.nosqlbench.nb.api.components.PeriodicTaskComponent;
+import io.nosqlbench.nb.api.components.core.NBCreators;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBFinders;
+import io.nosqlbench.nb.api.components.core.PeriodicTaskComponent;
import io.nosqlbench.nb.api.engine.metrics.instruments.*;
import org.apache.logging.log4j.Marker;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java
index 2c4b2921c..587ea2d4c 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java
@@ -19,8 +19,8 @@ package io.nosqlbench.nb.api.engine.metrics.reporters;
import io.nosqlbench.nb.api.errors.BasicError;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.system.NBEnvironment;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.PeriodicTaskComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.PeriodicTaskComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java
index 85735988e..c0e2d4ba3 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java
@@ -19,7 +19,7 @@ package io.nosqlbench.nb.api.engine.metrics.wrappers;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.engine.metrics.DoubleSummaryGauge;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.ArrayList;
import java.util.List;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/extensions/ScriptingExtensionPluginInfo.java b/nb-api/src/main/java/io/nosqlbench/nb/api/extensions/ScriptingExtensionPluginInfo.java
index 6def00895..4b4013f15 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/extensions/ScriptingExtensionPluginInfo.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/extensions/ScriptingExtensionPluginInfo.java
@@ -16,7 +16,7 @@
package io.nosqlbench.nb.api.extensions;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HdrHistoLog.java b/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HdrHistoLog.java
index b4fc5fcc2..721e286d3 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HdrHistoLog.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HdrHistoLog.java
@@ -18,8 +18,8 @@ package io.nosqlbench.nb.api.histo;
import io.nosqlbench.nb.api.engine.metrics.HistoIntervalLogger;
import io.nosqlbench.nb.api.engine.util.Unit;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.io.File;
import java.util.regex.Pattern;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HistoStats.java b/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HistoStats.java
index 44e24d719..6d02c2773 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HistoStats.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/histo/HistoStats.java
@@ -18,8 +18,8 @@ package io.nosqlbench.nb.api.histo;
import io.nosqlbench.nb.api.engine.metrics.HistoStatsLogger;
import io.nosqlbench.nb.api.engine.util.Unit;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.io.File;
import java.util.concurrent.TimeUnit;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/http/HttpPlugin.java b/nb-api/src/main/java/io/nosqlbench/nb/api/http/HttpPlugin.java
index b272edc15..d1db122df 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/http/HttpPlugin.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/http/HttpPlugin.java
@@ -16,8 +16,8 @@
package io.nosqlbench.nb.api.http;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.io.IOException;
import java.net.URI;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/loaders/BundledExtensionsLoader.java b/nb-api/src/main/java/io/nosqlbench/nb/api/loaders/BundledExtensionsLoader.java
index c375c0ead..562ddea1d 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/loaders/BundledExtensionsLoader.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/loaders/BundledExtensionsLoader.java
@@ -17,7 +17,7 @@
package io.nosqlbench.nb.api.loaders;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/optimizers/BobyqaOptimizerInstance.java b/nb-api/src/main/java/io/nosqlbench/nb/api/optimizers/BobyqaOptimizerInstance.java
index ee03381a8..29f7b41d5 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/optimizers/BobyqaOptimizerInstance.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/optimizers/BobyqaOptimizerInstance.java
@@ -16,8 +16,8 @@
package io.nosqlbench.nb.api.optimizers;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.commons.math4.legacy.optim.*;
import org.apache.commons.math4.legacy.optim.nonlinear.scalar.GoalType;
import org.apache.commons.math4.legacy.optim.nonlinear.scalar.ObjectiveFunction;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/s3uploader/S3Uploader.java b/nb-api/src/main/java/io/nosqlbench/nb/api/s3uploader/S3Uploader.java
index faaf34913..1dd1ab4f8 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/s3uploader/S3Uploader.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/s3uploader/S3Uploader.java
@@ -24,8 +24,8 @@ import io.nosqlbench.nb.api.addins.s3.s3urlhandler.S3ClientCache;
import io.nosqlbench.nb.api.addins.s3.s3urlhandler.S3UrlFields;
import io.nosqlbench.nb.api.metadata.ScenarioMetadata;
import io.nosqlbench.nb.api.system.NBEnvironment;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/shutdown/NBShutdownHook.java b/nb-api/src/main/java/io/nosqlbench/nb/api/shutdown/NBShutdownHook.java
index d52e31391..22862e40c 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/shutdown/NBShutdownHook.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/shutdown/NBShutdownHook.java
@@ -16,8 +16,8 @@
package io.nosqlbench.nb.api.shutdown;
-import io.nosqlbench.nb.api.components.NBBaseComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/tagging/TagFilter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/tagging/TagFilter.java
index e4527b484..4de51c322 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/tagging/TagFilter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/tagging/TagFilter.java
@@ -18,7 +18,7 @@ package io.nosqlbench.nb.api.tagging;
import io.nosqlbench.nb.api.engine.util.Tagged;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import java.util.*;
import java.util.function.BiFunction;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/AttachedMetricsSummaryReporterTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/AttachedMetricsSummaryReporterTest.java
similarity index 98%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/AttachedMetricsSummaryReporterTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/AttachedMetricsSummaryReporterTest.java
index 062a32500..ade28a4b1 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/AttachedMetricsSummaryReporterTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/AttachedMetricsSummaryReporterTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBBaseComponentMetricsTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
similarity index 94%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/NBBaseComponentMetricsTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
index 8dde44523..0c4df26ff 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBBaseComponentMetricsTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
-import io.nosqlbench.nb.api.components.NBBaseComponentMetrics;
+import io.nosqlbench.nb.api.components.core.NBBaseComponentMetrics;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBBaseMetric;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import org.junit.jupiter.api.Test;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentFormatsTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentFormatsTest.java
similarity index 90%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentFormatsTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentFormatsTest.java
index 0c82ec9c9..ed748371d 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentFormatsTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentFormatsTest.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import static org.assertj.core.api.Assertions.assertThat;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBComponentFormats;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponentFormats;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import org.junit.jupiter.api.Test;
public class NBComponentFormatsTest {
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentLifecycleTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentLifecycleTest.java
similarity index 97%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentLifecycleTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentLifecycleTest.java
index 8d1636f58..74ea4ebc3 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentLifecycleTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentLifecycleTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import org.apache.logging.log4j.LogManager;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentScaffoldingTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentScaffoldingTest.java
similarity index 97%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentScaffoldingTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentScaffoldingTest.java
index 619023d94..cc6a5d8e4 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentScaffoldingTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentScaffoldingTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import org.apache.logging.log4j.LogManager;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentServicesTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentServicesTest.java
similarity index 97%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentServicesTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentServicesTest.java
index 4ded98415..16662e928 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentServicesTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentServicesTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentTraversalTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentTraversalTest.java
similarity index 93%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentTraversalTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentTraversalTest.java
index a8c963f09..adfb481fc 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBComponentTraversalTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentTraversalTest.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.components.NBComponentTraversal;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponentTraversal;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import org.junit.jupiter.api.Test;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBMetricsQueryTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
similarity index 97%
rename from nb-api/src/test/java/io/nosqlbench/nb/api/components/NBMetricsQueryTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
index ae250d3ac..beecdfc05 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/NBMetricsQueryTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.nb.api.components;
+package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBBaseMetric;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/config/standard/TestComponentViewTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/config/standard/TestComponentViewTest.java
index ce95bd530..68045f3c5 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/config/standard/TestComponentViewTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/config/standard/TestComponentViewTest.java
@@ -16,8 +16,7 @@
package io.nosqlbench.nb.api.config.standard;
-import io.nosqlbench.nb.api.components.NBComponent;
-import io.nosqlbench.nb.api.config.standard.TestComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java
index c571ab878..eda7766f6 100644
--- a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java
+++ b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java
@@ -21,7 +21,7 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContaine
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
diff --git a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injavascript/ScriptExampleTests.java b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injavascript/ScriptExampleTests.java
index 0e69c3a9c..0ac9a9995 100644
--- a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injavascript/ScriptExampleTests.java
+++ b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injavascript/ScriptExampleTests.java
@@ -19,7 +19,7 @@ package io.nosqlbench.nbr.examples.injavascript;
import io.nosqlbench.engine.cmdstream.BasicScriptBuffer;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
import io.nosqlbench.nb.api.config.standard.TestComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBContainer;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandResult;
diff --git a/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java b/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java
index 7aa42a54b..87426d9e1 100644
--- a/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java
+++ b/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java
@@ -18,7 +18,7 @@ package io.nosqlbench.engine.core.script;
import com.codahale.metrics.Histogram;
import io.nosqlbench.nb.api.config.standard.TestComponent;
-import io.nosqlbench.nb.api.components.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
From 54631474bdb1f2d33004e72ca055c404301042b2 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:16:57 -0600
Subject: [PATCH 05/26] add Component Properties
---
.../core/lifecycle/session/NBSession.java | 1 +
.../api/components/core/NBComponentProps.java | 26 +++++++++++++++++++
2 files changed, 27 insertions(+)
create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentProps.java
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
index 8b3e07bf0..db0328578 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
@@ -16,6 +16,7 @@
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.metrics.instruments.NBFunctionGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentProps.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentProps.java
new file mode 100644
index 000000000..2546fab01
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentProps.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.nb.api.components.core;
+
+import java.util.Optional;
+
+public interface NBComponentProps {
+ String SUMMARY = "summary";
+
+ Optional getComponentProp(String name);
+ NBComponentProps setComponentProp(String name, String value);
+}
From 57129e89687b8c4bd78d4fec42b14b43e415b586 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:17:03 -0600
Subject: [PATCH 06/26] avoid mandatory console output
---
.../java/io/nosqlbench/engine/cli/NBCLI.java | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
index 395fda36e..646d730d3 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
@@ -272,6 +272,29 @@ public class NBCLI implements Function, NBLabeledElement {
return NBCLI.EXIT_OK;
}
+ if (options.wantsToCatResource()) {
+ final String resourceToCat = options.wantsToCatResourceNamed();
+ NBCLI.logger.debug(() -> "user requests to cat " + resourceToCat);
+
+ Optional> 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()) {
final String resourceToCopy = options.wantsToCopyResourceNamed();
NBCLI.logger.debug(() -> "user requests to copy out " + resourceToCopy);
From 725a9b5d8808b14f296421190b3cb9e0c1c5996e Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:17:06 -0600
Subject: [PATCH 07/26] doc updates
---
.../nb/api/components/package-info.java | 87 ++++++++++++-------
1 file changed, 57 insertions(+), 30 deletions(-)
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/package-info.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/package-info.java
index 49c7384d8..dfd693b6e 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/package-info.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/package-info.java
@@ -32,21 +32,24 @@
*
* Components Defined
* There can be different layers or types of components, but there is only one component hierarchy in each
- * NoSQLBench process. Basically the Session is a component. The Scenario is a component. Each activity within a
- * scenario is a component. Whether something is meaningful as a component depends on whether the management facilities
- * provided by the component API make using, interacting with, or understanding that element better for users. However
- * there is a limit to how fine-grained the component hierarchy should be allowed to get. This is because maintaining
- * the component structure at runtime incurs a cost, and most feature of the component types are related to assemblage
- * of fixtures in the runtime which are configured and initialized before steady state processing begins. For example,
- * it makes sense to wire an activity as component, but not an operation, since an operation is ephemeral and
- * short-lived. Apart from these trade-offs, make a layer a component layer if it makes sense for the user and/or the
- * developer, as consolidating the logic into the component layer is beneficial to both.
+ * NoSQLBench process. Basically the Session is a component. Each activity container within a session is a component.
+ * Each activity within a container is a component. Whether something is meaningful as a component depends on whether
+ * the management facilities provided by the component API make using, interacting with, or understanding that element
+ * better for users. However there is a limit to how fine-grained the component hierarchy should be allowed to get.
+ * This
+ * is because maintaining the component structure at runtime incurs a cost, and most features of the component types
+ * are
+ * related to assemblage of fixtures in the runtime which are configured and initialized before steady state processing
+ * begins. For example, it makes sense to wire an activity as component, but not an operation, since an operation is
+ * ephemeral and short lived. Apart from these trade-offs, make a layer a component layer if it makes sense for the
+ * user
+ * and/or the developer, as consolidating the logic into the component layer is beneficial to both.
*
* Adoption Strategy
* Consolidating existing logic to use the component types will be an incremental process. The base contract type
- * {@link io.nosqlbench.nb.api.components.NBComponent} establishes the contract for any conforming types. As contract facets
- * are added to this type, common logic can be implemented on the base implementation types where possible, allowing
- * for the elision of duplicitous code from prior functionality.
+ * {@link io.nosqlbench.nb.api.components.core.NBComponent} establishes the contract for any conforming types. As
+ * contract facets are added to this type, common logic can be implemented on the base implementation types where
+ * possible, allowing for the elision of duplicitous code from prior functionality.
*
*
*
@@ -56,13 +59,18 @@
*
* Components are structured hierarchically. All components exist within the scope of their parent, with the only
* exception being the root component, which has no parent. Components always know their parent from construction time.
- * After a component is constructed, it is informed of children components being added and removed via
- * {@link io.nosqlbench.nb.api.components.NBComponent#attachChild} and {@link io.nosqlbench.nb.api.components.NBComponent#detachChild}
+ * After a component is constructed, it is informed of child components being added and removed via
+ * {@link io.nosqlbench.nb.api.components.core.NBComponent#attachChild} and
+ * {@link io.nosqlbench.nb.api.components.core.NBComponent#detachChild}
* methods.
*
- * Component logic should interact with other components using the component interfaces and types. No contextual
- * typing or casting should be allowed within the component layer methods. Components only understand components by
- * design, and breaking this abstraction is counter-productive at best.
+ * Component-specific logic should interact with other components using the component interfaces and types. No
+ * contextual typing or casting should be allowed within the component layer methods, except in the case that types
+ * outside of the component type system are leveraging component layers for features of other non-component types. In
+ * other words, Component APIs should be thought of as a layer of primitives which sit on top of low-level Java
+ * primitive, and below those types which use them. Component logic can't understand higher types without breaking the
+ * seal on a useful abstraction. Components only understand components by design, and breaking this abstraction is
+ * counter-productive at best.
*
* Utility classes which understand how to interact with components should be used where possible when the
* capabilities they provide are well-themed and cohesive. A Corollary to this is that each interface added to the core
@@ -76,21 +84,40 @@
*
Life-cycle Oriented Components
* Life-cycle components represent executions of some user-managed scope, like session, scenarios, or activities.
* These components model the nesting structure of threads of execution, or for activities, groups of threads. As such,
- * any sub-components they have are generally there to augment or contextualize the execution of the life-cycle component.
- * In this case, the life-cycle component controls the life-line of its sub-components. When the life-cycle component is
- * ready to finish its own execution, it will directly inform all components attached to it that it is time for them
- * to do final housekeeping, including any final buffering and sending, connection tear-down, etc. As components, the parent
- * component may not know what the details of these housekeeping steps are directly. But components are always something else too,
- * and in the type-specific implementations which are triggered by component methods, appropriate integrations can take place.
+ * any sub-components they have are generally there to augment or contextualize the execution of the life-cycle
+ * component.
+ * Life-cycle components may control the life-line of its sub-components. In that case, when the life-cycle
+ * component
+ * is ready to finish its own execution, it should directly inform all components attached to it that it is time for
+ * them to do final housekeeping, including any final buffering and sending, connection tear-down, etc. As components,
+ * the parent
+ * component may not know what the details of these housekeeping steps are directly. But components are always
+ * something else too, and in the type-specific implementations which are triggered by component methods, appropriate
+ * integrations can take place indirectly through the component API or events.
+ * In other life-cycle components, the parent component can be thought of as a passive container over child
+ * components which
+ * may exit on their own terms. In this case, the parent component should have appropriate eventing and state tracking
+ * so that
+ * its life-cycle is properly bounded around the sub components. In other words, it would be a bug if all the sub
+ * components
+ * had completed their work and the parent component sat idle in the component hierarchy without completing itself or
+ * alternately
+ * sending events to trigger some other life-cycle cleanup. How this is handled is not specific explicitly for all
+ * components.
+ * Still, it is a design error to have idle components in the hierarchy with no durable life-cycle cleanup
+ * mechanism.
*
* Service Oriented Components
- * Service components are those which are created as an attachment to other components. They may or may not have additional asynchronous
- * behavior with respect to their parent component, but they are always in service of the parent component. For example, metrics instruments
- * like counters are passive, but reporters which send these metrics outside of the system are active and on a schedule.
- * Service-oriented components generally do not control the duration of their lifetimes. When they are working properly, they exist
- * along-side and attached to their parent component for the full lifetime of that parent, and then are reaped on demand by the parent
- * component.
- *
+ * Service components are those which are created as an attachment to other components. They may or may not have
+ * additional asynchronous behavior with respect to their parent component, but they are always in service of the parent
+ * component. For example, metrics instruments like counters are passive, but reporters which send these metrics outside
+ * of the system are active and on a schedule. Service-oriented components generally do not control the duration of
+ * their lifetimes. When they are working properly, they exist along-side and attached to their parent component for the
+ * full lifetime of that parent, and then are reaped on demand by the parent component.
+ * Ideally reaping of sub-components like this occurs naturally because of standard GC reachability rules. For this to
+ * work reliably, it is important that you attach components and their children correctly with the component tree, and
+ * avoid creating extraneous references across unrelated components or across component layers.
+ *
*
* Labeling Consistency and interlocks
* TODO: labeling consistency
From 16e3e587aa84005ee1dbaf9b21aecf8a9fb7297c Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:17:08 -0600
Subject: [PATCH 08/26] enhance console reporter
---
.../main/java/io/nosqlbench/engine/cli/NBCLI.java | 8 +++++++-
.../engine/metrics/reporters/ConsoleReporter.java | 14 +++++++++++---
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
index 646d730d3..09534b25d 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
@@ -413,6 +413,11 @@ public class NBCLI implements Function, NBLabeledElement {
),
sessionName
);
+ // TODO: Decide whether this should be part of ctor consistency
+ Map.of(
+ "summary", options.getReportSummaryTo(),
+ "logsdir", options.getLogsDirectory().toString()
+ ).forEach(session::setComponentProp);
options.wantsReportCsvTo().ifPresent(cfg -> {
MetricInstanceFilter filter = new MetricInstanceFilter();
@@ -439,7 +444,8 @@ public class NBCLI implements Function, NBLabeledElement {
ExecutionResult sessionResult = session.apply(options.getCommands());
- sessionResult.printSummary(System.out);
+// sessionResult.printSummary(System.out);
+ logger.info(sessionResult);
return sessionResult.getStatus().code;
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
index bd5b0f163..3209bc499 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
@@ -41,9 +41,10 @@ public class ConsoleReporter extends PeriodicTaskComponent {
private final long rateFactor;
private final String durationUnit = TimeUnit.NANOSECONDS.toString().toLowerCase(Locale.US);
private final long durationFactor = TimeUnit.NANOSECONDS.toNanos(1);
+
public ConsoleReporter(NBComponent node, NBLabels extraLabels, long millis, boolean oneLastTime,
PrintStream output, Set disabledMetricAttributes) {
- super(node, extraLabels, millis, oneLastTime,"REPORT-CONSOLE");
+ super(node, extraLabels, millis, oneLastTime, "REPORT-CONSOLE");
this.output = output;
this.dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,
DateFormat.MEDIUM,
@@ -190,8 +191,10 @@ public class ConsoleReporter extends PeriodicTaskComponent {
/**
* Print only if the attribute is enabled
*
- * @param type Metric attribute
- * @param status Status to be logged
+ * @param type
+ * Metric attribute
+ * @param status
+ * Status to be logged
*/
private void printIfEnabled(MetricAttribute type, String status) {
if (getDisabledMetricAttributes().contains(type)) {
@@ -242,4 +245,9 @@ public class ConsoleReporter extends PeriodicTaskComponent {
}
report(gauges, counters, histograms, meters, timers);
}
+
+ public void reportCountsOnce(List summaryMetrics) {
+ // TODO: implement counts only renderer
+ // TODO: resolve ambiguity around reporting counts only or reporting nothing for short sessions
+ }
}
From aad06bed09ffca46a35d102e90b36e4ddc48f60c Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:17:11 -0600
Subject: [PATCH 09/26] formatting
---
.../engine/core/lifecycle/session/NBSession.java | 14 +++++++-------
.../engine/metrics/reporters/ConsoleReporter.java | 12 ++++++++----
2 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
index db0328578..221c8124c 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
@@ -56,13 +56,6 @@ public class NBSession extends NBBaseComponent implements Function, Ex
ERROR
}
- private NBBufferedContainer getContext(String name) {
- return containers.computeIfAbsent(
- name,
- n -> NBContainer.builder().name(n).build(this)
- );
- }
-
public NBSession(
NBLabeledElement labelContext,
String sessionName
@@ -206,5 +199,12 @@ public class NBSession extends NBBaseComponent implements Function, Ex
clientMetricChecker.addRatioMetricToCheck(cpuUserGauge, cpuTotalGauge, 50.0, true);
}
+ private NBBufferedContainer getContext(String name) {
+ return containers.computeIfAbsent(
+ name,
+ n -> NBContainer.builder().name(n).build(this)
+ );
+ }
+
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
index 3209bc499..2eb724350 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/ConsoleReporter.java
@@ -233,13 +233,17 @@ public class ConsoleReporter extends PeriodicTaskComponent {
for (NBMetric metric : summaryMetrics) {
if (metric instanceof NBMetricGauge) {
gauges.add((NBMetricGauge) metric);
- } if (metric instanceof NBMetricCounter) {
+ }
+ if (metric instanceof NBMetricCounter) {
counters.add((NBMetricCounter) metric);
- } if (metric instanceof NBMetricHistogram) {
+ }
+ if (metric instanceof NBMetricHistogram) {
histograms.add((NBMetricHistogram) metric);
- } if (metric instanceof NBMetricMeter) {
+ }
+ if (metric instanceof NBMetricMeter) {
meters.add((NBMetricMeter) metric);
- } if (metric instanceof NBMetricTimer) {
+ }
+ if (metric instanceof NBMetricTimer) {
timers.add((NBMetricTimer) metric);
}
}
From c23878a0e6502764aec06a85ad5effdfbe9a5235 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:17:13 -0600
Subject: [PATCH 10/26] implement --cat
---
.../io/nosqlbench/engine/cli/NBCLIOptions.java | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java
index 5f1ecc7ed..9562b14f2 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java
@@ -84,6 +84,7 @@ public class NBCLIOptions {
private static final String COMPILE_SCRIPT = "--compile-script";
private static final String SCRIPT_FILE = "--script-file";
private static final String COPY = "--copy";
+ private static final String CAT = "--cat";
private static final String SHOW_STACKTRACES = "--show-stacktraces";
private static final String EXPERIMENTAL = "--experimental";
private static final String MATURITY = "--maturity";
@@ -199,6 +200,7 @@ public class NBCLIOptions {
private boolean wantsConsoleMetrics = true;
private String annotateLabelSpec = "";
private String metricsLabelSpec = "";
+ private String wantsToCatResource ="";
public boolean wantsLoggedMetrics() {
return this.wantsConsoleMetrics;
@@ -264,6 +266,10 @@ public class NBCLIOptions {
return this.labels;
}
+ public boolean wantsToCatResource() {
+ return this.wantsToCatResource!=null && !this.wantsToCatResource.isEmpty();
+ }
+
public enum Mode {
ParseGlobalsOnly,
ParseAllOptions
@@ -629,6 +635,10 @@ public class NBCLIOptions {
arglist.removeFirst();
this.wantsToCopyWorkload = this.readWordOrThrow(arglist, "workload to copy");
break;
+ case NBCLIOptions.CAT:
+ arglist.removeFirst();
+ this.wantsToCatResource = this.readWordOrThrow(arglist, "workload to cat");
+ break;
default:
nonincludes.addLast(arglist.removeFirst());
}
@@ -887,6 +897,11 @@ public class NBCLIOptions {
return this.wantsToCopyWorkload;
}
+ public String wantsToCatResourceNamed() {
+ return this.wantsToCatResource;
+ }
+
+
public boolean wantsWorkloadsList() {
return this.wantsWorkloadsList;
}
From 3547c04c419a5e00b9e903b4ed29511b278308e9 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 17:17:20 -0600
Subject: [PATCH 11/26] minor syntax improvements
---
.../engine/api/activityimpl/uniform/StandardActivity.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
index 0616d534e..f00354703 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
@@ -83,7 +83,7 @@ public class StandardActivity extends SimpleActivity implements
}
Optional defaultDriverName = activityDef.getParams().getOptionalString("driver");
- Optional defaultAdapter = activityDef.getParams().getOptionalString("driver")
+ Optional> defaultAdapter = activityDef.getParams().getOptionalString("driver")
.flatMap(name -> ServiceSelector.of(name,ServiceLoader.load(DriverAdapterLoader.class)).get())
.map(l -> l.load(this,NBLabels.forKV()));
From 5ab00a2c112dbaa45fecf7fa96c6f8378f676a1a Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 23:29:27 -0600
Subject: [PATCH 12/26] add dryrun=emit support
---
.../adapter/cqld4/optypes/Cqld4CqlOp.java | 19 +-
.../uniform/BaseDriverAdapter.java | 2 +-
.../api/activityimpl/uniform/EmitterOp.java | 34 +++
.../uniform/EmitterOpDispenserWrapper.java | 38 ++++
.../api/activityimpl/SimpleActivity.java | 202 ++++++++++--------
5 files changed, 197 insertions(+), 98 deletions(-)
create mode 100644 adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOp.java
create mode 100644 adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOpDispenserWrapper.java
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/optypes/Cqld4CqlOp.java b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/optypes/Cqld4CqlOp.java
index 106cf61df..689c6b6fc 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/optypes/Cqld4CqlOp.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/optypes/Cqld4CqlOp.java
@@ -99,7 +99,7 @@ public abstract class Cqld4CqlOp implements CycleOp>, VariableCapture,
this.metrics = metrics;
}
- public final List apply(long cycle) {
+ public final ArrayList apply(long cycle) {
Statement> statement = getStmt();
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>, VariableCapture,
});
try {
- return rowsStage.toCompletableFuture().get(300, TimeUnit.SECONDS);
+ return new PrintableRowList(rowsStage.toCompletableFuture().get(300, TimeUnit.SECONDS));
} catch (ExecutionException exe) {
Throwable ee = exe.getCause();
if (ee instanceof RuntimeException re) {
@@ -142,6 +142,21 @@ public abstract class Cqld4CqlOp implements CycleOp>, VariableCapture,
// processors.flush();
}
+ private static class PrintableRowList extends ArrayList {
+ public PrintableRowList(List values) {
+ super(values);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ for (Row row : this) {
+ sb.append(row.getFormattedContents());
+ }
+ return sb.toString();
+ }
+ }
+
// private BiFunction handler
@Override
public Op getNextOp() {
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java
index 91a458bd0..6fe41ffcf 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/BaseDriverAdapter.java
@@ -176,7 +176,7 @@ public abstract class BaseDriverAdapter extends NBBaseComponent
.add(Param.optional("instrument", Boolean.class))
.add(Param.optional(List.of("workload", "yaml"), String.class, "location of workload yaml file"))
.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))
.asReadOnly();
}
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOp.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOp.java
new file mode 100644
index 000000000..9abbda81a
--- /dev/null
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOp.java
@@ -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 {
+
+ 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;
+ }
+}
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOpDispenserWrapper.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOpDispenserWrapper.java
new file mode 100644
index 000000000..c82c5b1a9
--- /dev/null
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/uniform/EmitterOpDispenserWrapper.java
@@ -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 {
+
+ private final OpDispenser extends CycleOp>> realDispenser;
+
+ public EmitterOpDispenserWrapper(DriverAdapter 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);
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
index 95e2a983f..771f25228 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
@@ -16,6 +16,8 @@
package io.nosqlbench.engine.api.activityimpl;
+import io.nosqlbench.adapters.api.activityimpl.uniform.EmitterOpDispenserWrapper;
+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;
@@ -56,12 +58,10 @@ import org.apache.logging.log4j.Logger;
import java.io.InputStream;
import java.io.PrintWriter;
-import java.lang.reflect.AnnotatedType;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
-import java.util.stream.Collectors;
/**
* A default implementation of an Activity, suitable for building upon.
@@ -71,7 +71,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
protected ActivityDef activityDef;
private final List closeables = new ArrayList<>();
- private MotorDispenser motorDispenser;
+ private MotorDispenser> motorDispenser;
private InputDispenser inputDispenser;
private ActionDispenser actionDispenser;
private OutputDispenser markerDispenser;
@@ -90,26 +90,26 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
private final RunStateTally tally = new RunStateTally();
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;
if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) {
Optional workloadOpt = activityDef.getParams().getOptionalString(
- "workload",
- "yaml"
+ "workload",
+ "yaml"
);
if (workloadOpt.isPresent()) {
activityDef.getParams().set("alias", workloadOpt.get());
} else {
activityDef.getParams().set("alias",
- activityDef.getActivityType().toUpperCase(Locale.ROOT)
- + nameEnumerator);
+ activityDef.getActivityType().toUpperCase(Locale.ROOT)
+ + nameEnumerator);
nameEnumerator++;
}
}
}
public SimpleActivity(NBComponent parent, String activityDefString) {
- this(parent,ActivityDef.parseActivityDef(activityDefString));
+ this(parent, ActivityDef.parseActivityDef(activityDefString));
}
@Override
@@ -120,8 +120,8 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
public synchronized NBErrorHandler getErrorHandler() {
if (null == this.errorHandler) {
errorHandler = new NBErrorHandler(
- () -> activityDef.getParams().getOptionalString("errors").orElse("stop"),
- () -> getExceptionMetrics());
+ () -> activityDef.getParams().getOptionalString("errors").orElse("stop"),
+ this::getExceptionMetrics);
}
return errorHandler;
}
@@ -200,7 +200,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
}
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
@@ -306,16 +306,17 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
public synchronized void initOrUpdateRateLimiters(ActivityDef activityDef) {
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")
- .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) {
strideLimiter = RateLimiters.createOrUpdate(this, strideLimiter, spec);
}
+
public void createOrUpdateCycleLimiter(SimRateSpec spec) {
cycleLimiter = RateLimiters.createOrUpdate(this, cycleLimiter, spec);
}
@@ -326,7 +327,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
* defaults when requested.
*
* @param seq
- * - The {@link OpSequence} to derive the defaults from
+ * - The {@link OpSequence} to derive the defaults from
*/
public synchronized void setDefaultsFromOpSequence(OpSequence> seq) {
Optional strideOpt = getParams().getOptionalString("stride");
@@ -349,15 +350,15 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
} else {
if (0 == activityDef.getCycleCount()) {
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 cycles = this.activityDef.getCycleCount();
if (cycles < stride) {
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." +
- " If this was intended, then set stride low enough to allow it."
+ "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."
);
}
}
@@ -367,7 +368,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
if (0 < stride && 0 != cycleCount % stride) {
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 threadSpec = activityDef.getParams().getOptionalString("threads");
@@ -398,43 +399,42 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
if (activityDef.getThreads() > activityDef.getCycleCount()) {
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) {
logger.warn(() -> "For testing at scale, it is highly recommended that you " +
- "set threads to a value higher than the default of 1." +
- " hint: you can use threads=auto for reasonable default, or" +
- " consult the topic on threads with `help threads` for" +
- " more information.");
+ "set threads to a value higher than the default of 1." +
+ " hint: you can use threads=auto for reasonable default, or" +
+ " consult the topic on threads with `help threads` for" +
+ " 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.");
}
}
protected OpSequence> createOpSourceFromParsedOps(
- Map adapterCache,
- Map> mapperCache,
- List adapters,
- List pops
+// Map> adapterCache,
+// Map> mapperCache,
+ List> adapters,
+ List pops
) {
try {
List ratios = new ArrayList<>(pops.size());
- for (int i = 0; i < pops.size(); i++) {
- ParsedOp pop = pops.get(i);
+ for (ParsedOp pop : pops) {
long ratio = pop.takeStaticConfigOr("ratio", 1);
ratios.add(ratio);
}
SequencerType sequencerType = getParams()
- .getOptionalString("seq")
- .map(SequencerType::valueOf)
- .orElse(SequencerType.bucket);
+ .getOptionalString("seq")
+ .map(SequencerType::valueOf)
+ .orElse(SequencerType.bucket);
SequencePlanner> planner = new SequencePlanner<>(sequencerType);
int dryrunCount = 0;
@@ -445,16 +445,21 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
logger.info(() -> "skipped mapping op '" + pop.getName() + '\'');
continue;
}
- String dryrunSpec = pop.takeStaticConfigOr("dryrun", "none");
- boolean dryrun = "op".equalsIgnoreCase(dryrunSpec);
- DriverAdapter adapter = adapters.get(i);
- OpMapper opMapper = adapter.getOpMapper();
+ DriverAdapter,?> adapter = adapters.get(i);
+ OpMapper extends Op> opMapper = adapter.getOpMapper();
OpDispenser extends Op> dispenser = opMapper.apply(pop);
- if (dryrun) {
- dispenser = new DryRunOpDispenserWrapper(adapter, pop, dispenser);
+ String dryrunSpec = pop.takeStaticConfigOr("dryrun", "none");
+ if ("op".equalsIgnoreCase(dryrunSpec)) {
+ dispenser = new DryRunOpDispenserWrapper((DriverAdapter)adapter, pop, dispenser);
dryrunCount++;
+ } else if ("emit".equalsIgnoreCase(dryrunSpec)) {
+ dispenser = new EmitterOpDispenserWrapper(
+ (DriverAdapter)adapter,
+ pop,
+ (OpDispenser extends CycleOp>>) dispenser
+ );
}
// if (strict) {
@@ -475,7 +480,7 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
}
- protected List loadOpTemplates(Optional> defaultDriverAdapter) {
+ protected List loadOpTemplates(DriverAdapter, ?> defaultDriverAdapter) {
String tagfilter = activityDef.getParams().getOptionalString("tags").orElse("");
@@ -491,44 +496,44 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
// There were no ops, and it was because they were all filtered out
if (!unfilteredOps.isEmpty()) {
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());
Objects.requireNonNull(filteredOps);
if (filteredOps.isEmpty()) {
- throw new BasicError("Attempted to create synthetic ops from driver '" + defaultDriverAdapter.get().getAdapterName() + '\'' +
- " but no ops were created. You must provide either a workload or an op parameter. Activities require op templates.");
+ 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.");
}
} else {
throw new BasicError("""
- No op templates were provided. You must provide one of these activity parameters:
- 1) workload=some.yaml
- 2) op='inline template'
- 3) driver=stdout (or any other drive that can synthesize ops)""");
- }
- if (filteredOps.isEmpty()) {
- throw new BasicError("There were no active op templates with tag filter '" + tagfilter + '\'');
+ No op templates were provided. You must provide one of these activity parameters:
+ 1) workload=some.yaml
+ 2) op='inline template'
+ 3) driver=stdout (or any other drive that can synthesize ops)""");
}
}
+// if (filteredOps.isEmpty()) {
+// throw new BasicError("There were no active op templates with tag filter '" + tagfilter + '\'');
+// }
- if (filteredOps.isEmpty()) {
- throw new OpConfigError("No op templates found. You must provide either workload=... or op=..., or use " +
- "a default driver (driver=___). This includes " +
- ServiceLoader.load(DriverAdapter.class).stream()
- .filter(p -> {
- AnnotatedType[] annotatedInterfaces = p.type().getAnnotatedInterfaces();
- for (AnnotatedType ai : annotatedInterfaces) {
- if (ai.getType().equals(SyntheticOpTemplateProvider.class)) {
- return true;
- }
- }
- return false;
- })
- .map(d -> d.get().getAdapterName())
- .collect(Collectors.joining(",")));
- }
-
+// if (filteredOps.isEmpty()) {
+// throw new OpConfigError("No op templates found. You must provide either workload=... or op=..., or use " +
+// "a default driver (driver=___). This includes " +
+// ServiceLoader.load(DriverAdapter.class).stream()
+// .filter(p -> {
+// AnnotatedType[] annotatedInterfaces = p.type().getAnnotatedInterfaces();
+// for (AnnotatedType ai : annotatedInterfaces) {
+// if (ai.getType().equals(SyntheticOpTemplateProvider.class)) {
+// return true;
+// }
+// }
+// return false;
+// })
+// .map(d -> d.get().getAdapterName())
+// .collect(Collectors.joining(",")));
+// }
+//
return filteredOps;
}
@@ -550,30 +555,29 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
*
*
* @param
- * 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
- * A function to map an OpTemplate to the executable operation form required by
- * the native driver for this activity.
- * @param defaultAdapter
+ * A function to map an OpTemplate to the executable operation form required by
+ * the native driver for this activity.
+ * @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
*/
@Deprecated(forRemoval = true)
- protected OpSequence> createOpSequence(Function> opinit, boolean strict, Optional> defaultAdapter) {
+ protected OpSequence> createOpSequence(Function> opinit, boolean strict, DriverAdapter, ?> defaultAdapter) {
var stmts = loadOpTemplates(defaultAdapter);
List ratios = new ArrayList<>(stmts.size());
- for (int i = 0; i < stmts.size(); i++) {
- OpTemplate opTemplate = stmts.get(i);
+ for (OpTemplate opTemplate : stmts) {
long ratio = opTemplate.removeParamOrDefault("ratio", 1);
ratios.add(ratio);
}
SequencerType sequencerType = getParams()
- .getOptionalString("seq")
- .map(SequencerType::valueOf)
- .orElse(SequencerType.bucket);
+ .getOptionalString("seq")
+ .map(SequencerType::valueOf)
+ .orElse(SequencerType.bucket);
SequencePlanner> planner = new SequencePlanner<>(sequencerType);
try {
@@ -599,29 +603,37 @@ public class SimpleActivity extends NBBaseComponent implements Activity {
String op = activityDef.getParams().getOptionalString("op").orElse(null);
String stmt = activityDef.getParams().getOptionalString("stmt", "statement").orElse(null);
String workload = activityDef.getParams().getOptionalString("workload").orElse(null);
- if ((op!=null ? 1 : 0) + (stmt!=null ? 1 : 0) + (workload!=null ? 1 : 0) > 1) {
+
+ if ((op != null ? 1 : 0) + (stmt != null ? 1 : 0) + (workload != null ? 1 : 0) > 1) {
throw new OpConfigError("Only op, statement, or workload may be provided, not more than one.");
}
- if (op!=null && op.matches("^\\{[^}]+:[^}]+}$(?s)(?m)")) {
- workloadSource = "commandline: (op/json): '" + op + "'";
- return OpsLoader.loadString(op, OpTemplateFormat.json, activityDef.getParams(), null);
- } else if (op!=null && op.matches("^\\[[^]]+]$")) {
- 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);
- } else if (stmt!=null) {
+
+ 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);
- } else if (workload!=null) {
- workloadSource = "yaml:" + workload;
- return OpsLoader.loadPath(workload, activityDef.getParams(), "activities");
- } else {
- return OpsDocList.none();
}
+ 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();
+
} catch (Exception e) {
throw new OpConfigError("Error loading op templates: " + e, workloadSource, e);
}
From 6125c390aefe42fafe6e4a637e8a15b9842592d4 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 23:29:30 -0600
Subject: [PATCH 13/26] cleanup on aisle StandardActivity
---
.../uniform/StandardActivity.java | 41 ++++++++-----------
1 file changed, 17 insertions(+), 24 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
index f00354703..62531a882 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
@@ -16,7 +16,6 @@
package io.nosqlbench.engine.api.activityimpl.uniform;
-import com.codahale.metrics.Gauge;
import io.nosqlbench.adapter.diag.DriverAdapterLoader;
import io.nosqlbench.adapters.api.activityconfig.OpsLoader;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate;
@@ -59,21 +58,15 @@ import java.util.concurrent.ConcurrentHashMap;
*/
public class StandardActivity extends SimpleActivity implements SyntheticOpTemplateProvider, ActivityDefObserver {
private static final Logger logger = LogManager.getLogger("ACTIVITY");
-
private final OpSequence> sequence;
- private final NBConfigModel yamlmodel;
- private final ConcurrentHashMap adapters = new ConcurrentHashMap<>();
- private final ConcurrentHashMap> mappers = new ConcurrentHashMap<>();
-
- private final Gauge pendingOpsGauge;
- private final Gauge activeOpsGauge;
- private final Gauge completeOpsGauge;
+ private final ConcurrentHashMap> adapters = new ConcurrentHashMap<>();
public StandardActivity(NBComponent parent, ActivityDef activityDef) {
super(parent,activityDef);
OpsDocList workload;
Optional yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload");
+ NBConfigModel yamlmodel;
if (yaml_loc.isPresent()) {
Map disposable = new LinkedHashMap<>(activityDef.getParams());
workload = OpsLoader.loadPath(yaml_loc.get(), disposable, "activities");
@@ -92,14 +85,15 @@ public class StandardActivity extends SimpleActivity implements
}
// HERE, op templates are loaded before drivers are loaded
- List opTemplates = loadOpTemplates(defaultAdapter);
+ List opTemplates = loadOpTemplates(defaultAdapter.orElse(null));
List pops = new ArrayList<>();
- List adapterlist = new ArrayList<>();
+ List> adapterlist = new ArrayList<>();
NBConfigModel supersetConfig = ConfigModel.of(StandardActivity.class).add(yamlmodel);
Optional defaultDriverOption = activityDef.getParams().getOptionalString("driver");
+ ConcurrentHashMap> mappers = new ConcurrentHashMap<>();
for (OpTemplate ot : opTemplates) {
// ParsedOp incompleteOpDef = new ParsedOp(ot, NBConfiguration.empty(), List.of(), this);
String driverName = ot.getOptionalStringParam("driver", String.class)
@@ -116,7 +110,7 @@ public class StandardActivity extends SimpleActivity implements
// HERE
if (!adapters.containsKey(driverName)) {
- DriverAdapter adapter = Optional.of(driverName)
+ DriverAdapter,?> adapter = Optional.of(driverName)
.flatMap(name -> ServiceSelector.of(name,ServiceLoader.load(DriverAdapterLoader.class)).get())
.map(l -> l.load(this,NBLabels.forKV())).orElseThrow();
@@ -137,7 +131,7 @@ public class StandardActivity extends SimpleActivity implements
supersetConfig.assertValidConfig(activityDef.getParams().getStringStringMap());
- DriverAdapter adapter = adapters.get(driverName);
+ DriverAdapter,?> adapter = adapters.get(driverName);
adapterlist.add(adapter);
ParsedOp pop = new ParsedOp(ot, adapter.getConfiguration(), List.of(adapter.getPreprocessor()), this);
Optional discard = pop.takeOptionalStaticValue("driver", String.class);
@@ -152,8 +146,7 @@ public class StandardActivity extends SimpleActivity implements
}
try {
- boolean strict = activityDef.getParams().getOptionalBoolean("strict").orElse(false);
- sequence = createOpSourceFromParsedOps(adapters, mappers, adapterlist, pops);
+ sequence = createOpSourceFromParsedOps(adapterlist, pops);
} catch (Exception e) {
if (e instanceof OpConfigError) {
throw e;
@@ -161,12 +154,12 @@ public class StandardActivity extends SimpleActivity implements
throw new OpConfigError("Error mapping workload template to operations: " + e.getMessage(), null, e);
}
- this.pendingOpsGauge = create().gauge(
- "ops_pending",() -> this.getProgressMeter().getSummary().pending());
- this.activeOpsGauge = create().gauge(
- "ops_active",() -> this.getProgressMeter().getSummary().current());
- this.completeOpsGauge = create().gauge(
- "ops_complete",() -> this.getProgressMeter().getSummary().complete());
+ create().gauge(
+ "ops_pending", () -> this.getProgressMeter().getSummary().pending());
+ create().gauge(
+ "ops_active", () -> this.getProgressMeter().getSummary().current());
+ create().gauge(
+ "ops_complete", () -> this.getProgressMeter().getSummary().complete());
}
@Override
@@ -196,7 +189,7 @@ public class StandardActivity extends SimpleActivity implements
public synchronized void onActivityDefUpdate(ActivityDef activityDef) {
super.onActivityDefUpdate(activityDef);
- for (DriverAdapter adapter : adapters.values()) {
+ for (DriverAdapter,?> adapter : adapters.values()) {
if (adapter instanceof NBReconfigurable configurable) {
NBConfigModel cfgModel = configurable.getReconfigModel();
NBConfiguration cfg = cfgModel.matchConfig(activityDef.getParams());
@@ -227,7 +220,7 @@ public class StandardActivity extends SimpleActivity implements
@Override
public List getSyntheticOpTemplates(OpsDocList opsDocList, Map cfg) {
List opTemplates = new ArrayList<>();
- for (DriverAdapter adapter : adapters.values()) {
+ for (DriverAdapter,?> adapter : adapters.values()) {
if (adapter instanceof SyntheticOpTemplateProvider sotp) {
List newTemplates = sotp.getSyntheticOpTemplates(opsDocList, cfg);
opTemplates.addAll(newTemplates);
@@ -243,7 +236,7 @@ public class StandardActivity extends SimpleActivity implements
*/
@Override
public void shutdownActivity() {
- for (Map.Entry entry : adapters.entrySet()) {
+ for (Map.Entry> entry : adapters.entrySet()) {
String adapterName = entry.getKey();
DriverAdapter, ?> adapter = entry.getValue();
adapter.getSpaceCache().getElements().forEach((spaceName, space) -> {
From a6f6a4f71c496dfaab448dbac5f247fd28469745 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 23:29:32 -0600
Subject: [PATCH 14/26] reduce ambiguous warnings
---
.../nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java | 6 +++---
.../nosqlbench/nb/api/engine/activityimpl/ParameterMap.java | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java
index 2a1dd951f..c5edc8ddc 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java
@@ -28,9 +28,9 @@ public record CyclesSpec(long first_inclusive, long last_exclusive, String first
if (first_inclusive>last_exclusive) {
throw new InvalidParameterException("cycles must start with a lower first cycle than last cycle");
}
- if (first_inclusive==last_exclusive) {
- logger.warn("This cycles interval means zero total:" + this);
- }
+// if (first_inclusive==last_exclusive) {
+// logger.warn("This cycles interval means zero total:" + this);
+// }
}
public static CyclesSpec parse(String spec) {
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java
index c92922249..29d7beedf 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java
@@ -181,9 +181,9 @@ public class ParameterMap extends ConcurrentHashMap implements B
public void set(String paramName, Object newValue) {
- if (paramName.equals("cycles")) {
- logger.warn("Setting 'cycles' on the parameter map is likely causing a bug in your activity. Call setCycles on the def instead.");
- }
+// if (paramName.equals("cycles")) {
+// logger.warn("Setting 'cycles' on the parameter map is likely causing a bug in your activity. Call setCycles on the def instead.");
+// }
super.put(paramName, String.valueOf(newValue));
logger.info(() -> "setting param " + paramName + "=" + newValue);
markMutation();
From 353f4306e5ad9aaca833637c0ac61f2aaa973a60 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 23:29:35 -0600
Subject: [PATCH 15/26] remove broken slf4j-simple inclusions via openapi libs
---
adapter-http/pom.xml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/adapter-http/pom.xml b/adapter-http/pom.xml
index 11753f963..3b21715d1 100644
--- a/adapter-http/pom.xml
+++ b/adapter-http/pom.xml
@@ -57,6 +57,12 @@
org.openapitools
openapi-generator
7.0.0-beta
+
+
+ org.slf4j
+ *
+
+
io.swagger.parser.v3
From 612d7e49411a6c9c2c6243c76eaa0031b637d5c0 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sat, 9 Dec 2023 23:29:38 -0600
Subject: [PATCH 16/26] specialize use of op,stmt,workload on CLI
---
.../api/activityconfig/OpsLoader.java | 24 +++++++++++++++++++
.../api/activityconfig/rawyaml/OpsOwner.java | 2 +-
.../activityconfig/rawyaml/RawOpsLoader.java | 18 ++++++++++++--
3 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java
index 99169836b..cb99faf90 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java
@@ -17,6 +17,7 @@
package io.nosqlbench.adapters.api.activityconfig;
import com.amazonaws.util.StringInputStream;
+import com.google.gson.GsonBuilder;
import io.nosqlbench.nb.api.nbio.Content;
import io.nosqlbench.nb.api.nbio.NBIO;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.snakeyaml.engine.v2.api.Load;
+import org.snakeyaml.engine.v2.api.LoadSettings;
import scala.Option;
import sjsonnet.DefaultParseCache;
import sjsonnet.SjsonnetMain;
@@ -146,4 +149,25 @@ public class OpsLoader {
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 {
+ new Load(LoadSettings.builder().build()).loadFromString(workload);
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
}
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/OpsOwner.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/OpsOwner.java
index b355a4be6..223372f1a 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/OpsOwner.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/OpsOwner.java
@@ -22,7 +22,7 @@ import java.util.*;
public class OpsOwner extends RawOpFields {
- private final static List opsFieldNames = List.of("op","ops","operation","statement","statements");
+ private final static List opsFieldNames = List.of("op","ops","operation","stmt","statement","statements");
private List rawOpDefs = new ArrayList<>();
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/RawOpsLoader.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/RawOpsLoader.java
index 32bd76f65..b7fc11ab3 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/RawOpsLoader.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/rawyaml/RawOpsLoader.java
@@ -16,6 +16,8 @@
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.NBIO;
import io.nosqlbench.nb.api.errors.BasicError;
@@ -36,6 +38,11 @@ public class RawOpsLoader {
private final ArrayList> 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 transformer) {
addTransformer(transformer);
}
@@ -44,6 +51,15 @@ public class RawOpsLoader {
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 newTransformer) {
Collections.addAll(this.transformers, newTransformer);
}
@@ -79,8 +95,6 @@ public class RawOpsLoader {
}
public RawOpsDocList parseYaml(String data) {
- LoadSettings loadSettings = LoadSettings.builder().build();
- Load yaml = new Load(loadSettings);
Iterable objects = yaml.loadAllFromString(data);
List newDocList = new ArrayList<>();
From 2d505e5ad7b0b763c6b8b26caea56a66ed7992cd Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:15:04 -0600
Subject: [PATCH 17/26] add cql docs stub
---
adapter-cqld4/src/main/resources/cql.md | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 adapter-cqld4/src/main/resources/cql.md
diff --git a/adapter-cqld4/src/main/resources/cql.md b/adapter-cqld4/src/main/resources/cql.md
new file mode 100644
index 000000000..d728bea10
--- /dev/null
+++ b/adapter-cqld4/src/main/resources/cql.md
@@ -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.
From 5e5c48f1ff2b73600140ddafc007e3838a821e7c Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:17:25 -0600
Subject: [PATCH 18/26] allow "cql" to resolve as a selector for
DriverAdapterLoader
---
.../adapter/cqld4/CqlDriverAdapterLoader.java | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterLoader.java
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterLoader.java b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterLoader.java
new file mode 100644
index 000000000..92a760345
--- /dev/null
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/CqlDriverAdapterLoader.java
@@ -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);
+ }
+}
From 309cb675879d0e8ca40e39100cb6152a0f47d90e Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:17:27 -0600
Subject: [PATCH 19/26] Allow progress indicator to be configured
---
engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
index 09534b25d..afc422be1 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
@@ -416,7 +416,8 @@ public class NBCLI implements Function, NBLabeledElement {
// TODO: Decide whether this should be part of ctor consistency
Map.of(
"summary", options.getReportSummaryTo(),
- "logsdir", options.getLogsDirectory().toString()
+ "logsdir", options.getLogsDirectory().toString(),
+ "progress", options.getProgressSpec()
).forEach(session::setComponentProp);
options.wantsReportCsvTo().ifPresent(cfg -> {
From a0eaf9758b06a5a40ca16efd7a4c51fbddfe24e3 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:17:29 -0600
Subject: [PATCH 20/26] make map format checker for workload specific to map
structures
---
.../io/nosqlbench/adapters/api/activityconfig/OpsLoader.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java
index cb99faf90..95863216c 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityconfig/OpsLoader.java
@@ -164,8 +164,8 @@ public class OpsLoader {
// into the parsers in a non-exception way
public static boolean isYaml(String workload) {
try {
- new Load(LoadSettings.builder().build()).loadFromString(workload);
- return true;
+ Object result = new Load(LoadSettings.builder().build()).loadFromString(workload);
+ return (result instanceof Map);
} catch (Exception e) {
return false;
}
From 7606cb94fcda6da23601f9c2b0914d0c88201736 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:17:32 -0600
Subject: [PATCH 21/26] make progress reporter send a final report
---
.../lifecycle/activity/ActivitiesProgressIndicator.java | 7 +++++++
.../lifecycle/scenario/container/NBBufferedContainer.java | 6 ++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesProgressIndicator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesProgressIndicator.java
index b6c034b04..7a2103371 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesProgressIndicator.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesProgressIndicator.java
@@ -80,6 +80,10 @@ public class ActivitiesProgressIndicator implements Runnable {
@Override
public void run() {
+ report();
+ }
+
+ private void report() {
Collection progressMeterDisplays = sc.getProgressMeters();
for (ProgressMeterDisplay meter : progressMeterDisplays) {
@@ -117,4 +121,7 @@ public class ActivitiesProgressIndicator implements Runnable {
return "ProgressIndicator/" + this.indicatorSpec;
}
+ public void finish() {
+ report();
+ }
}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java
index abc0a0730..e441facbf 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/container/NBBufferedContainer.java
@@ -95,7 +95,8 @@ public class NBBufferedContainer extends NBBaseComponent implements NBContainer
.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");
}
+ activitiesProgressIndicator.finish();
return safeCmdResult;
}
@@ -195,6 +197,6 @@ public class NBBufferedContainer extends NBBaseComponent implements NBContainer
final var retiringScenarioShutdownHook = this.containerShutdownHook;
this.containerShutdownHook = null;
retiringScenarioShutdownHook.run();
- this.logger.debug("removing container shutdown hook");
+ logger.debug("removing container shutdown hook");
}
}
From 4fa099fb4578d662e307c6e1ca77884715266ba3 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:17:34 -0600
Subject: [PATCH 22/26] move markdown finder over to DriverAdapterLoader
---
.../engine/core/metadata/MarkdownFinder.java | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownFinder.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownFinder.java
index a98a3574f..9a7aefd90 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownFinder.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownFinder.java
@@ -16,7 +16,11 @@
package io.nosqlbench.engine.core.metadata;
+import io.nosqlbench.adapter.diag.DriverAdapterLoader;
+import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
+import io.nosqlbench.nb.annotations.ServiceSelector;
import io.nosqlbench.nb.api.config.standard.TestComponent;
+import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.nbio.Content;
import io.nosqlbench.nb.api.nbio.NBIO;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
@@ -28,6 +32,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Optional;
+import java.util.ServiceLoader;
public class MarkdownFinder {
private static final Logger logger = LogManager.getLogger(MarkdownFinder.class);
@@ -35,7 +40,7 @@ public class MarkdownFinder {
public static Optional forHelpTopic(final String topic) {
String help = null;
try {
- help = new MarkdownFinder().forActivityInstance(topic);
+ help = new MarkdownFinder().forDriverAdapterType(topic);
return Optional.ofNullable(help);
} catch (final Exception e) {
MarkdownFinder.logger.debug("Did not find help topic for activity instance: {}", topic);
@@ -63,12 +68,11 @@ public class MarkdownFinder {
return docs.map(Content::asString).orElse(null);
}
- public String forActivityInstance(final String s) {
- final ActivityType activityType = new ActivityTypeLoader().load(ActivityDef.parseActivityDef("driver="+s), TestComponent.INSTANCE).orElseThrow(
- () -> new BasicError("Unable to find driver for '" + s + '\'')
- );
- return this.forResourceMarkdown(activityType.getClass().getAnnotation(Service.class)
- .selector() + ".md", "docs/");
+ public String forDriverAdapterType(final String selector) {
+
+ ServiceSelector.of(selector, ServiceLoader.load(DriverAdapterLoader.class)).get()
+ .orElseThrow(() -> new BasicError("Unable to find driver for '" + selector + "'"));
+ return this.forResourceMarkdown(selector + ".md", "docs/");
}
}
From 42127a9d521cb701620296e478934cb821e96f66 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:17:36 -0600
Subject: [PATCH 23/26] unbreak --pin option for bar commands
---
.../src/main/java/io/nosqlbench/engine/cli/NBCLIArgsFile.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIArgsFile.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIArgsFile.java
index 1063792fa..f0dce30c8 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIArgsFile.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIArgsFile.java
@@ -496,7 +496,7 @@ public class NBCLIArgsFile {
}
String opt = iter.next();
- if (!opt.startsWith("-") || reservedPredicate.test(opt)) {
+ if (!opt.startsWith("-")) {
throw new RuntimeException("Arguments following the --pin option must not" +
" be commands like '" + opt + "'");
}
From 6d93155ce13a07ac55e2c7b7b29f7f7cfbf28b2e Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 21:17:38 -0600
Subject: [PATCH 24/26] use correct parameter for container command
---
.../engine/core/lifecycle/session/NBCommandAssembly.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
index f3b3fea93..8d3e8c8f2 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
@@ -46,11 +46,11 @@ public class NBCommandAssembly {
for (Cmd cmd : cmds) {
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";
- tagged.add(cmd.forContainer(ctx, step));
+ tagged.add(cmd.forContainer(specificContainer, step));
} else if (cmd.getCmdType() == CmdType.container) {
- containerName = cmd.getArgValue("container");
+ containerName = cmd.getArgValue("name");
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. " +
"This is the default scenario name, and if you are using different scenario names you should pick something that is different and specific.");
From 842cca0d9dc738c9b00efc37bf9c8d74aa679f06 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Sun, 10 Dec 2023 22:07:11 -0600
Subject: [PATCH 25/26] make virtdata microbench easier to read
---
.../virtdata/userlibs/apps/valuechecker/RunData.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/valuechecker/RunData.java b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/valuechecker/RunData.java
index da58f2bbf..58cf31d3b 100644
--- a/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/valuechecker/RunData.java
+++ b/virtdata-userlibs/src/main/java/io/nosqlbench/virtdata/userlibs/apps/valuechecker/RunData.java
@@ -42,10 +42,10 @@ public class RunData {
public String toString() {
return " run data = [derived values in brackets]\n" +
" specifier = '" + spec + "'\n" +
+ " cycles = [" + min + ".." + max + ")\n" +
" threads = " + threads + "\n" +
- " min = " + min + "\n" +
- " max = " + max + "\n" +
- " [count] = " + (max - min) + "\n" +
+ " [count/thread] = " + (max - min) + "\n" +
+ " [total] = " + (max - min) * threads + "\n" +
" buffersize = " + buffersize + "\n" +
" [totalGenTimeMs] = " + totalGenTimeMs + "\n" +
" [totalCmpTimeMs] = " + totalCmpTimeMs + "\n" +
From 8cb3051af2aab8b4f445ca8dfa4edfc01c1d817b Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Fri, 15 Dec 2023 12:57:03 -0600
Subject: [PATCH 26/26] fixes from PR and export-docs fix
---
.../activityimpl/uniform/actions/StandardAction.java | 2 +-
.../nb/api/engine/activityimpl/CyclesSpec.java | 3 ---
.../nb/api/engine/activityimpl/ParameterMap.java | 6 ------
.../docexporter/BundledMarkdownZipExporter.java | 10 ++++++----
4 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
index c07c5e7fe..3e0b2eedc 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
@@ -103,7 +103,7 @@ public class StandardAction, R extends Op> impl
if (op instanceof RunnableOp) {
((RunnableOp) op).run();
} else if (op instanceof CycleOp>) {
- result = ((CycleOp) op).apply(cycle);
+ result = ((CycleOp>) op).apply(cycle);
} else if (op instanceof ChainingOp) {
result = ((ChainingOp) op).apply(result);
} else {
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java
index c5edc8ddc..3c03c561f 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/CyclesSpec.java
@@ -28,9 +28,6 @@ public record CyclesSpec(long first_inclusive, long last_exclusive, String first
if (first_inclusive>last_exclusive) {
throw new InvalidParameterException("cycles must start with a lower first cycle than last cycle");
}
-// if (first_inclusive==last_exclusive) {
-// logger.warn("This cycles interval means zero total:" + this);
-// }
}
public static CyclesSpec parse(String spec) {
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java
index 29d7beedf..694f24dc9 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/activityimpl/ParameterMap.java
@@ -47,8 +47,6 @@ public class ParameterMap extends ConcurrentHashMap implements B
private final static Logger logger = LogManager.getLogger("PARAMS");
private final static Gson gson = new GsonBuilder().create();
-
- // private final ConcurrentHashMap paramMap = new ConcurrentHashMap<>(10);
private final AtomicLong changeCounter;
private final LinkedList listeners = new LinkedList<>();
@@ -73,7 +71,6 @@ public class ParameterMap extends ConcurrentHashMap implements B
+ ". Just use one of them.");
}
return Arrays.stream(objects).map(String::valueOf).findAny();
- //return Optional.ofNullable(super.get(paramName)).map(String::valueOf);
}
public Optional removeOptionalString(String... paramName) {
@@ -181,9 +178,6 @@ public class ParameterMap extends ConcurrentHashMap implements B
public void set(String paramName, Object newValue) {
-// if (paramName.equals("cycles")) {
-// logger.warn("Setting 'cycles' on the parameter map is likely causing a bug in your activity. Call setCycles on the def instead.");
-// }
super.put(paramName, String.valueOf(newValue));
logger.info(() -> "setting param " + paramName + "=" + newValue);
markMutation();
diff --git a/nbr/src/main/java/io/nosqlbench/api/docsapi/docexporter/BundledMarkdownZipExporter.java b/nbr/src/main/java/io/nosqlbench/api/docsapi/docexporter/BundledMarkdownZipExporter.java
index 93d026658..5e6963fec 100644
--- a/nbr/src/main/java/io/nosqlbench/api/docsapi/docexporter/BundledMarkdownZipExporter.java
+++ b/nbr/src/main/java/io/nosqlbench/api/docsapi/docexporter/BundledMarkdownZipExporter.java
@@ -30,9 +30,7 @@ import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
import java.util.function.Function;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -56,9 +54,13 @@ public class BundledMarkdownZipExporter {
DocsBinder docsNameSpaces = BundledMarkdownLoader.loadBundledMarkdown(); //Loads the drivers under @Service Annotation
+ Set loaded = new HashSet<>();
for (DocsNameSpace docs_ns : docsNameSpaces) {
for (Path p : docs_ns) {
- addEntry(p, p.getParent(), zipstream, docs_ns.getName() + "/");
+ if (!loaded.contains(p)) {
+ addEntry(p, p.getParent(), zipstream, docs_ns.getName() + "/");
+ loaded.add(p);
+ }
}
}