From 8cf81b38e4e071298b4c8e03be705a2f0edfb4c2 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 16:52:13 -0600 Subject: [PATCH 01/12] simply TagFilter for logging --- .../nosqlbench/engine/api/util/TagFilter.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/adapters-api/src/main/java/io/nosqlbench/engine/api/util/TagFilter.java b/adapters-api/src/main/java/io/nosqlbench/engine/api/util/TagFilter.java index d3c24d85e..2dbb19c71 100644 --- a/adapters-api/src/main/java/io/nosqlbench/engine/api/util/TagFilter.java +++ b/adapters-api/src/main/java/io/nosqlbench/engine/api/util/TagFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,10 @@ package io.nosqlbench.engine.api.util; import io.nosqlbench.api.engine.util.Tagged; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.function.BiFunction; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -98,6 +101,19 @@ public class TagFilter { private final static Pattern conjugateForm = Pattern.compile("^(?\\w+)\\((?.+)\\)$",Pattern.DOTALL|Pattern.MULTILINE); + public List filter(List tagged) { + return tagged.stream() + .filter(this::matchesTagged) + .collect(Collectors.toList()); + } + + public List filterLog(List tagged) { + return tagged.stream() + .map(this::matchesTaggedResult) + .map(Result::getLog) + .collect(Collectors.toList()); + } + private enum Conjugate { any((i,j) -> (j>0)), all((i,j) -> (i.intValue()==j.intValue())), @@ -201,10 +217,6 @@ public class TagFilter { return new Result(matched, log); } - public Result matchesMap(Map tags) { - return matches(tags); - } - public Result matchesTaggedResult(Tagged item) { return matches(item.getTags()); } From 6c0d60706d209ee2eb4def25d86acc9fb181fc05 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 16:52:19 -0600 Subject: [PATCH 02/12] avoid NPE for empty op list --- .../nosqlbench/engine/api/activityimpl/SimpleActivity.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java index 9a4da328a..b00a9b95f 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter; import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiters; import io.nosqlbench.engine.api.activityapi.ratelimits.RateSpec; import io.nosqlbench.engine.api.activityconfig.StatementsLoader; +import io.nosqlbench.engine.api.activityconfig.rawyaml.RawStmtsDocList; import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; import io.nosqlbench.engine.api.activityimpl.motor.RunStateTally; @@ -551,7 +552,6 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs StmtsDocList stmtsDocList = loadStmtsDocList(); - List unfilteredOps = stmtsDocList.getStmts(); List filteredOps = stmtsDocList.getStmts(tagfilter); @@ -652,7 +652,7 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs protected StmtsDocList loadStmtsDocList() { try { - StmtsDocList stmtsDocList = null; + StmtsDocList stmtsDocList = new StmtsDocList(new RawStmtsDocList(List.of())); Optional stmt = activityDef.getParams().getOptionalString("op", "stmt", "statement"); Optional op_yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload"); @@ -663,7 +663,6 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs stmtsDocList = StatementsLoader.loadPath(logger, op_yaml_loc.get(), activityDef.getParams(), "activities"); workloadSource = "yaml:" + op_yaml_loc.get(); } - return stmtsDocList; } catch (Exception e) { From 4175e795493e389e9cac9d2254fa4f0369c3c9fb Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 16:52:33 -0600 Subject: [PATCH 03/12] improve logging levels for debugging --- .../api/activityimpl/motor/RunStateTally.java | 28 +++++++++---------- .../core/lifecycle/ExecutionResult.java | 16 +++++------ .../activity/ActivitiesExceptionHandler.java | 4 +-- .../activity/ActivityExceptionHandler.java | 4 +-- 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/RunStateTally.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/RunStateTally.java index dc861f9cc..4dfc3c851 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/RunStateTally.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/RunStateTally.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,8 +20,6 @@ import io.nosqlbench.engine.api.activityapi.core.RunState; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.Arrays; - /** *

Synopsis

*

Event-oriented tally of the runtime states of all @@ -90,9 +88,9 @@ public class RunStateTally { logger.trace(() -> this +" -"+from+ String.format(":%04d",counts[from.ordinal()])+ ", +"+to+ String.format(":%04d",counts[to.ordinal()])); if (counts[from.ordinal()]==0 || counts[to.ordinal()]==1) { - logger.debug(() -> "NOTIFYing on edge "+ - "from " + from + String.format(":%04d",counts[from.ordinal()]) + - " to " + to + String.format(":%04d",counts[to.ordinal()])); +// logger.debug(() -> "NOTIFYing on edge "+ +// "from " + from + String.format(":%04d",counts[from.ordinal()]) + +// " to " + to + String.format(":%04d",counts[to.ordinal()])); notifyAll(); } } @@ -107,7 +105,7 @@ public class RunStateTally { counts[state.ordinal()]++; logger.trace(() -> this +" +"+state+ String.format(":%04d",counts[state.ordinal()])); if (counts[state.ordinal()]==1) { - logger.debug(() -> "NOTIFYing on ++-SOME edge for " + state + String.format(":%04d",counts[state.ordinal()])); +// logger.debug(() -> "NOTIFYing on ++-SOME edge for " + state + String.format(":%04d",counts[state.ordinal()])); notifyAll(); } } @@ -122,7 +120,7 @@ public class RunStateTally { counts[state.ordinal()]--; logger.trace(() -> this +" -"+state+ String.format(":%04d",counts[state.ordinal()])); if (counts[state.ordinal()]==0) { - logger.debug(() -> "NOTIFYing on 00-NONE edge for " + state + String.format(":%04d",counts[state.ordinal()])); +// logger.debug(() -> "NOTIFYing on 00-NONE edge for " + state + String.format(":%04d",counts[state.ordinal()])); notifyAll(); } } @@ -145,7 +143,7 @@ public class RunStateTally { * @return A {@link RunStateImage}, indicating success or failure, and the view of states at the time of evaluation */ public synchronized RunStateImage awaitNoneOther(long timeoutMillis, RunState... runStates) { - logger.debug(() -> "☐ Awaiting only " + Arrays.toString(runStates) + " for " + timeoutMillis+"ms"); +// logger.debug(() -> "☐ Awaiting only " + Arrays.toString(runStates) + " for " + timeoutMillis+"ms"); long timeoutAt = timeoutAt(timeoutMillis); int sum=0; @@ -171,7 +169,7 @@ public class RunStateTally { } boolean timedout = (sum!=0); - logger.debug(() -> (timedout ? "✘ TIMED-OUT awaiting only " : "☑ Awaited only " ) + toString(runStates)); +// logger.debug(() -> (timedout ? "✘ TIMED-OUT awaiting only " : "☑ Awaited only " ) + toString(runStates)); return new RunStateImage(this.counts,timedout); } @@ -194,7 +192,7 @@ public class RunStateTally { * @return A {@link RunStateImage}, indicating success or failure, and the view of states at the time of evaluation */ public synchronized RunStateImage awaitNoneOf(long timeoutMillis, RunState... runStates) { - logger.debug(() -> "☐ Awaiting none of " + Arrays.toString(runStates)+ " for " + timeoutMillis+"ms"); +// logger.debug(() -> "☐ Awaiting none of " + Arrays.toString(runStates)+ " for " + timeoutMillis+"ms"); long timeoutAt = timeoutAt(timeoutMillis); int sum=0; @@ -212,7 +210,7 @@ public class RunStateTally { } } boolean timedout=sum==0; - logger.debug(() -> (timedout ? "✘ TIMED-OUT awaiting none of " : "☑ Awaited none of " ) + toString(runStates)); +// logger.debug(() -> (timedout ? "✘ TIMED-OUT awaiting none of " : "☑ Awaited none of " ) + toString(runStates)); return new RunStateImage(this.counts,timedout); } @@ -233,13 +231,13 @@ public class RunStateTally { * @return A {@link RunStateImage}, indicating success or failure, and the view of states at the time of evaluation */ public synchronized RunStateImage awaitAny(long timeoutMillis, RunState... runStates) { - logger.debug(() -> "☐ Awaiting any " + Arrays.toString(runStates) + " for " + timeoutMillis + "ms"); +// logger.debug(() -> "☐ Awaiting any " + Arrays.toString(runStates) + " for " + timeoutMillis + "ms"); long timeoutAt = timeoutAt(timeoutMillis); while (System.currentTimeMillis()0) { - logger.debug("☑ Awaited any " + toString(runStates)); +// logger.debug("☑ Awaited any " + toString(runStates)); return new RunStateImage(this.counts,false); } } @@ -248,7 +246,7 @@ public class RunStateTally { } catch (InterruptedException e) { } } - logger.debug(() -> "✘ TIMED-OUT awaiting any of " + toString(runStates)); +// logger.debug(() -> "✘ TIMED-OUT awaiting any of " + toString(runStates)); return new RunStateImage(this.counts,true); } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionResult.java index af7f6ef00..1bfaf332e 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionResult.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionResult.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,13 +38,13 @@ public class ExecutionResult { this.exception = error; this.iolog = ((iolog != null) ? iolog + "\n\n" : "") + exception; logger.debug("populating "+(error==null ? "NORMAL" : "ERROR")+" scenario result"); - if (logger.isTraceEnabled()) { - StackTraceElement[] st = Thread.currentThread().getStackTrace(); - for (int i = 0; i < st.length; i++) { - logger.debug(":AT " + st[i].getFileName()+":"+st[i].getLineNumber()+":"+st[i].getMethodName()); - if (i>10) break; - } - } +// if (logger.isTraceEnabled()) { +// StackTraceElement[] st = Thread.currentThread().getStackTrace(); +// for (int i = 0; i < st.length; i++) { +// logger.debug(":AT " + st[i].getFileName()+":"+st[i].getLineNumber()+":"+st[i].getMethodName()); +// if (i>10) break; +// } +// } } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesExceptionHandler.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesExceptionHandler.java index dd20c7948..d1b12af81 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesExceptionHandler.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivitiesExceptionHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ public class ActivitiesExceptionHandler implements Thread.UncaughtExceptionHandl public ActivitiesExceptionHandler(ScenarioController controller) { this.controller = controller; - logger.debug(() -> "Activity exception handler starting up for executor '" + this.controller + "'"); + logger.debug(() -> "Activities exception handler starting up for executor '" + this.controller + "'"); } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExceptionHandler.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExceptionHandler.java index 751c26cbf..822b07dc7 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExceptionHandler.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExceptionHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ public class ActivityExceptionHandler implements Thread.UncaughtExceptionHandler public ActivityExceptionHandler(ActivityExecutor executor) { this.executor = executor; - logger.debug(() -> "Activity exception handler starting up for executor '" + executor + "'"); + logger.debug(() -> "Activity executor exception handler starting up for executor '" + executor.getActivityDef().getAlias() + "'"); } From a85c38f15ed781718ddef59478830f2143319190 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 16:52:57 -0600 Subject: [PATCH 04/12] restore tag filtering diagnostics --- .../api/activityconfig/yaml/StmtsDocList.java | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java b/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java index 7a13d74ec..518880c9e 100644 --- a/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java +++ b/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,13 +41,6 @@ public class StmtsDocList implements Iterable { this.rawStmtsDocList = rawStmtsDocList; } - public List getStmtDocs(String tagFilter) { - TagFilter tf = new TagFilter(tagFilter); - return getStmtDocs().stream() - .filter(tf::matchesTagged) - .collect(Collectors.toList()); - } - public List getStmtDocs() { return rawStmtsDocList.getStmtsDocs().stream() .map(StmtsDoc::new) @@ -65,15 +58,17 @@ public class StmtsDocList implements Iterable { */ public List getStmts(String tagFilterSpec) { TagFilter ts = new TagFilter(tagFilterSpec); - List opTemplates = new ArrayList<>(); - - getStmtDocs().stream() + List allOpTemplates = getStmtDocs().stream() .flatMap(d -> d.getStmts().stream()) - .filter(ts::matchesTagged) - .forEach(opTemplates::add); + .collect(Collectors.toList()); - return opTemplates; + List filteredOpTemplates = ts.filter(allOpTemplates); + for (String log : ts.filterLog(allOpTemplates)) { + logger.debug(log); + } + + return filteredOpTemplates; } From f63c7aeadb47be3fd9f0b543f8681f1af889e089 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 16:53:33 -0600 Subject: [PATCH 05/12] replace CI+CD friendly revision --- .../workflows/{release.yml => prerelease.yml} | 2 +- adapter-cqld4/pom.xml | 4 +- adapter-diag/pom.xml | 6 +- adapter-dynamodb/pom.xml | 4 +- adapter-http/pom.xml | 4 +- adapter-kafka/pom.xml | 6 +- adapter-mongodb/pom.xml | 4 +- adapter-pulsar/pom.xml | 6 +- adapter-s4j/pom.xml | 6 +- adapter-stdout/pom.xml | 6 +- adapter-tcp/pom.xml | 6 +- adapters-api/pom.xml | 8 +-- docsys/pom.xml | 6 +- engine-api/pom.xml | 12 ++-- engine-cli/pom.xml | 6 +- engine-core/pom.xml | 4 +- engine-docker/pom.xml | 4 +- engine-docs/pom.xml | 4 +- engine-extensions/pom.xml | 4 +- mvn-defaults/pom.xml | 4 +- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 +- nb-spectest/pom.xml | 2 +- nb5/pom.xml | 26 ++++---- nbr-examples/pom.xml | 6 +- nbr/pom.xml | 12 ++-- pom.xml | 2 +- scripts/release-revision.sh | 61 +++++++++++++++++++ virtdata-api/pom.xml | 6 +- virtdata-lang/pom.xml | 2 +- virtdata-lib-basics/pom.xml | 4 +- virtdata-lib-curves4/pom.xml | 6 +- virtdata-lib-random/pom.xml | 6 +- virtdata-lib-realer/pom.xml | 4 +- virtdata-realdata/pom.xml | 4 +- virtdata-userlibs/pom.xml | 16 ++--- 36 files changed, 165 insertions(+), 104 deletions(-) rename .github/workflows/{release.yml => prerelease.yml} (99%) create mode 100755 scripts/release-revision.sh diff --git a/.github/workflows/release.yml b/.github/workflows/prerelease.yml similarity index 99% rename from .github/workflows/release.yml rename to .github/workflows/prerelease.yml index cc1fe4ae1..8c0d902f7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/prerelease.yml @@ -3,7 +3,7 @@ name: release on: push: branches: - - main + - prerelease-testing paths: - RELEASENOTES.** diff --git a/adapter-cqld4/pom.xml b/adapter-cqld4/pom.xml index 51476c376..a7a10ec9d 100644 --- a/adapter-cqld4/pom.xml +++ b/adapter-cqld4/pom.xml @@ -20,7 +20,7 @@ io.nosqlbench mvn-defaults - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -38,7 +38,7 @@ io.nosqlbench adapters-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/adapter-diag/pom.xml b/adapter-diag/pom.xml index 363ab334b..d76f0ace5 100644 --- a/adapter-diag/pom.xml +++ b/adapter-diag/pom.xml @@ -21,7 +21,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -37,13 +37,13 @@ io.nosqlbench nb-annotations - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} compile diff --git a/adapter-dynamodb/pom.xml b/adapter-dynamodb/pom.xml index ce3a4c32f..61e2648dc 100644 --- a/adapter-dynamodb/pom.xml +++ b/adapter-dynamodb/pom.xml @@ -20,7 +20,7 @@ io.nosqlbench mvn-defaults - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -37,7 +37,7 @@ io.nosqlbench adapters-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/adapter-http/pom.xml b/adapter-http/pom.xml index de271e1b3..04b6d00f8 100644 --- a/adapter-http/pom.xml +++ b/adapter-http/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -85,7 +85,7 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} compile diff --git a/adapter-kafka/pom.xml b/adapter-kafka/pom.xml index 6c67fe16f..378bea8f5 100644 --- a/adapter-kafka/pom.xml +++ b/adapter-kafka/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -87,13 +87,13 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapters-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/adapter-mongodb/pom.xml b/adapter-mongodb/pom.xml index 64663ad62..a60bc51d2 100644 --- a/adapter-mongodb/pom.xml +++ b/adapter-mongodb/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -36,7 +36,7 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/adapter-pulsar/pom.xml b/adapter-pulsar/pom.xml index 4d600916a..3de581fe0 100644 --- a/adapter-pulsar/pom.xml +++ b/adapter-pulsar/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -41,13 +41,13 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapters-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/adapter-s4j/pom.xml b/adapter-s4j/pom.xml index 752988d52..61d40877b 100644 --- a/adapter-s4j/pom.xml +++ b/adapter-s4j/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -45,13 +45,13 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapters-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/adapter-stdout/pom.xml b/adapter-stdout/pom.xml index 8c15f3995..be7d7179d 100644 --- a/adapter-stdout/pom.xml +++ b/adapter-stdout/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -38,14 +38,14 @@ io.nosqlbench nb-annotations - 5.17.1-SNAPSHOT + ${revision} compile io.nosqlbench adapters-api - 5.17.1-SNAPSHOT + ${revision} compile diff --git a/adapter-tcp/pom.xml b/adapter-tcp/pom.xml index 6b31feed5..2baab2131 100644 --- a/adapter-tcp/pom.xml +++ b/adapter-tcp/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -40,12 +40,12 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-stdout - 5.17.1-SNAPSHOT + ${revision} compile diff --git a/adapters-api/pom.xml b/adapters-api/pom.xml index fb272af73..0d9c2219a 100644 --- a/adapters-api/pom.xml +++ b/adapters-api/pom.xml @@ -21,7 +21,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -39,19 +39,19 @@ io.nosqlbench nb-spectest - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench nb-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-userlibs - 5.17.1-SNAPSHOT + ${revision} diff --git a/docsys/pom.xml b/docsys/pom.xml index 7d4680721..3f63e3b87 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -28,7 +28,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -37,7 +37,7 @@ io.nosqlbench nb-api - 5.17.1-SNAPSHOT + ${revision} @@ -128,7 +128,7 @@ io.nosqlbench virtdata-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/engine-api/pom.xml b/engine-api/pom.xml index b80c8c09a..cb02185b4 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -21,7 +21,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -39,31 +39,31 @@ io.nosqlbench nb-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapters-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench nb-spectest - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench nb-annotations - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-userlibs - 5.17.1-SNAPSHOT + ${revision} diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index a87142a49..29b9caff8 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -39,13 +39,13 @@ io.nosqlbench engine-core - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench engine-docker - 5.17.1-SNAPSHOT + ${revision} diff --git a/engine-core/pom.xml b/engine-core/pom.xml index c11ec2d89..5be1c8c0f 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -21,7 +21,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -38,7 +38,7 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index f20e97203..944fdc3ee 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -72,7 +72,7 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 0a05c5400..69e46c136 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -44,7 +44,7 @@ io.nosqlbench docsys - 5.17.1-SNAPSHOT + ${revision} diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 7fa3ffc9e..02f3d7b6e 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -38,7 +38,7 @@ io.nosqlbench engine-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 1d5068535..dac0edfea 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -19,12 +19,12 @@ io.nosqlbench mvn-defaults - 5.17.1-SNAPSHOT + ${revision} pom - 5.17.0-SNAPSHOT + 5.17.1-SNAPSHOT INFO diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 3de179b44..1c95dcb10 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -21,7 +21,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 3dae0ddcc..38e4550f2 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -57,7 +57,7 @@ io.nosqlbench nb-annotations - 5.17.1-SNAPSHOT + ${revision} diff --git a/nb-spectest/pom.xml b/nb-spectest/pom.xml index adddac856..8d9901f47 100644 --- a/nb-spectest/pom.xml +++ b/nb-spectest/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults diff --git a/nb5/pom.xml b/nb5/pom.xml index 7ea6e0ddd..ccbfeba90 100644 --- a/nb5/pom.xml +++ b/nb5/pom.xml @@ -21,7 +21,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -40,7 +40,7 @@ io.nosqlbench nbr - 5.17.1-SNAPSHOT + ${revision} @@ -56,37 +56,37 @@ io.nosqlbench adapter-tcp - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-mongodb - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-stdout - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-diag - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-dynamodb - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-cqld4 - 5.17.1-SNAPSHOT + ${revision} @@ -98,13 +98,13 @@ io.nosqlbench adapter-http - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-pulsar - 5.17.1-SNAPSHOT + ${revision} @@ -116,13 +116,13 @@ io.nosqlbench adapter-s4j - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-kafka - 5.17.1-SNAPSHOT + ${revision} @@ -245,7 +245,7 @@ io.nosqlbench adapter-mongodb - 5.17.1-SNAPSHOT + ${revision} diff --git a/nbr-examples/pom.xml b/nbr-examples/pom.xml index 1a410ab12..2691012d9 100644 --- a/nbr-examples/pom.xml +++ b/nbr-examples/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -39,13 +39,13 @@ io.nosqlbench nbr - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-diag - 5.17.1-SNAPSHOT + ${revision} diff --git a/nbr/pom.xml b/nbr/pom.xml index 9d0312d47..044e1210d 100644 --- a/nbr/pom.xml +++ b/nbr/pom.xml @@ -21,7 +21,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -40,31 +40,31 @@ io.nosqlbench engine-cli - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench engine-docs - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench engine-core - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench engine-extensions - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench adapter-diag - 5.17.1-SNAPSHOT + ${revision} diff --git a/pom.xml b/pom.xml index 1ec182672..5ef2787b2 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} mvn-defaults diff --git a/scripts/release-revision.sh b/scripts/release-revision.sh new file mode 100755 index 000000000..0779110de --- /dev/null +++ b/scripts/release-revision.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# +# 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. +# + +set -e +set -x + +export REVISION=$(mvn help:evaluate -Dexpression=revision -q -DforceStdout) +export PRERELEASE_REVISION=$(echo "${REVISION}" | cut -d'-' -f1) +printf "REVISION: '%s' PRERELEASE_REVISION: '%s'\n" "${REVISION}" "${PRERELEASE_REVISION}" +mvn package -Drevision="${PRERELEASE_REVISION}" +exit + +GIT_RELEASE_BOT_NAME=${GIT_RELEASE_BOT_NAME:?GIT_RELEASE_BOT_NAME must be provided} +GITHUB_SHA=${GITHUB_SHA:?GITHUB_SHA must be provided} +GITHUB_REF=${GITHUB_REF:?GITHUB_REF must be provided} +RELEASE_BRANCH_PATTERN=${RELEASE_BRANCH_PATTERN:?RELEASE_BRANCH_PATTERN must be provided} +PRERELEASE_BRANCH_PATTERN=${PRERELEASE_BRANCH_PATTERN:?PRERELEASE_BRANCH_PATTERN must be provided} + +#git rev-parse --abbrev-ref HEAD + +# Filter the branch to execute the release on +readonly local current_branch=$(git rev-parse --abbrev-ref HEAD) +echo "Current branch: ${current_branch}" + +if [[ -n "${current_branch}" && "${current_branch}" == *"${RELEASE_BRANCH_PATTERN}"* ]]; then + echo "Building for release branch ${current_branch}" +elif [[ -n "${current_branch}" && "${current_branch}" == *"${PRERELEASE_BRANCH_PATTERN}"* ]]; then + echo "Building prerelease for branch ${current_branch}" +else + echo "Skipping for ${current_branch} branch" + exit 0 +fi + +# Making sure we are on top of the branch +echo "Git checkout branch ${GITHUB_REF##*/}" +git checkout ${GITHUB_REF##*/} +echo "Git reset hard to ${GITHUB_SHA}" +git reset --hard ${GITHUB_SHA} + +# Do the release +echo "Do mvn release:prepare..." +#mvn $MAVEN_REPO_LOCAL --batch-mode --global-settings release.xml -Dusername=$GITHUB_ACCESS_TOKEN release:prepare +mvn --batch-mode --global-settings release.xml -Dusername=$GITHUB_ACCESS_TOKEN clean release:prepare -DdevelopmentVersion=${NEXT_SNAPSHOT} -DreleaseVersion=${RELEASE_VERSION} + +echo "files after release:prepare..." +pwd +ls -l diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 5c3f2eeca..09809b834 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -23,7 +23,7 @@ io.nosqlbench mvn-defaults - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -39,14 +39,14 @@ io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} nb-api io.nosqlbench virtdata-lang - 5.17.1-SNAPSHOT + ${revision} diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 0dcff2e20..6bb6181da 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index dc6077f17..c172ee28b 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -36,7 +36,7 @@ io.nosqlbench virtdata-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index af11fba0c..aa0348051 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -38,13 +38,13 @@ io.nosqlbench virtdata-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-lib-basics - 5.17.1-SNAPSHOT + ${revision} diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 292690205..97da72b4d 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -36,13 +36,13 @@ io.nosqlbench virtdata-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-lib-basics - 5.17.1-SNAPSHOT + ${revision} diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 33d5e6bb0..3eeda643b 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -36,7 +36,7 @@ io.nosqlbench virtdata-lib-basics - 5.17.1-SNAPSHOT + ${revision} diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 91343ef5e..228c5945a 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -23,7 +23,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -34,7 +34,7 @@ io.nosqlbench virtdata-api - 5.17.1-SNAPSHOT + ${revision} diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 80d3f5ff2..0dc1ba0df 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -20,7 +20,7 @@ mvn-defaults io.nosqlbench - 5.17.1-SNAPSHOT + ${revision} ../mvn-defaults @@ -34,42 +34,42 @@ io.nosqlbench virtdata-realdata - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-lib-realer - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-api - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-lib-random - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-lib-basics - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench virtdata-lib-curves4 - 5.17.1-SNAPSHOT + ${revision} io.nosqlbench docsys - 5.17.1-SNAPSHOT + ${revision} compile From 2b521edbbf331a084f8b023bdacf4c39de3e83eb Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 19:29:28 -0600 Subject: [PATCH 06/12] provide an empty value type for op templates --- .../api/activityconfig/rawyaml/RawStmtsDocList.java | 6 +++++- .../engine/api/activityconfig/yaml/StmtsDocList.java | 7 +++++-- .../engine/api/activityimpl/SimpleActivity.java | 10 ++++------ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsDocList.java b/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsDocList.java index 65f0517dc..a87ae402f 100644 --- a/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsDocList.java +++ b/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsDocList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,6 +31,10 @@ public class RawStmtsDocList { return new RawStmtsDocList(List.of(rawStmtsDoc)); } + public static RawStmtsDocList none() { + return new RawStmtsDocList(List.of()); + } + public List getStmtsDocs() { return rawStmtsDocList; } diff --git a/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java b/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java index 7a13d74ec..800438219 100644 --- a/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java +++ b/adapters-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,6 +41,10 @@ public class StmtsDocList implements Iterable { this.rawStmtsDocList = rawStmtsDocList; } + public static StmtsDocList none() { + return new StmtsDocList(RawStmtsDocList.none()); + } + public List getStmtDocs(String tagFilter) { TagFilter tf = new TagFilter(tagFilter); return getStmtDocs().stream() @@ -67,7 +71,6 @@ public class StmtsDocList implements Iterable { TagFilter ts = new TagFilter(tagFilterSpec); List opTemplates = new ArrayList<>(); - getStmtDocs().stream() .flatMap(d -> d.getStmts().stream()) .filter(ts::matchesTagged) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java index 9a4da328a..0045fa415 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -652,19 +652,17 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs protected StmtsDocList loadStmtsDocList() { try { - StmtsDocList stmtsDocList = null; - Optional stmt = activityDef.getParams().getOptionalString("op", "stmt", "statement"); Optional op_yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload"); if (stmt.isPresent()) { - stmtsDocList = StatementsLoader.loadStmt(logger, stmt.get(), activityDef.getParams()); workloadSource = "commandline:" + stmt.get(); + return StatementsLoader.loadStmt(logger, stmt.get(), activityDef.getParams()); } else if (op_yaml_loc.isPresent()) { - stmtsDocList = StatementsLoader.loadPath(logger, op_yaml_loc.get(), activityDef.getParams(), "activities"); workloadSource = "yaml:" + op_yaml_loc.get(); + return StatementsLoader.loadPath(logger, op_yaml_loc.get(), activityDef.getParams(), "activities"); } - return stmtsDocList; + return StmtsDocList.none(); } catch (Exception e) { throw new OpConfigError("Error loading op templates: " + e, workloadSource, e); From 3e66317fc5ab9920bc0955e16add7d7c62338c4a Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 19:29:31 -0600 Subject: [PATCH 07/12] make stdout op synthesis defensive --- .../adapter/stdout/StdoutDriverAdapter.java | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) 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 2b4033121..f7fa16f5f 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,15 +34,16 @@ import org.apache.logging.log4j.Logger; import java.util.*; import java.util.function.Function; import java.util.regex.Pattern; +import java.util.stream.Collectors; -@Service(value= DriverAdapter.class,selector = "stdout") +@Service(value = DriverAdapter.class, selector = "stdout") public class StdoutDriverAdapter extends BaseDriverAdapter implements SyntheticOpTemplateProvider { private final static Logger logger = LogManager.getLogger(StdoutDriverAdapter.class); @Override public OpMapper getOpMapper() { DriverSpaceCache ctxCache = getSpaceCache(); - return new StdoutOpMapper(this,ctxCache); + return new StdoutOpMapper(this, ctxCache); } @Override @@ -58,15 +59,18 @@ public class StdoutDriverAdapter extends BaseDriverAdapter getSyntheticOpTemplates(StmtsDocList stmtsDocList, Map cfg) { - Set activeBindingNames = new LinkedHashSet<>(); + public List getSyntheticOpTemplates(StmtsDocList stmtsDocList, Map cfg) { + Set activeBindingNames = new LinkedHashSet<>(stmtsDocList.getDocBindings().keySet()); + + if (activeBindingNames.size()==0) { + logger.warn("Unable to synthesize op for driver=" + this.getAdapterName() + " with zero bindings."); + return List.of(); + } String bindings = Optional.ofNullable(cfg.get("bindings")).map(Object::toString).orElse("doc"); - activeBindingNames.addAll(stmtsDocList.getDocBindings().keySet()); - Pattern bindingsFilter = Pattern.compile(bindings.equalsIgnoreCase("doc") ? ".*" : bindings); - Set filteredBindingNames = new LinkedHashSet<>(); - activeBindingNames + + Set filteredBindingNames = activeBindingNames .stream() .filter(n -> { if (bindingsFilter.matcher(n).matches()) { @@ -77,16 +81,20 @@ public class StdoutDriverAdapter extends BaseDriverAdapter keySet, Map cfg) { + private String genStatementTemplate(Set keySet, Map cfg) { TemplateFormat format = Optional.ofNullable(cfg.get("format")) .map(Object::toString) .map(TemplateFormat::valueOf) From 71f2207c9b48411a4f2260b7f0b7d545c959f1bf Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 23:54:47 -0600 Subject: [PATCH 08/12] remove unused method --- .../nosqlbench/api/config/standard/ConfigModel.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/nb-api/src/main/java/io/nosqlbench/api/config/standard/ConfigModel.java b/nb-api/src/main/java/io/nosqlbench/api/config/standard/ConfigModel.java index 7fb1577c6..87e132e88 100644 --- a/nb-api/src/main/java/io/nosqlbench/api/config/standard/ConfigModel.java +++ b/nb-api/src/main/java/io/nosqlbench/api/config/standard/ConfigModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package io.nosqlbench.api.config.standard; -import io.nosqlbench.api.engine.activityimpl.ActivityDef; import io.nosqlbench.api.errors.BasicError; import java.math.BigDecimal; @@ -47,14 +46,6 @@ public class ConfigModel implements NBConfigModel { return new ConfigModel(ofType); } - public static NBConfiguration defacto(ActivityDef def) { - ConfigModel configModel = new ConfigModel(Object.class); - for (Map.Entry entry : def.getParams().entrySet()) { - configModel.add(Param.defaultTo(entry.getKey(), entry.getValue().toString())); - } - return configModel.apply(def.getParams()); - } - public ConfigModel add(Param param) { this.params.add(param); for (String name : param.getNames()) { From afaa6f5b9345acc06df363ee62b095d0974814a5 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 23:54:53 -0600 Subject: [PATCH 09/12] remove duplicitous synonym logic --- .../api/scenarios/NBCLIScenarioParser.java | 5 +- .../api/config/params/ParamsParser.java | 12 +--- .../api/config/params/Synonyms.java | 72 ------------------- .../nb/api/config/SynonymsTest.java | 38 ---------- 4 files changed, 2 insertions(+), 125 deletions(-) delete mode 100644 nb-api/src/main/java/io/nosqlbench/api/config/params/Synonyms.java delete mode 100644 nb-api/src/test/java/io/nosqlbench/nb/api/config/SynonymsTest.java diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioParser.java b/engine-api/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioParser.java index 94155dd1e..bac785305 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioParser.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,7 +21,6 @@ import io.nosqlbench.engine.api.activityconfig.rawyaml.RawStmtsLoader; import io.nosqlbench.engine.api.activityconfig.yaml.Scenarios; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; import io.nosqlbench.engine.api.templating.StrInterpolator; -import io.nosqlbench.api.config.params.Synonyms; import io.nosqlbench.api.content.Content; import io.nosqlbench.api.content.NBIO; import io.nosqlbench.api.content.NBPathsAPI; @@ -94,7 +93,6 @@ public class NBCLIScenarioParser { && arglist.peekFirst().contains("=") && !arglist.peekFirst().startsWith("-")) { String[] arg = arglist.removeFirst().split("=", 2); - arg[0] = Synonyms.canonicalize(arg[0], logger); if (userProvidedParams.containsKey(arg[0])) { throw new BasicError("duplicate occurrence of option on command line: " + arg[0]); } @@ -236,7 +234,6 @@ public class NBCLIScenarioParser { throw new BasicError("Unable to recognize scenario cmd spec in '" + commandFragment + "'"); } String commandName = matcher.group("name"); - commandName = Synonyms.canonicalize(commandName, logger); String assignmentOp = matcher.group("oper"); String assignedValue = matcher.group("val"); parsedStep.put(commandName, new CmdArg(commandName, assignmentOp, assignedValue)); diff --git a/nb-api/src/main/java/io/nosqlbench/api/config/params/ParamsParser.java b/nb-api/src/main/java/io/nosqlbench/api/config/params/ParamsParser.java index 2c142ff3c..87729bbdd 100644 --- a/nb-api/src/main/java/io/nosqlbench/api/config/params/ParamsParser.java +++ b/nb-api/src/main/java/io/nosqlbench/api/config/params/ParamsParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -255,16 +255,6 @@ public class ParamsParser { throw new RuntimeException("Unable to parse input:" + input); } - if (canonicalize) { - List keys = new ArrayList<>(parms.keySet()); - for (String key : keys) { - String properkey = Synonyms.canonicalize(key, logger); - if (!key.equals(properkey)) { - parms.put(properkey, parms.get(key)); - parms.remove(key); - } - } - } return parms; } diff --git a/nb-api/src/main/java/io/nosqlbench/api/config/params/Synonyms.java b/nb-api/src/main/java/io/nosqlbench/api/config/params/Synonyms.java deleted file mode 100644 index 900893f6a..000000000 --- a/nb-api/src/main/java/io/nosqlbench/api/config/params/Synonyms.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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. - */ - -package io.nosqlbench.api.config.params; - -import org.apache.logging.log4j.Logger; - -import java.util.*; -import java.util.function.BiConsumer; -import java.util.regex.Pattern; - -/** - * This class is just a central reference point for the names of parameters - * or other configuration-level primitives which have been given better names. - * For the sake of backwards compatibility, the old names are retained, but - * deprecated and warned against. - */ -public class Synonyms { - - /** - * Each entry in this list is a list of synonyms in configuration. - */ - public final static Map> PARAM_SYNONYMS = new HashMap<>() {{ - put("hosts", Set.of("host" )); - put("workload", Set.of("yaml" )); - put("driver", Set.of("type" )); - put("rate", Set.of("targetrate", "cyclerate" )); - put("parameterized", Set.of("parametrized" )); // mispelling safety net - }}; - - /** - * use this method to convert deprecated - * @param input A configuration string from a user or file - * @param synonyms A list of known synonym lists with the preferred values first, like {@link #PARAM_SYNONYMS} - * @param warnings An BiConsumer which can handle (deprecated, preferred) for subsitutions. - * @return The configuration string in canonicalized form, with the preferred names used where possible - */ - public static String canonicalize(String input, Map> synonyms, BiConsumer warnings) { - String replaced = input; - for (Map.Entry> syns : synonyms.entrySet()) { - String preferred = syns.getKey(); - for (String deprecated : syns.getValue()) { - Pattern p = Pattern.compile("\\b" + deprecated + "\\b"); - String prior = replaced; - replaced = replaced.replaceAll(p.pattern(),preferred); - if (!prior.equals(replaced) && warnings!=null) { - warnings.accept(deprecated,preferred); - } - } - } - return replaced; - } - - public static String canonicalize(String arg, Logger logger) { - return canonicalize(arg, PARAM_SYNONYMS, (d, p) -> logger.debug(() -> - "rewrote synonym to canonical term (" + d +" => " + p +")" - )); - } -} diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/config/SynonymsTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/config/SynonymsTest.java deleted file mode 100644 index e6cfcc9f4..000000000 --- a/nb-api/src/test/java/io/nosqlbench/nb/api/config/SynonymsTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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. - */ - -package io.nosqlbench.nb.api.config; - -import io.nosqlbench.api.config.params.Synonyms; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class SynonymsTest { - - @Test - public void testCanonicalizeText() { - String before = "test yaml ayamlfoo type btype typea targetrate"; - StringBuilder sb = new StringBuilder(); - String result = Synonyms.canonicalize(before, Synonyms.PARAM_SYNONYMS, - (s, s2) -> sb.append("replaced ").append(s).append(" with ").append(s2).append("\n")); - assertThat(result).isEqualTo("test workload ayamlfoo driver btype typea rate"); - assertThat(sb.toString()).isEqualTo("replaced type with driver\n" + - "replaced targetrate with rate\n" + - "replaced yaml with workload\n"); - } - -} From dbf3df1e333ce22006f7a152bd4fc52f8674c0cc Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 23:54:58 -0600 Subject: [PATCH 10/12] make op synthesis even more defensive --- .../api/activityimpl/SimpleActivity.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java index 0045fa415..176d78a8f 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java @@ -193,7 +193,7 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs } public String toString() { - return getAlias()+":"+getRunState()+":"+getRunStateTally().toString(); + return getAlias() + ":" + getRunState() + ":" + getRunStateTally().toString(); } @Override @@ -486,7 +486,7 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs .orElse(SequencerType.bucket); SequencePlanner> planner = new SequencePlanner<>(sequencerType); - int dryrunCount=0; + int dryrunCount = 0; for (int i = 0; i < pops.size(); i++) { long ratio = ratios.get(i); ParsedOp pop = pops.get(i); @@ -510,7 +510,7 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs // } planner.addOp((OpDispenser) dispenser, ratio); } - if (dryrunCount>0) { + if (dryrunCount > 0) { logger.warn("initialized " + dryrunCount + " op templates for dry run only. These ops will be synthesized for each cycle, but will not be executed."); } @@ -547,22 +547,33 @@ public class SimpleActivity implements Activity, ProgressCapable, ActivityDefObs protected List loadOpTemplates(Optional defaultDriverAdapter) { String tagfilter = activityDef.getParams().getOptionalString("tags").orElse(""); -// StrInterpolator interp = new StrInterpolator(activityDef); StmtsDocList stmtsDocList = loadStmtsDocList(); - List unfilteredOps = stmtsDocList.getStmts(); List filteredOps = stmtsDocList.getStmts(tagfilter); if (filteredOps.size() == 0) { - if (unfilteredOps.size() > 0) { + if (unfilteredOps.size() > 0) { // There were no ops, and it was because they were all filtered out throw new BasicError("There were no active statements with tag filter '" + tagfilter + "', since all " + unfilteredOps.size() + " were filtered out."); } else { + // 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 if (defaultDriverAdapter.isPresent() && defaultDriverAdapter.get() instanceof SyntheticOpTemplateProvider sotp) { filteredOps = sotp.getSyntheticOpTemplates(stmtsDocList, getActivityDef().getParams()); Objects.requireNonNull(filteredOps); + if (filteredOps.size() == 0) { + 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."); + } + } else { // But if there were no ops, and there was no default driver provided, we can't continue + 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.size() == 0) { From 90bcecc68e6f0553026f535aea4214a03c2fe3ac Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Jan 2023 23:55:03 -0600 Subject: [PATCH 11/12] apply superset config checking --- .../api/activityimpl/uniform/StandardActivity.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java index 0b47d30c2..0b12cfa02 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,7 +54,6 @@ public class StandardActivity extends SimpleActivity implements public StandardActivity(ActivityDef activityDef) { super(activityDef); - this.adapters.putAll(adapters); Optional yaml_loc = activityDef.getParams().getOptionalString("yaml", "workload"); if (yaml_loc.isPresent()) { @@ -69,11 +68,14 @@ public class StandardActivity extends SimpleActivity implements Optional defaultAdapter = activityDef.getParams().getOptionalString("driver") .flatMap(s -> ServiceSelector.of(s, adapterLoader).get()); + // HERE, op templates are loaded before drivers are loaded List opTemplates = loadOpTemplates(defaultAdapter); List pops = new ArrayList<>(); List adapterlist = new ArrayList<>(); + NBConfigModel supersetConfig = ConfigModel.of(StandardActivity.class).add(yamlmodel); + for (OpTemplate ot : opTemplates) { ParsedOp incompleteOpDef = new ParsedOp(ot, NBConfiguration.empty(), List.of()); String driverName = incompleteOpDef.takeOptionalStaticValue("driver", String.class) @@ -94,6 +96,8 @@ public class StandardActivity extends SimpleActivity implements if (adapter instanceof NBConfigurable configurable) { NBConfigModel adapterModel = configurable.getConfigModel(); + supersetConfig.add(adapterModel); + combinedModel = adapterModel.add(yamlmodel); combinedConfig = combinedModel.matchConfig(activityDef.getParams()); configurable.applyConfig(combinedConfig); @@ -101,6 +105,8 @@ public class StandardActivity extends SimpleActivity implements adapters.put(driverName, adapter); mappers.put(driverName, adapter.getOpMapper()); } + supersetConfig.assertValidConfig(activityDef.getParams().getStringStringMap()); + DriverAdapter adapter = adapters.get(driverName); adapterlist.add(adapter); From 69be6a10623e58850acff95a8c2adce10342f704 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Jan 2023 12:17:13 -0600 Subject: [PATCH 12/12] make tests use workload instead of yaml --- .../engine/api/templating/OpTemplateSupplier.java | 4 ++-- .../io/nosqlbench/engine/cli/NBCLIScenarioParserTest.java | 4 ++-- .../src/test/resources/activities/scenario-test.yaml | 8 ++++---- .../io/nosqlbench/nbr/examples/ScriptExampleTests.java | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/OpTemplateSupplier.java b/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/OpTemplateSupplier.java index 90e8db80f..1de252158 100644 --- a/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/OpTemplateSupplier.java +++ b/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/OpTemplateSupplier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,7 @@ import java.util.Optional; * An Op Template Supplier can provide its own source of op templates instead * of relying on the built-in mechanism. By default, the built-in mechanism * will read op definitions from parameters first, then any ops (statements) - * from yaml files provided in the workload= or yaml= activity parameters. + * from yaml files provided in the workload= activity parameters. */ public interface OpTemplateSupplier extends DriverAdapterDecorators { diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioParserTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioParserTest.java index e0b611c7d..195244587 100644 --- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioParserTest.java +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioParserTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -71,7 +71,7 @@ public class NBCLIScenarioParserTest { @Test public void testThatVerboseFinalParameterThrowsError() { assertThatExceptionOfType(BasicError.class) - .isThrownBy(() -> new NBCLIOptions(new String[]{ "scenario-test", "yaml=canttouchthis"})); + .isThrownBy(() -> new NBCLIOptions(new String[]{ "scenario-test", "workload=canttouchthis"})); } @Test diff --git a/engine-cli/src/test/resources/activities/scenario-test.yaml b/engine-cli/src/test/resources/activities/scenario-test.yaml index 247f3a74c..31a7ee746 100644 --- a/engine-cli/src/test/resources/activities/scenario-test.yaml +++ b/engine-cli/src/test/resources/activities/scenario-test.yaml @@ -2,11 +2,11 @@ min_version: "4.17.15" scenarios: default: - schema: run driver==stdout yaml===scenario-test tags=block:schema - rampup: run driver=stdout yaml===scenario-test tags=block:rampup cycles=TEMPLATE(cycles1,10) - main: run driver=stdout yaml===scenario-test tags=block:"main.*" cycles=TEMPLATE(cycles2,10) + schema: run driver==stdout workload===scenario-test tags=block:schema + rampup: run driver=stdout workload===scenario-test tags=block:rampup cycles=TEMPLATE(cycles1,10) + main: run driver=stdout workload===scenario-test tags=block:"main.*" cycles=TEMPLATE(cycles2,10) schema-only: - - "run driver=stdout yaml=scenario-test tags=phase:schema doundef==undef" + - "run driver=stdout workload=scenario-test tags=phase:schema doundef==undef" template-test: with-template: run driver=stdout cycles=TEMPLATE(cycles-test,10) diff --git a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/ScriptExampleTests.java b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/ScriptExampleTests.java index c98013853..47990f1c3 100644 --- a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/ScriptExampleTests.java +++ b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/ScriptExampleTests.java @@ -275,7 +275,7 @@ public class ScriptExampleTests { public void testErrorPropagationFromActivityInitialization() { ExecutionMetricsResult scenarioResult = runScenario("activity_init_error"); assertThat(scenarioResult.getException()).isNotNull(); - assertThat(scenarioResult.getException().getMessage()).contains("Unable to convert end cycle from invalid"); + assertThat(scenarioResult.getException().getMessage()).contains("Unknown config parameter 'unknown_config'"); assertThat(scenarioResult.getException()).isNotNull(); }