From a9b0dc9dd0801f75c61b67743fda7bd05d4e1e8b Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 26 Oct 2020 01:17:24 -0500 Subject: [PATCH 001/164] argsfile support --- .../io/nosqlbench/engine/cli/ArgsFile.java | 222 ++++++++++++++++-- .../nosqlbench/engine/cli/NBCLIOptions.java | 14 +- .../nosqlbench/engine/cli/ArgsFileTest.java | 39 +++ .../test/resources/argsfiles/alphagamma.cli | 2 + 4 files changed, 244 insertions(+), 33 deletions(-) create mode 100644 engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java create mode 100644 engine-cli/src/test/resources/argsfiles/alphagamma.cli diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java index 2abdea92d..d63480cd6 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java @@ -1,29 +1,217 @@ package io.nosqlbench.engine.cli; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.LinkedList; -import java.util.List; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; +/** + *

Synopsis

+ * + * ArgsFile is a command-line modifier which can take linked list of + * command args and modify it, and/or modify argsfile refrenced in this way. + * + *

ArgsFile Selection

+ * + * During processing, any occurence of '-argsfile' selects the active argsfile and loads + * it into the command line in place of the '-argsfile' argument. By default the args file + * will be loaded if it exists, and a warning will be given if it does not. + * + * The '-argsfile-required <somepath>' version will throw an error if the args file + * is not present, but it will not report any warnings or details otherwise. + * + * The `-argsfile-optional <somepath> version will not throw an error if the args + * file is not present, and it will not report any warnings or details otherwise. + * + * A prefix command line can be given to ArgsFile to pre-load any settings. In this way + * it is possible to easily provide a default args file which will be loaded. For example, + * A prefix command of '-argsfile-optional <somepath>' will load options if they are + * available in the specified file, but will otherwise provide no feedback to the user. + * + *

ArgsFile Injection

+ * + * When an argsfile is loaded, it reads a command from each line into the current position + * of the command line. No parsing is done. Blank lines are ignored. Newlines are used as the + * argument delimiter, and lines that end with a backslash before the newline are automatically + * joined together. + * + *

ArgsFile Diagnostics

+ * + * All modifications to the command line should be reported to the logging facility at + * INFO level. This assumes that the calling layer wants to inform users of command line injections, + * and that the user can select to be notified of warnings only if desired. + * + *

Environment Variables

+ * + * Simple environment variable substitution is attempted for any pattern which appears as '$' followed + * by all uppercase letters and underscores. Any references of this type which are not resolvable + * will cause an error to be thrown. + */ public class ArgsFile { - private final Path argsPath; + private final static Logger logger = LoggerFactory.getLogger(ArgsFile.class); - public ArgsFile(String path) { - this.argsPath = Path.of(path); + private Path argsPath; + private LinkedList preload; + + public ArgsFile() { } - public LinkedList doArgsFile(String argsfileSpec, LinkedList arglist) { - return null; + public ArgsFile preload(String... preload) { + this.preload = new LinkedList(Arrays.asList(preload)); + return this; } - private LinkedList spliceArgs(String argsfileSpec, LinkedList arglist) { - Pattern envpattern = Pattern.compile("(?\\$[A-Za-z_]+)"); - Matcher matcher = envpattern.matcher(argsfileSpec); + private enum Selection { + // Ignore if not present, show injections at info + IgnoreIfMissing, + // Warn if not present, but show injections at info + WarnIfMissing, + // throw error if not present, show injections at info + ErrorIfMissing + } + + public LinkedList process(String... args) { + return process(new LinkedList(Arrays.asList(args))); + } + + public LinkedList process(LinkedList commandline) { + if (preload != null) { + LinkedList modified = new LinkedList(); + modified.addAll(preload); + modified.addAll(commandline); + preload = null; + commandline = modified; + } + LinkedList composed = new LinkedList<>(); + while (commandline.peekFirst() != null) { + String arg = commandline.peekFirst(); + switch (arg) { + case "-argsfile": + commandline.removeFirst(); + String argspath = readWordOrThrow(commandline, "path to an args file"); + setArgsFile(argspath, Selection.WarnIfMissing); + commandline = loadArgs(this.argsPath, Selection.WarnIfMissing, commandline); + break; + case "-argsfile-required": + commandline.removeFirst(); + String argspathRequired = readWordOrThrow(commandline, "path to an args file"); + setArgsFile(argspathRequired, Selection.ErrorIfMissing); + commandline = loadArgs(this.argsPath, Selection.ErrorIfMissing, commandline); + break; + case "-argsfile-optional": + commandline.removeFirst(); + String argspathOptional = readWordOrThrow(commandline, "path to an args file"); + setArgsFile(argspathOptional, Selection.IgnoreIfMissing); + commandline = loadArgs(this.argsPath, Selection.IgnoreIfMissing, commandline); + break; + case "-pin": + commandline.removeFirst(); + commandline = pinArg(commandline); + break; + case "-unpin": + commandline.removeFirst(); + commandline = unpinArg(commandline); + break; + default: + composed.addLast(commandline.removeFirst()); + } + + } + return composed; + } + + private LinkedList loadArgs(Path argspath, Selection mode, LinkedList commandline) { + if (!assertArgsFileExists(argspath, mode)) { + return commandline; + } + List lines = null; + try { + lines = Files.readAllLines(argspath); + } catch (IOException e) { + throw new RuntimeException(e); + } + List content = lines.stream() + .filter(s -> !s.startsWith("#")) + .filter(s -> !s.startsWith("/")) + .filter(s -> !s.isBlank()) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + StringBuilder splitword = new StringBuilder(); + LinkedList loaded = new LinkedList<>(); + for (String s : content) { + splitword.append(s); + if (!s.endsWith("\\")) { + loaded.addLast(splitword.toString()); + splitword.setLength(0); + } else { + splitword.setLength(splitword.length() - 1); + } + } + if (splitword.length() > 0) { + throw new RuntimeException("unqualified line continuation for '" + splitword.toString() + "'"); + } + + Iterator injections = loaded.descendingIterator(); + while (injections.hasNext()) { + String injection = injections.next(); + injection = injectEnv(injection); + commandline.addFirst(injection); + } + + return commandline; + } + + private boolean assertArgsFileExists(Path argspath, Selection mode) { + if (!Files.exists(argsPath)) { + switch (mode) { + case ErrorIfMissing: + throw new RuntimeException("A required argsfile was specified, but it does not exist: '" + argspath + "'"); + case WarnIfMissing: + logger.warn("An argsfile was specified, but it does not exist: '" + argspath + "'"); + case IgnoreIfMissing: + } + return false; + } + return true; + } + + private void setArgsFile(String argspath, Selection mode) { + this.argsPath = Path.of(argspath); +// assertIfMissing(this.argsPath,mode); + } + + private String readWordOrThrow(LinkedList commandline, String description) { + String found = commandline.peekFirst(); + if (found == null) { + throw new RuntimeException("Unable to read argument top option for " + description); + } + return commandline.removeFirst(); + } + + private LinkedList pinArg(LinkedList commandline) { + if (this.argsPath == null) { + throw new RuntimeException("No argsfile has been selected before using the pin option."); + } + return commandline; + } + + private LinkedList unpinArg(LinkedList commandline) { + if (this.argsPath == null) { + throw new RuntimeException("No argsfile has been selected before using the unpin option."); + } + return commandline; + } + + private String injectEnv(String word) { + Pattern envpattern = Pattern.compile("(?\\$[A-Z_]+)"); + Matcher matcher = envpattern.matcher(word); StringBuilder sb = new StringBuilder(); - while (matcher.find()) { String envvar = matcher.group("envvar"); String value = System.getenv(envvar); @@ -33,19 +221,9 @@ public class ArgsFile { matcher.appendReplacement(sb, value); } matcher.appendTail(sb); - Path argfilePath = Path.of(sb.toString()); - List lines = null; - try { - lines = Files.readAllLines(argfilePath); - } catch (IOException e) { - throw new RuntimeException(e); - } - // TODO: finish update logic here - return arglist; - + return sb.toString(); } - public LinkedList pin(LinkedList arglist) { return arglist; } 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 8c4457431..f0bd65e82 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 @@ -163,7 +163,8 @@ public class NBCLIOptions { } private LinkedList parseGlobalOptions(String[] args) { - ArgsFile argsfile = new ArgsFile(ARGS_FILE_DEFAULT); + ArgsFile argsfile = new ArgsFile(); + argsfile.preload("-argsfile-optional", ARGS_FILE_DEFAULT); LinkedList arglist = new LinkedList<>() {{ addAll(Arrays.asList(args)); @@ -188,18 +189,9 @@ public class NBCLIOptions { switch (word) { case ARGS_FILE: - arglist.removeFirst(); - String argsfileSpec = readWordOrThrow(arglist, "argsfile"); - argsfile = new ArgsFile(argsfileSpec); - arglist = argsfile.doArgsFile(argsfileSpec, arglist); - break; case ARGS_PIN: - arglist.removeFirst(); - arglist = argsfile.pin(arglist); - break; case ARGS_UNPIN: - arglist.removeFirst(); - arglist = argsfile.unpin(arglist); + arglist = argsfile.process(arglist); break; case ANNOTATE_EVENTS: arglist.removeFirst(); diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java new file mode 100644 index 000000000..be6b11c59 --- /dev/null +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java @@ -0,0 +1,39 @@ +package io.nosqlbench.engine.cli; + +import org.junit.Test; + +import java.util.LinkedList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ArgsFileTest { + + @Test + public void testLoadingArgs() { + LinkedList result; + ArgsFile argsFile = new ArgsFile(); + result = argsFile.process("-argsfile", "src/test/resources/argsfiles/nonextant.cli"); + assertThat(result).containsExactly(); + result = argsFile.process("-argsfile", "src/test/resources/argsfiles/alphagamma.cli"); + assertThat(result).containsExactly("alpha", "gamma"); + } + + @Test(expected = RuntimeException.class) + public void testLoadingMissingRequiredFails() { + LinkedList result; + ArgsFile argsFile = new ArgsFile(); + result = argsFile.process("-argsfile-required", "src/test/resources/argsfiles/nonextant.cli"); + } + + @Test + public void testLoadingInPlace() { + LinkedList result; + LinkedList commands = new LinkedList<>(List.of("--abc", "--def", "-argsfile", "src/test/resources/argsfiles/alphagamma.cli")); + ArgsFile argsFile = new ArgsFile().preload("-argsfile-optional", "src/test/resources/argsfiles/alphagamma.cli"); + result = argsFile.process(commands); + assertThat(result).containsExactly("alpha", "gamma", "--abc", "--def", "alpha", "gamma"); + + } + +} \ No newline at end of file diff --git a/engine-cli/src/test/resources/argsfiles/alphagamma.cli b/engine-cli/src/test/resources/argsfiles/alphagamma.cli new file mode 100644 index 000000000..febb53a79 --- /dev/null +++ b/engine-cli/src/test/resources/argsfiles/alphagamma.cli @@ -0,0 +1,2 @@ +alpha +gamma \ No newline at end of file From b9607d07e601f9b4b9ff470a80a31a982bc0f44d Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 26 Oct 2020 12:08:05 -0500 Subject: [PATCH 002/164] make argsfiles use double dash --- devdocs/sketches/argfiles.md | 31 ++++++++++--------- .../io/nosqlbench/engine/cli/ArgsFile.java | 20 ++++++------ .../nosqlbench/engine/cli/NBCLIOptions.java | 8 ++--- .../nosqlbench/engine/cli/ArgsFileTest.java | 13 ++++---- 4 files changed, 37 insertions(+), 35 deletions(-) diff --git a/devdocs/sketches/argfiles.md b/devdocs/sketches/argfiles.md index 159df6cef..b29b34db5 100644 --- a/devdocs/sketches/argfiles.md +++ b/devdocs/sketches/argfiles.md @@ -5,7 +5,7 @@ An argsfile (Command Line Arguments File) is a simple text file which file to contain a set of global defaults that you want to use by default and automatically. -A command, `-argsfile ` is used to specify an args file. You can +A command, `--argsfile ` is used to specify an args file. You can use it like an instant import statement in the middle of a command line. Notice that this option uses only a single dash. This distinguishes the argsfile options from the others in general. These are meta @@ -17,8 +17,8 @@ A command, `-argsfile ` is used to specify an args file. You can The default args file location is `$HOME/.nosqlbench/argsfile`. If this file is present, it is loaded by nosqlbench when it starts even if you don't ask it to. That is, nosqlbench behaves as if your first set of - command line arguments is `-argsfile "$HOME/.nosqlbench/argsfile - `. However, unlike when you specify `-argsfile ...` explicitly on + command line arguments is `--argsfile "$HOME/.nosqlbench/argsfile + `. However, unlike when you specify `--argsfile ...` explicitly on your command line, this form will not throw an error if the file is missing. This means that when you explicitly ask for an args file to be loaded, and it does not exist, an error is thrown. If you @@ -36,51 +36,52 @@ An args file simply contains an argument on each line, like this: ## Pinning options It is possible to pin an option to the default args file by use of the - `-pin` meta-option. This option will take the following command line + `--pin` meta-option. This option will take the following command line argument and add it to the currently active args file. That means, if - you use `-pin --docker-metrics`, then `--docker-metrics` is added to + you use `--pin --docker-metrics`, then `--docker-metrics` is added to the args file. If there is an exact duplicate of the same option and value, then it is skipped, but if the option name is the same with a different value, then it is added at the end. This allows for options which may be called multiple times normally. -If the `-pin` option occurs after an explicit use of `-argsfile +If the `--pin` option occurs after an explicit use of `--argsfile `, then the filename used in this argument is the one that is modified. -After the `-pin` option, the following argument is taken as any global +After the `--pin` option, the following argument is taken as any global option (--with-double-dashes) and any non-option values after it which are not commands (reserved words) -When the `-pin` option is used, it does not cause the pinned option +When the `--pin` option is used, it does not cause the pinned option to be excluded from the current command line call. The effects of the pinned option will take place in the current nosqlbench invocation - just as they would without the `-pin`. However, when pinning global + just as they would without the `--pin`. However, when pinning global options when there are no commands on the command line, nosqlbench will not run a scenario, so this form is suitable for setting arguments. -As a special case, if the `-pin` is the last option of +As a special case, if the `--pin` is the last option of ## Unpinning options. To reverse the effect of pinning an option, you simply use - `-unpin ...`. + `--unpin ...`. -The behavior of -unpin is slightly different than -pin. Specifically, +The behavior of --unpin is slightly different than --pin. Specifically, an option which is unpinned will be removed from the arg list, and will not be used in the current invocation of nosqlbench after removal. -Further, you can specify `-unpin --grafana-baseurl` to unpin an option which +Further, you can specify `--unpin --grafana-baseurl` to unpin an option + which normally has an argument, and all instances of that argument will be removed. If you want to unpin a specific instance of a multi-valued option, or one that can be specified more than once with different parameter values, then you must provide the value as well, as in - `-unpin --log-histograms 'histodata.log:.*:1m'` + `--unpin --log-histograms 'histodata.log:.*:1m'` # Setting defaults, the simple way To simply set global defaults, you can run nosqlbench with a command line like this: - ./nb -pin --docker-metrics-at metricsnode -pin --annotate all + ./nb --pin --docker-metrics-at metricsnode --pin --annotate all diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java index d63480cd6..94dcd4258 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java @@ -19,19 +19,19 @@ import java.util.stream.Collectors; * *

ArgsFile Selection

* - * During processing, any occurence of '-argsfile' selects the active argsfile and loads - * it into the command line in place of the '-argsfile' argument. By default the args file + * During processing, any occurence of '--argsfile' selects the active argsfile and loads + * it into the command line in place of the '--argsfile' argument. By default the args file * will be loaded if it exists, and a warning will be given if it does not. * - * The '-argsfile-required <somepath>' version will throw an error if the args file + * The '--argsfile-required <somepath>' version will throw an error if the args file * is not present, but it will not report any warnings or details otherwise. * - * The `-argsfile-optional <somepath> version will not throw an error if the args + * The `--argsfile-optional <somepath> version will not throw an error if the args * file is not present, and it will not report any warnings or details otherwise. * * A prefix command line can be given to ArgsFile to pre-load any settings. In this way * it is possible to easily provide a default args file which will be loaded. For example, - * A prefix command of '-argsfile-optional <somepath>' will load options if they are + * A prefix command of '--argsfile-optional <somepath>' will load options if they are * available in the specified file, but will otherwise provide no feedback to the user. * *

ArgsFile Injection

@@ -92,29 +92,29 @@ public class ArgsFile { while (commandline.peekFirst() != null) { String arg = commandline.peekFirst(); switch (arg) { - case "-argsfile": + case "--argsfile": commandline.removeFirst(); String argspath = readWordOrThrow(commandline, "path to an args file"); setArgsFile(argspath, Selection.WarnIfMissing); commandline = loadArgs(this.argsPath, Selection.WarnIfMissing, commandline); break; - case "-argsfile-required": + case "--argsfile-required": commandline.removeFirst(); String argspathRequired = readWordOrThrow(commandline, "path to an args file"); setArgsFile(argspathRequired, Selection.ErrorIfMissing); commandline = loadArgs(this.argsPath, Selection.ErrorIfMissing, commandline); break; - case "-argsfile-optional": + case "--argsfile-optional": commandline.removeFirst(); String argspathOptional = readWordOrThrow(commandline, "path to an args file"); setArgsFile(argspathOptional, Selection.IgnoreIfMissing); commandline = loadArgs(this.argsPath, Selection.IgnoreIfMissing, commandline); break; - case "-pin": + case "--pin": commandline.removeFirst(); commandline = pinArg(commandline); break; - case "-unpin": + case "--unpin": commandline.removeFirst(); commandline = unpinArg(commandline); break; 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 f0bd65e82..c92aa52f3 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 @@ -26,10 +26,10 @@ public class NBCLIOptions { // Options which may contextualize other CLI options or commands. // These must be parsed first - private static final String ARGS_FILE = "-argsfile"; + private static final String ARGS_FILE = "--argsfile"; private static final String ARGS_FILE_DEFAULT = "$HOME/.nosqlbench/argsfile"; - private static final String ARGS_PIN = "-pin"; - private static final String ARGS_UNPIN = "-unpin"; + private static final String ARGS_PIN = "--pin"; + private static final String ARGS_UNPIN = "--unpin"; private static final String INCLUDE = "--include"; private static final String METRICS_PREFIX = "--metrics-prefix"; @@ -164,7 +164,7 @@ public class NBCLIOptions { private LinkedList parseGlobalOptions(String[] args) { ArgsFile argsfile = new ArgsFile(); - argsfile.preload("-argsfile-optional", ARGS_FILE_DEFAULT); + argsfile.preload("--argsfile-optional", ARGS_FILE_DEFAULT); LinkedList arglist = new LinkedList<>() {{ addAll(Arrays.asList(args)); diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java index be6b11c59..91bb05ecc 100644 --- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java @@ -13,9 +13,9 @@ public class ArgsFileTest { public void testLoadingArgs() { LinkedList result; ArgsFile argsFile = new ArgsFile(); - result = argsFile.process("-argsfile", "src/test/resources/argsfiles/nonextant.cli"); + result = argsFile.process("--argsfile", "src/test/resources/argsfiles/nonextant.cli"); assertThat(result).containsExactly(); - result = argsFile.process("-argsfile", "src/test/resources/argsfiles/alphagamma.cli"); + result = argsFile.process("--argsfile", "src/test/resources/argsfiles/alphagamma.cli"); assertThat(result).containsExactly("alpha", "gamma"); } @@ -23,17 +23,18 @@ public class ArgsFileTest { public void testLoadingMissingRequiredFails() { LinkedList result; ArgsFile argsFile = new ArgsFile(); - result = argsFile.process("-argsfile-required", "src/test/resources/argsfiles/nonextant.cli"); + result = argsFile.process("--argsfile-required", "src/test/resources/argsfiles/nonextant.cli"); } @Test public void testLoadingInPlace() { LinkedList result; - LinkedList commands = new LinkedList<>(List.of("--abc", "--def", "-argsfile", "src/test/resources/argsfiles/alphagamma.cli")); - ArgsFile argsFile = new ArgsFile().preload("-argsfile-optional", "src/test/resources/argsfiles/alphagamma.cli"); + LinkedList commands = new LinkedList<>(List.of("--abc", "--def", "--argsfile", "src/test/resources" + + "/argsfiles/alphagamma.cli")); + ArgsFile argsFile = new ArgsFile().preload("--argsfile-optional", "src/test/resources/argsfiles/alphagamma" + + ".cli"); result = argsFile.process(commands); assertThat(result).containsExactly("alpha", "gamma", "--abc", "--def", "alpha", "gamma"); - } } \ No newline at end of file From 2830d070a6f0174ed50d6be1fe7bcbc2de6368f8 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 10:55:19 -0500 Subject: [PATCH 003/164] simple workload improvements --- nb/src/main/resources/examples/sequences.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nb/src/main/resources/examples/sequences.yaml b/nb/src/main/resources/examples/sequences.yaml index 9f086b582..e82a099a8 100644 --- a/nb/src/main/resources/examples/sequences.yaml +++ b/nb/src/main/resources/examples/sequences.yaml @@ -5,6 +5,9 @@ # eb run driver=stdout workload=examples/sequences cycles=20 seq=bucket # yields A B C D B C D C D D A B C D B C D C D D +description: | + Demonstration of the different op sequencing strategies + scenarios: concat: run driver===stdout seq===concat cycles=20 bucket: run driver===stdout seq===bucket cycles=20 From 6a8dfef1096821153fb7881a03fb83972096fdbc Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 10:55:24 -0500 Subject: [PATCH 004/164] qualify grafana docker with tag --- .../engine/docker/DockerHelper.java | 21 ++++++++++++------- .../engine/docker/DockerMetricsManager.java | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java index fcaf1aa07..812b737b4 100644 --- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java +++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java @@ -28,9 +28,9 @@ public class DockerHelper { private static final String DOCKER_HOST_ADDR = "unix:///var/run/docker.sock"; // private Client rsClient = ClientBuilder.newClient(); - private DockerClientConfig config; - private DockerClient dockerClient; - private Logger logger = LoggerFactory.getLogger(DockerHelper.class); + private final DockerClientConfig config; + private final DockerClient dockerClient; + private final Logger logger = LoggerFactory.getLogger(DockerHelper.class); public DockerHelper() { System.getProperties().setProperty(DOCKER_HOST, DOCKER_HOST_ADDR); @@ -56,7 +56,7 @@ public class DockerHelper { }; */ - Container containerId = searchContainer(name, reload); + Container containerId = searchContainer(name, reload, tag); if (containerId != null) { logger.debug("container is already up with the id: " + containerId.getId()); return null; @@ -65,15 +65,20 @@ public class DockerHelper { Info info = dockerClient.infoCmd().exec(); dockerClient.buildImageCmd(); - String term = IMG.split("/")[1]; +// String term = IMG+":"+tag; + +// String term = IMG.split("/")[1]; //List dockerSearch = dockerClient.searchImagesCmd(term).exec(); - List dockerList = dockerClient.listImagesCmd().withImageNameFilter(IMG).exec(); + List dockerList = dockerClient + .listImagesCmd() + .withImageNameFilter(IMG + ":" + tag) + .exec(); if (dockerList.size() == 0) { dockerClient.pullImageCmd(IMG) .withTag(tag) .exec(new PullImageResultCallback()).awaitSuccess(); - dockerList = dockerClient.listImagesCmd().withImageNameFilter(IMG).exec(); + dockerList = dockerClient.listImagesCmd().withImageNameFilter(IMG + ":" + tag).exec(); if (dockerList.size() == 0) { logger.error(String.format("Image %s not found, unable to automatically pull image." + " Check `docker images`", @@ -178,7 +183,7 @@ public class DockerHelper { return false; } - public Container searchContainer(String name, String reload) { + public Container searchContainer(String name, String reload, String tag) { ListContainersCmd listContainersCmd = dockerClient.listContainersCmd().withStatusFilter(List.of("running")); listContainersCmd.getFilters().put("name", Arrays.asList(name)); diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java index c31957153..eac7a6edd 100644 --- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java +++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java @@ -157,7 +157,7 @@ public class DockerMetricsManager { logger.info("searching for graphite exporter container ip"); - ContainerNetworkSettings settings = dh.searchContainer(name, null).getNetworkSettings(); + ContainerNetworkSettings settings = dh.searchContainer(name, null, tag).getNetworkSettings(); Map networks = settings.getNetworks(); String ip = null; for (String key : networks.keySet()) { From fd74ccba69dd4c3feedd7d6425905b6face4aa4f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 10:55:29 -0500 Subject: [PATCH 005/164] move common topics to resources base --- devdocs/sketches/argfiles.md | 87 --------------- engine-cli/src/main/resources/argsfile.md | 101 ++++++++++++++++++ .../src/main/resources/docker-metrics.md | 93 ++++++++++++++++ .../src/main/resources}/threads.md | 0 engine-cli/src/main/resources/topics.md | 3 + .../docs-for-ebhistoric/nb-cli-docs/docker.md | 60 ----------- 6 files changed, 197 insertions(+), 147 deletions(-) delete mode 100644 devdocs/sketches/argfiles.md create mode 100644 engine-cli/src/main/resources/argsfile.md create mode 100644 engine-cli/src/main/resources/docker-metrics.md rename {engine-docs/src/main/resources/docs-for-ebhistoric/nb-cli-docs => engine-cli/src/main/resources}/threads.md (100%) delete mode 100644 engine-docs/src/main/resources/docs-for-ebhistoric/nb-cli-docs/docker.md diff --git a/devdocs/sketches/argfiles.md b/devdocs/sketches/argfiles.md deleted file mode 100644 index b29b34db5..000000000 --- a/devdocs/sketches/argfiles.md +++ /dev/null @@ -1,87 +0,0 @@ -# Args Files - -An argsfile (Command Line Arguments File) is a simple text file which - contains defaults for command-line arguments. You can use an args - file to contain a set of global defaults that you want to use by - default and automatically. - -A command, `--argsfile ` is used to specify an args file. You can - use it like an instant import statement in the middle of a command - line. Notice that this option uses only a single dash. This - distinguishes the argsfile options from the others in general. These are meta - options which can modify how options are loaded, so it is important - that the look distinctive from everything else. - -## Default argsfile - -The default args file location is `$HOME/.nosqlbench/argsfile`. If this -file is present, it is loaded by nosqlbench when it starts even if you - don't ask it to. That is, nosqlbench behaves as if your first set of - command line arguments is `--argsfile "$HOME/.nosqlbench/argsfile - `. However, unlike when you specify `--argsfile ...` explicitly on - your command line, this form will not throw an error if the file is - missing. This means that when you explicitly ask for an args file - to be loaded, and it does not exist, an error is thrown. If you - don't ask for it, but the default one does exist, it is loaded - automatically before other options are processed. - -## Args file format - -An args file simply contains an argument on each line, like this: - - --docker-metrics - --annotate all - --grafana-baseurl http://localhost:3000/ - -## Pinning options - -It is possible to pin an option to the default args file by use of the - `--pin` meta-option. This option will take the following command line - argument and add it to the currently active args file. That means, if - you use `--pin --docker-metrics`, then `--docker-metrics` is added to - the args file. If there is an exact duplicate of the same option - and value, then it is skipped, but if the option name is the same - with a different value, then it is added at the end. This allows - for options which may be called multiple times normally. - -If the `--pin` option occurs after an explicit use of `--argsfile - `, then the filename used in this argument is the one that - is modified. - -After the `--pin` option, the following argument is taken as any global - option (--with-double-dashes) and any non-option values after it which - are not commands (reserved words) - -When the `--pin` option is used, it does not cause the pinned option - to be excluded from the current command line call. The effects of the - pinned option will take place in the current nosqlbench invocation - just as they would without the `--pin`. However, when pinning global - options when there are no commands on the command line, nosqlbench - will not run a scenario, so this form is suitable for setting - arguments. - -As a special case, if the `--pin` is the last option of - -## Unpinning options. - -To reverse the effect of pinning an option, you simply use - `--unpin ...`. - -The behavior of --unpin is slightly different than --pin. Specifically, -an option which is unpinned will be removed from the arg list, and will - not be used in the current invocation of nosqlbench after removal. - -Further, you can specify `--unpin --grafana-baseurl` to unpin an option - which - normally has an argument, and all instances of that argument will be - removed. If you want to unpin a specific instance of a multi-valued - option, or one that can be specified more than once with different - parameter values, then you must provide the value as well, as in - `--unpin --log-histograms 'histodata.log:.*:1m'` - -# Setting defaults, the simple way - -To simply set global defaults, you can run nosqlbench with a command - line like this: - - ./nb --pin --docker-metrics-at metricsnode --pin --annotate all diff --git a/engine-cli/src/main/resources/argsfile.md b/engine-cli/src/main/resources/argsfile.md new file mode 100644 index 000000000..6dba1011c --- /dev/null +++ b/engine-cli/src/main/resources/argsfile.md @@ -0,0 +1,101 @@ +# Args Files + +An argsfile (Command Line Arguments File) is a simple text file which +contains defaults for command-line arguments. You can use an args +file to contain a set of global defaults that you want to use by +default and automatically. + +A command, `--argsfile ` is used to specify an args file. You can +use it like an instant import statement in the middle of a command +line. There are three variants of this option. The `--argsfile ` +variant will warn you if the file doesn't exist. If you want to load +an argsfile if it exist, but avoid warnings if it doesn't, then use +the `--argsfile-optional ` form. If you want to throw an error if +the argsfile doesn't exist, then use the `--argsfile-required ` +form. + +## Default argsfile + +The default args file location is `$NBSTATEDIR/argsfile`. + +After the NBSTATEDIR environment variable or default is resolved, +the default argsfile will be searched for in that directory. + +`$NBSTATEDIR` is a mechanism for setting and finding the local state +directory for NoSQLBench. It is a search path, delimited by +colons, and allowing Java system properties and shell environment +variables. When the NBSTATEDIR location is first needed, +the paths are checked in order, and the first one found is used. +If one is not found on the filesystem, the first expanded value +is used to create the state directory. + + +If the default argsfile is is present, it is loaded by nosqlbench when +it starts even if you don't ask it to. That is, nosqlbench behaves as + if your first set of command line arguments is + + --argsfile-optional "$NBSTATEDIR/argsfile + +Just as with the NBSTATEDIR location, the argsfile can also be used +like a search path. That is, if the value provided is a colon-delimited +set of possible paths, the first one found (after variable expansion) +will be used. If needed, the first expanded path will be used to create +an argsfile when pinning options are used. + +## Args file format + +An args file simply contains an argument on each line, like this: + + --docker-metrics + --annotate all + --grafana-baseurl http://localhost:3000/ + +## Pinning options + +It is possible to pin an option to the default args file by use of the +`--pin` meta-option. This option will take the following command line +argument and add it to the currently active args file. That means, if +you use `--pin --docker-metrics`, then `--docker-metrics` is added to +the args file. If there is an exact duplicate of the same option +and value, then it is skipped, but if the option name is the same +with a different value, then it is added at the end. This allows +for options which may be called multiple times normally. + +If the `--pin` option occurs after an explicit use of `--argsfile +`, then the filename used in this argument is the one that +is modified. + +After the `--pin` option, the following argument is taken as any global +option (--with-double-dashes) and any non-option values after it which +are not commands (reserved words) + +When the `--pin` option is used, it does not cause the pinned option +to be excluded from the current command line call. The effects of the +pinned option will take place in the current nosqlbench invocation +just as they would without the `--pin`. However, when pinning global +options when there are no commands on the command line, nosqlbench +will not run a scenario, so this form is suitable for setting +arguments. + +## Unpinning options. + +To reverse the effect of pinning an option, you simply use + `--unpin ...`. + +The behavior of --unpin is slightly different than --pin. Specifically, +an option which is unpinned will be removed from the arg list, and will +not be used in the current invocation of nosqlbench after removal. + +Further, you can specify `--unpin --grafana-baseurl` to unpin an option +which normally has an argument, and all instances of that argument will be +removed. If you want to unpin a specific instance of a multi-valued +option, or one that can be specified more than once with different +parameter values, then you must provide the value as well, as in +`--unpin --log-histograms 'histodata.log:.*:1m'` + +# Setting defaults, the simple way + +To simply set global defaults, you can run nosqlbench with a command +line like this: + + ./nb --pin --docker-metrics-at metricsnode --pin --annotate all diff --git a/engine-cli/src/main/resources/docker-metrics.md b/engine-cli/src/main/resources/docker-metrics.md new file mode 100644 index 000000000..b4039b678 --- /dev/null +++ b/engine-cli/src/main/resources/docker-metrics.md @@ -0,0 +1,93 @@ +# docker-metrics + +Enlist nosqlbench to stand up your metrics infrastructure using a local +docker runtime: + + --docker-metrics + +When this option is set, nosqlbench will start graphite, prometheus, +and grafana dockers (if-needed) automatically on your local system +, configure them to work together, and point nosqlbench to send metrics +and annotations to the system automatically. + +The inclued NoSQLBench dashboard uses the default grafana credentials of + admin:admin. You can find this dashboard by browsing to the "manage + dashboards" section of grafana. + +# remote docker-metrics + +It is possible to use `--docker-metrics` to set up a metrics collector +stack on one system and use it from multiple other systems. In order +to point client system at the collector, use an option like this: + + --docker-metrics-at 192.168.192.168 + +This will configure graphite and grafana annotations to point to +the docker stack at the configured address. + +Further, if you want to do one-time configuration on the collector node +and other nodes, you can use this pattern: + + # on the collector node + ... --pin --docker-metrics + + # on other nodes + ... --pin --docker-metrics-at + +This causes these options to be configured by default in an argsfile +at `$HOME/.nosqlbench/argsfile`. The options above are pinned to +be included by default in every command run from that point forward. + +## Docker Details + +If you want to know exactly what nosqlbench is doing, it's the equivalent +of running the following by hand: + + # pull and run the graphite-exporter container + docker run -d -p 9108:9108 -p 9109:9109 -p 9109:9109/udp prom/graphite-exporter + +Configuration files which are used by the docker containers are stored in: + + $HOME/.nosqlbench + +## Resetting docker state + +If you need to clear the state for a local docker metrics stack, you + can remove these directories. + + # DASHBOARDS AND METRICS WILL BE LOST IF YOU DO THIS + rm ~/.nosqlbench/{grafana,prometheus,prometheus-conf,graphite-exporter} + +## Manually installing dockers + + # pull and run the prometheus container + docker run -d -p 9090:9090 -v '/.prometheus:/etc/prometheus' prom/prometheus --config.file=/etc/prometheus/prometheus.yml" --storage.tsdb.path=/prometheus" --storage.tsdb.retention=183d --web.enable-lifecycle + + # pull and run the grafana container + docker run -d -p 3000:3000 -v grafana/grafana + +## Experimental environment variables + +These may allow you to send snapshot data to a specially configured +remote grafana instance. + + GF_SECURITY_ADMIN_PASSWORD=admin + GF_AUTH_ANONYMOUS_ENABLED="true" + GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_URL=http://54.165.144.56:3001 + GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_NAME="Send to Wei" + +## Configuration Endpoints (Experimental) + +You can use the grafana api to set up the datasource and dashboard +if you have other tools which integrate with grafana: + + # These are not commands, they are only provides API parameters + + POST http://localhost:3000/api/dashboards/db + analysis.json + # (found in resources/docker/dashboards/analysis.json) + + POST http://localhost:3000/api/datasources + prometheus-datasource.yaml + # (found in resources/docker/datasources/prometheus-datasource.yaml) + diff --git a/engine-docs/src/main/resources/docs-for-ebhistoric/nb-cli-docs/threads.md b/engine-cli/src/main/resources/threads.md similarity index 100% rename from engine-docs/src/main/resources/docs-for-ebhistoric/nb-cli-docs/threads.md rename to engine-cli/src/main/resources/threads.md diff --git a/engine-cli/src/main/resources/topics.md b/engine-cli/src/main/resources/topics.md index 14cf57c7b..6541bdd77 100644 --- a/engine-cli/src/main/resources/topics.md +++ b/engine-cli/src/main/resources/topics.md @@ -1,3 +1,6 @@ # global help topics - commandline - cli-scripting +- argsfile +- threads +- docker-metrics diff --git a/engine-docs/src/main/resources/docs-for-ebhistoric/nb-cli-docs/docker.md b/engine-docs/src/main/resources/docs-for-ebhistoric/nb-cli-docs/docker.md deleted file mode 100644 index 8f9900bf0..000000000 --- a/engine-docs/src/main/resources/docs-for-ebhistoric/nb-cli-docs/docker.md +++ /dev/null @@ -1,60 +0,0 @@ -## docker metrics - -### summary - -Enlist nosqlbench to stand up your metrics infrastructure using a local docker runtime: - - --docker-metrics - -When this option is set, nosqlbench will start graphite, prometheus, and grafana automatically -on your local docker, configure them to work together, and point nosqlbench to send metrics -the system automatically. It also imports a base dashboard for nosqlbench and configures grafana -snapshot export to share with a central DataStax grafana instance (grafana can be found on localhost:3000 -with the default credentials admin/admin). - -### details - -If you want to know exactly what nosqlbench is doing, it's the equivalent of running the following by hand: - -#### pull and run the graphite-exporter container - - docker run -d -p 9108:9108 -p 9109:9109 -p 9109:9109/udp prom/graphite-exporter - -#### prometheus config - -place prometheus config in .prometheus: - -prometheus.yml (found in resources/docker/prometheus/prometheus.yml) - - -#### pull and run the prometheus container - - docker run -d -p 9090:9090 -v '/.prometheus:/etc/prometheus' prom/prometheus --config.file=/etc/prometheus/prometheus.yml" --storage.tsdb.path=/prometheus" --storage.tsdb.retention=183d --web.enable-lifecycle - -#### pull and run the grafana container - - docker run -d -p 3000:3000 -v grafana/grafana - -with the following environment variables: - - GF_SECURITY_ADMIN_PASSWORD=admin - GF_AUTH_ANONYMOUS_ENABLED="true" - GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_URL=http://54.165.144.56:3001 - GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_NAME="Send to Wei" - -#### configure grafana - -use the grafana api to set up the datasource and dashboard - -POST -http://localhost:3000/api/dashboards/db - -Payload: -analysis.json (found in resources/docker/dashboards/analysis.json) - -POST -http://localhost:3000/api/datasources - -Payload: -prometheus-datasource.yaml (found in resources/docker/datasources/prometheus-datasource.yaml) - From b5901679123c08de7a6f1726d52b3178f1fad9a1 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 10:55:33 -0500 Subject: [PATCH 006/164] environment and sys prop support --- .../io/nosqlbench/engine/cli/Environment.java | 197 ++++++++++++++++++ .../engine/cli/EnvironmentTest.java | 18 ++ .../src/test/resources/argsfiles/home_env.cli | 1 + 3 files changed, 216 insertions(+) create mode 100644 engine-cli/src/main/java/io/nosqlbench/engine/cli/Environment.java create mode 100644 engine-cli/src/test/java/io/nosqlbench/engine/cli/EnvironmentTest.java create mode 100644 engine-cli/src/test/resources/argsfiles/home_env.cli diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/Environment.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/Environment.java new file mode 100644 index 000000000..adf3da550 --- /dev/null +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/Environment.java @@ -0,0 +1,197 @@ +package io.nosqlbench.engine.cli; + +import io.nosqlbench.nb.api.errors.BasicError; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Safer, Easier lookup of property and environment variables, so + * that commonly used env vars as seen on *n*x systems map to stable + * system properties where known, but attempt to fall through to + * the env variables if not. + * + * As long as all accesses and mutations for System properties and/or + * environment variables are marshaled through a singleton instance + * of this class, then users will not easily make a modify-after-reference + * bug without a warning or error. + * + * Referencing a variable here means that a value was asked for under a + * name, and a value was returned, even if this was the default value. + * + * Properties which contains a dot are presumed to be System properties, + * and so in that case System properties take precedence for those. + * + * Environment variables which are known to map to a stable system property + * are redirected to the system property. + * + * Otherwise, the environment variable is checked. + * + * Finally, System properties are checked for names not containing a dot. + * + * The first location to return a non-null value is used. Null values are considered + * invalid in this API, except when provided as a default value. + */ +public class Environment { + private final static Logger logger = LoggerFactory.getLogger(Environment.class); + + // package private for testing + Environment() { + } + + public final static Environment INSTANCE = new Environment(); + + private final LinkedHashMap references = new LinkedHashMap<>(); + + private final static Map envToProp = Map.of( + "PWD", "user.dir", + "HOME", "user.home", + "USERNAME", "user.name", // Win* + "USER", "user.name", // *n*x + "LOGNAME", "user.name" // *n*x + ); + + public Environment resetRefs() { + this.references.clear(); + return this; + } + + public void put(String propname, String value) { + if (envToProp.containsKey(propname)) { + throw new RuntimeException("The property you are changing should be considered immutable in this " + + "process: '" + propname + "'"); + } + if (references.containsKey(propname)) { + if (references.get(propname).equals(value)) { + logger.warn("changing already referenced property '" + propname + "' to same value"); + } else { + throw new BasicError("Changing already referenced property '" + propname + "' from \n" + + "'" + references.get(propname) + "' to '" + value + "' is not supported.\n" + + " (maybe you can change the order of your options to set higher-level parameters first.)"); + } + + } + System.setProperty(propname, value); + } + + private String reference(String name, String value) { + this.references.put(name, value); + return value; + } + + /** + * Return the value in the first place it is found to be non-null, + * or the default value otherwise. + * + * @param name The system property or environment variable name + * @param defaultValue The value to return if the name is not found + * @return the system property or environment variable's value, or the default value + */ + public String getOr(String name, String defaultValue) { + String value = peek(name); + if (value == null) { + value = defaultValue; + } + return reference(name, value); + } + + private String peek(String name) { + String value = null; + if (name.contains(".")) { + value = System.getProperty(name.toLowerCase()); + if (value != null) { + return value; + } + } + if (envToProp.containsKey(name.toUpperCase())) { + String propName = envToProp.get(name.toUpperCase()); + logger.debug("redirecting env var '" + name + "' to property '" + propName + "'"); + value = System.getProperty(propName); + if (value != null) { + return value; + } + } + value = System.getProperty(name); + if (value != null) { + return value; + } + + value = System.getenv(name); + if (value != null) { + return value; + } + + return null; + } + + /** + * Attempt to read the variable in System properties or the shell environment. If it + * is not found, throw an exception. + * + * @param name The System property or environment variable + * @return the variable + * @throws BasicError if no value was found which was non-null + */ + public String get(String name) { + String value = getOr(name, null); + if (value == null) { + throw new BasicError("No variable was found for '" + name + "' in system properties nor in the shell " + + "environment."); + } + return value; + } + + public boolean containsKey(String name) { + String value = peek(name); + return (value != null); + } + + /** + * For the given word, if it contains a pattern with '$' followed by alpha, followed + * by alphanumeric and underscores, replace this pattern with the system property or + * environment variable of the same name. Do this for all occurrences of this pattern. + * + * For patterns which start with '${' and end with '}', replace the contents with the same + * rules as above, but allow any character in between. + * + * Nesting is not supported. + * + * @param word The word to interpolate the environment values into + * @return The interpolated value, after substitutions, or null if any lookup failed + */ + public Optional interpolate(String word) { + Pattern envpattern = Pattern.compile("(\\$(?[a-zA-Z_][A-Za-z0-9_.]+)|\\$\\{(?[^}]+)\\})"); + Matcher matcher = envpattern.matcher(word); + StringBuilder sb = new StringBuilder(); + while (matcher.find()) { + String envvar = matcher.group("env1"); + if (envvar == null) { + envvar = matcher.group("env2"); + } + String value = peek(envvar); + if (value == null) { + logger.debug("no value found for '" + envvar + "', returning Optional.empty() for '" + word + "'"); + return Optional.empty(); + } else { + value = reference(envvar, value); + } + matcher.appendReplacement(sb, value); + } + matcher.appendTail(sb); + return Optional.of(sb.toString()); + } + + public List interpolate(CharSequence delim, String combined) { + String[] split = combined.split(delim.toString()); + List mapped = new ArrayList<>(); + for (String pattern : split) { + Optional interpolated = interpolate(pattern); + interpolated.ifPresent(mapped::add); + } + return mapped; + } + +} diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/EnvironmentTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/EnvironmentTest.java new file mode 100644 index 000000000..c65b069f1 --- /dev/null +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/EnvironmentTest.java @@ -0,0 +1,18 @@ +package io.nosqlbench.engine.cli; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class EnvironmentTest { + + @Test + public void testInterpolation() { + Environment env = new Environment(); + String home1 = env.interpolate("home is '$HOME'").orElse(null); + assertThat(home1).matches(".+"); + String home2 = env.interpolate("home is '${home}'").orElse(null); + assertThat(home1).matches(".+"); + } + +} \ No newline at end of file diff --git a/engine-cli/src/test/resources/argsfiles/home_env.cli b/engine-cli/src/test/resources/argsfiles/home_env.cli new file mode 100644 index 000000000..ad8641311 --- /dev/null +++ b/engine-cli/src/test/resources/argsfiles/home_env.cli @@ -0,0 +1 @@ +--homedir $HOME \ No newline at end of file From 1382d33d12a4c396d87b7bd7d9eb993b3060a472 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 10:55:38 -0500 Subject: [PATCH 007/164] argsfiles and statedirs --- .../io/nosqlbench/engine/cli/ArgsFile.java | 234 -------- .../java/io/nosqlbench/engine/cli/NBCLI.java | 64 +-- .../nosqlbench/engine/cli/NBCLIArgsFile.java | 500 ++++++++++++++++++ .../nosqlbench/engine/cli/NBCLIOptions.java | 152 ++++-- .../nosqlbench/engine/cli/ArgsFileTest.java | 40 -- .../engine/cli/NBCLIArgsFileTest.java | 117 ++++ 6 files changed, 768 insertions(+), 339 deletions(-) delete mode 100644 engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java create mode 100644 engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIArgsFile.java delete mode 100644 engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java create mode 100644 engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIArgsFileTest.java diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java deleted file mode 100644 index 94dcd4258..000000000 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ArgsFile.java +++ /dev/null @@ -1,234 +0,0 @@ -package io.nosqlbench.engine.cli; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -/** - *

Synopsis

- * - * ArgsFile is a command-line modifier which can take linked list of - * command args and modify it, and/or modify argsfile refrenced in this way. - * - *

ArgsFile Selection

- * - * During processing, any occurence of '--argsfile' selects the active argsfile and loads - * it into the command line in place of the '--argsfile' argument. By default the args file - * will be loaded if it exists, and a warning will be given if it does not. - * - * The '--argsfile-required <somepath>' version will throw an error if the args file - * is not present, but it will not report any warnings or details otherwise. - * - * The `--argsfile-optional <somepath> version will not throw an error if the args - * file is not present, and it will not report any warnings or details otherwise. - * - * A prefix command line can be given to ArgsFile to pre-load any settings. In this way - * it is possible to easily provide a default args file which will be loaded. For example, - * A prefix command of '--argsfile-optional <somepath>' will load options if they are - * available in the specified file, but will otherwise provide no feedback to the user. - * - *

ArgsFile Injection

- * - * When an argsfile is loaded, it reads a command from each line into the current position - * of the command line. No parsing is done. Blank lines are ignored. Newlines are used as the - * argument delimiter, and lines that end with a backslash before the newline are automatically - * joined together. - * - *

ArgsFile Diagnostics

- * - * All modifications to the command line should be reported to the logging facility at - * INFO level. This assumes that the calling layer wants to inform users of command line injections, - * and that the user can select to be notified of warnings only if desired. - * - *

Environment Variables

- * - * Simple environment variable substitution is attempted for any pattern which appears as '$' followed - * by all uppercase letters and underscores. Any references of this type which are not resolvable - * will cause an error to be thrown. - */ -public class ArgsFile { - private final static Logger logger = LoggerFactory.getLogger(ArgsFile.class); - - private Path argsPath; - private LinkedList preload; - - public ArgsFile() { - } - - public ArgsFile preload(String... preload) { - this.preload = new LinkedList(Arrays.asList(preload)); - return this; - } - - private enum Selection { - // Ignore if not present, show injections at info - IgnoreIfMissing, - // Warn if not present, but show injections at info - WarnIfMissing, - // throw error if not present, show injections at info - ErrorIfMissing - } - - public LinkedList process(String... args) { - return process(new LinkedList(Arrays.asList(args))); - } - - public LinkedList process(LinkedList commandline) { - if (preload != null) { - LinkedList modified = new LinkedList(); - modified.addAll(preload); - modified.addAll(commandline); - preload = null; - commandline = modified; - } - LinkedList composed = new LinkedList<>(); - while (commandline.peekFirst() != null) { - String arg = commandline.peekFirst(); - switch (arg) { - case "--argsfile": - commandline.removeFirst(); - String argspath = readWordOrThrow(commandline, "path to an args file"); - setArgsFile(argspath, Selection.WarnIfMissing); - commandline = loadArgs(this.argsPath, Selection.WarnIfMissing, commandline); - break; - case "--argsfile-required": - commandline.removeFirst(); - String argspathRequired = readWordOrThrow(commandline, "path to an args file"); - setArgsFile(argspathRequired, Selection.ErrorIfMissing); - commandline = loadArgs(this.argsPath, Selection.ErrorIfMissing, commandline); - break; - case "--argsfile-optional": - commandline.removeFirst(); - String argspathOptional = readWordOrThrow(commandline, "path to an args file"); - setArgsFile(argspathOptional, Selection.IgnoreIfMissing); - commandline = loadArgs(this.argsPath, Selection.IgnoreIfMissing, commandline); - break; - case "--pin": - commandline.removeFirst(); - commandline = pinArg(commandline); - break; - case "--unpin": - commandline.removeFirst(); - commandline = unpinArg(commandline); - break; - default: - composed.addLast(commandline.removeFirst()); - } - - } - return composed; - } - - private LinkedList loadArgs(Path argspath, Selection mode, LinkedList commandline) { - if (!assertArgsFileExists(argspath, mode)) { - return commandline; - } - List lines = null; - try { - lines = Files.readAllLines(argspath); - } catch (IOException e) { - throw new RuntimeException(e); - } - List content = lines.stream() - .filter(s -> !s.startsWith("#")) - .filter(s -> !s.startsWith("/")) - .filter(s -> !s.isBlank()) - .filter(s -> !s.isEmpty()) - .collect(Collectors.toList()); - StringBuilder splitword = new StringBuilder(); - LinkedList loaded = new LinkedList<>(); - for (String s : content) { - splitword.append(s); - if (!s.endsWith("\\")) { - loaded.addLast(splitword.toString()); - splitword.setLength(0); - } else { - splitword.setLength(splitword.length() - 1); - } - } - if (splitword.length() > 0) { - throw new RuntimeException("unqualified line continuation for '" + splitword.toString() + "'"); - } - - Iterator injections = loaded.descendingIterator(); - while (injections.hasNext()) { - String injection = injections.next(); - injection = injectEnv(injection); - commandline.addFirst(injection); - } - - return commandline; - } - - private boolean assertArgsFileExists(Path argspath, Selection mode) { - if (!Files.exists(argsPath)) { - switch (mode) { - case ErrorIfMissing: - throw new RuntimeException("A required argsfile was specified, but it does not exist: '" + argspath + "'"); - case WarnIfMissing: - logger.warn("An argsfile was specified, but it does not exist: '" + argspath + "'"); - case IgnoreIfMissing: - } - return false; - } - return true; - } - - private void setArgsFile(String argspath, Selection mode) { - this.argsPath = Path.of(argspath); -// assertIfMissing(this.argsPath,mode); - } - - private String readWordOrThrow(LinkedList commandline, String description) { - String found = commandline.peekFirst(); - if (found == null) { - throw new RuntimeException("Unable to read argument top option for " + description); - } - return commandline.removeFirst(); - } - - private LinkedList pinArg(LinkedList commandline) { - if (this.argsPath == null) { - throw new RuntimeException("No argsfile has been selected before using the pin option."); - } - return commandline; - } - - private LinkedList unpinArg(LinkedList commandline) { - if (this.argsPath == null) { - throw new RuntimeException("No argsfile has been selected before using the unpin option."); - } - return commandline; - } - - private String injectEnv(String word) { - Pattern envpattern = Pattern.compile("(?\\$[A-Z_]+)"); - Matcher matcher = envpattern.matcher(word); - StringBuilder sb = new StringBuilder(); - while (matcher.find()) { - String envvar = matcher.group("envvar"); - String value = System.getenv(envvar); - if (value == null) { - throw new RuntimeException("Env var '" + envvar + "' was not found in the environment."); - } - matcher.appendReplacement(sb, value); - } - matcher.appendTail(sb); - return sb.toString(); - } - - public LinkedList pin(LinkedList arglist) { - return arglist; - } - - public LinkedList unpin(LinkedList arglist) { - return arglist; - } -} 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 57caa129d..db6f08530 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 @@ -39,10 +39,10 @@ import java.util.stream.Collectors; public class NBCLI { - private static final Logger logger = LoggerFactory.getLogger(NBCLI.class); + private static final Logger logger = LoggerFactory.getLogger("NBCLI"); private static final Logger EVENTS = LoggerFactory.getLogger("EVENTS"); - private static final String CHART_HDR_LOG_NAME = "hdrdata-for-chart.log"; + private static final String CHART_HDR_LOG_NAME = "hdrdata-for-chart.log"; private final String commandName; @@ -70,36 +70,43 @@ public class NBCLI { NBCLIOptions globalOptions = new NBCLIOptions(args, NBCLIOptions.Mode.ParseGlobalsOnly); // Global only processing + if (args.length == 0) { + System.out.println(loadHelpFile("commandline.md")); + System.exit(0); + } + boolean dockerMetrics = globalOptions.wantsDockerMetrics(); + String dockerMetricsAt = globalOptions.wantsDockerMetricsAt(); String reportGraphiteTo = globalOptions.wantsReportGraphiteTo(); + int mOpts = (dockerMetrics ? 1 : 0) + (dockerMetricsAt != null ? 1 : 0) + (reportGraphiteTo != null ? 1 : 0); + if (mOpts > 1) { + throw new BasicError("You have multiple conflicting options which attempt to set\n" + + " the destination for metrics and annotations. Please select only one of\n" + + " --docker-metrics, --docker-metrics-at , or --report-graphite-to \n" + + " For more details, see run 'nb help docker-metrics'"); + } - if (globalOptions.wantsDockerMetrics()) { + String metricsAddr = null; + + if (dockerMetrics) { + // Setup docker stack for local docker metrics logger.info("Docker metrics is enabled. Docker must be installed for this to work"); DockerMetricsManager dmh = new DockerMetricsManager(); Map dashboardOptions = Map.of( - DockerMetricsManager.GRAFANA_TAG, globalOptions.getDockerGrafanaTag() + DockerMetricsManager.GRAFANA_TAG, globalOptions.getDockerGrafanaTag() ); dmh.startMetrics(dashboardOptions); - String warn = "Docker Containers are started, for grafana and prometheus, hit" + - " these urls in your browser: http://:3000 and http://:9090"; + " these urls in your browser: http://:3000 and http://:9090"; logger.warn(warn); - if (reportGraphiteTo != null) { - logger.warn(String.format("Docker metrics are enabled (--docker-metrics)" + - " but graphite reporting (--report-graphite-to) is set to %s \n" + - "usually only one of the two is configured.", - reportGraphiteTo)); - } else { - logger.info("Setting graphite reporting to localhost"); - reportGraphiteTo = "localhost:9109"; - } + metricsAddr = "localhost"; + } else if (dockerMetricsAt != null) { + metricsAddr = dockerMetricsAt; + } - if (globalOptions.getAnnotatorsConfig() != null) { - logger.warn("Docker metrics and separate annotations" + - "are configured (both --docker-metrics and --annotations)."); - } else { - Annotators.init("grafana{http://localhost:3000/}"); - } + if (metricsAddr != null) { + reportGraphiteTo = metricsAddr + ":9109"; + Annotators.init("{type:'grafana',url:'http://" + metricsAddr + ":3000/'}"); } if (args.length > 0 && args[0].toLowerCase().equals("virtdata")) { @@ -275,13 +282,6 @@ public class NBCLI { // intentionally not shown for warn-only logger.info("console logging level is " + options.wantsConsoleLogLevel()); - if (options.getCommands(). - - size() == 0) { - System.out.println(loadHelpFile("commandline.md")); - System.exit(0); - } - ScenariosExecutor executor = new ScenariosExecutor("executor-" + sessionName, 1); Scenario scenario = new Scenario( @@ -311,8 +311,6 @@ public class NBCLI { } - // Execute Scenario! - Level consoleLogLevel = options.wantsConsoleLogLevel(); Level scenarioLogLevel = Level.toLevel(options.getLogsLevel()); if (scenarioLogLevel.toInt() > consoleLogLevel.toInt()) { @@ -321,6 +319,12 @@ public class NBCLI { Level maxLevel = Level.toLevel(Math.min(consoleLogLevel.toInt(), scenarioLogLevel.toInt())); + // Execute Scenario! + if (options.getCommands().size() == 0) { + logger.info("No commands provided. Exiting before scenario."); + System.exit(0); + } + scenario.addScriptText(scriptData); ScriptParams scriptParams = new ScriptParams(); scriptParams.putAll(buffer.getCombinedParams()); 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 new file mode 100644 index 000000000..ec047e94f --- /dev/null +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIArgsFile.java @@ -0,0 +1,500 @@ +package io.nosqlbench.engine.cli; + +import io.nosqlbench.nb.api.errors.BasicError; +import joptsimple.internal.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

Synopsis

+ * + * ArgsFile is a command-line modifier which can take linked list of + * command args and modify it, and/or modify argsfile refrenced in this way. + * + *

ArgsFile Selection

+ * + * During processing, any occurence of '--argsfile' selects the active argsfile and loads + * it into the command line in place of the '--argsfile' argument. By default the args file + * will be loaded if it exists, and a warning will be given if it does not. + * + * The '--argsfile-required <somepath>' version will throw an error if the args file + * is not present, but it will not report any warnings or details otherwise. + * + * The `--argsfile-optional <somepath> version will not throw an error if the args + * file is not present, and it will not report any warnings or details otherwise. + * + * A prefix command line can be given to ArgsFile to pre-load any settings. In this way + * it is possible to easily provide a default args file which will be loaded. For example, + * A prefix command of '--argsfile-optional <somepath>' will load options if they are + * available in the specified file, but will otherwise provide no feedback to the user. + * + *

ArgsFile Injection

+ * + * When an argsfile is loaded, it reads a command from each line into the current position + * of the command line. No parsing is done. Blank lines are ignored. Newlines are used as the + * argument delimiter, and lines that end with a backslash before the newline are automatically + * joined together. + * + *

ArgsFile Diagnostics

+ * + * All modifications to the command line should be reported to the logging facility at + * INFO level. This assumes that the calling layer wants to inform users of command line injections, + * and that the user can select to be notified of warnings only if desired. + * + *

Environment Variables

+ * + * Simple environment variable substitution is attempted for any pattern which appears as '$' followed + * by all uppercase letters and underscores. Any references of this type which are not resolvable + * will cause an error to be thrown. + */ +public class NBCLIArgsFile { + private final static Logger logger = LoggerFactory.getLogger("ARGSFILE"); + + // Options which may contextualize other CLI options or commands. + // These must be parsed first + public static final String ARGS_FILE = "--argsfile"; + public static final String ARGS_FILE_OPTIONAL = "--argsfile-optional"; + public static final String ARGS_FILE_REQUIRED = "--argsfile-required"; + public static final String ARGS_PIN = "--pin"; + public static final String ARGS_UNPIN = "--unpin"; + + private Path argsPath; + private LinkedList preload; + private final Set stopWords = new HashSet<>(); + private final LinkedHashSet args = new LinkedHashSet<>(); + LinkedHashSet argsToPin = new LinkedHashSet<>(); + LinkedHashSet argsToUnpin = new LinkedHashSet<>(); + private final Set readPaths = new HashSet<>(); + + public NBCLIArgsFile() { + } + + public NBCLIArgsFile preload(String... preload) { + this.preload = new LinkedList(Arrays.asList(preload)); + return this; + } + + /** + * Indicate which words are invalid for the purposes of matching + * trailing parts of arguments. The provided words will not + * be considered as valid values to arguments in any case. + * + * @param reservedWords Words to ignore in option values + * @return this ArgsFile, for method chaining + */ + public NBCLIArgsFile reserved(Collection reservedWords) { + this.stopWords.addAll(reservedWords); + return this; + } + + /** + * Indicate which words are invalid for the purposes of matching + * trailing parts of arguments. The provided words will not + * be considered as valid values to arguments in any case. + * + * @param reservedWords Words to ignore in option values + * @return this ArgsFile, for method chaining + */ + public NBCLIArgsFile reserved(String... reservedWords) { + this.stopWords.addAll(Arrays.asList(reservedWords)); + return this; + } + + private enum Selection { + // Ignore if not present, show injections at info + IgnoreIfMissing, + // Warn if not present, but show injections at info + WarnIfMissing, + // throw error if not present, show injections at info + ErrorIfMissing + } + + public LinkedList process(String... args) { + return process(new LinkedList(Arrays.asList(args))); + } + + public LinkedList process(LinkedList commandline) { + if (preload != null) { + LinkedList modified = new LinkedList(); + modified.addAll(preload); + modified.addAll(commandline); + preload = null; + commandline = modified; + } + LinkedList composed = new LinkedList<>(); + + while (commandline.peekFirst() != null) { + String arg = commandline.peekFirst(); + switch (arg) { + case ARGS_FILE: + pinAndUnpin(); + commandline.removeFirst(); + String argspath = readWordOrThrow(commandline, "path to an args file"); + setArgsFile(argspath, Selection.WarnIfMissing); + commandline = mergeArgs(this.argsPath, Selection.WarnIfMissing, commandline); + break; + case ARGS_FILE_REQUIRED: + commandline.removeFirst(); + String argspathRequired = readWordOrThrow(commandline, "path to an args file"); + setArgsFile(argspathRequired, Selection.ErrorIfMissing); + commandline = mergeArgs(this.argsPath, Selection.ErrorIfMissing, commandline); + break; + case ARGS_FILE_OPTIONAL: + commandline.removeFirst(); + String argspathOptional = readWordOrThrow(commandline, "path to an args file"); + setArgsFile(argspathOptional, Selection.IgnoreIfMissing); + commandline = mergeArgs(this.argsPath, Selection.IgnoreIfMissing, commandline); + break; + case ARGS_PIN: + commandline.removeFirst(); + argsToPin.addAll(argsToLines(readOptionAndArg(commandline, false))); + break; + case ARGS_UNPIN: + commandline.removeFirst(); + argsToUnpin.addAll(argsToLines(readOptionAndArg(commandline, true))); + break; + default: + composed.addLast(commandline.removeFirst()); + } + } + pinAndUnpin(); + return composed; + } + + private void pinAndUnpin() { + if (this.argsToUnpin.size() == 0 && this.argsToPin.size() == 0) { + return; + } + LinkedHashSet extant = readArgsFile(this.argsPath, Selection.IgnoreIfMissing); + LinkedHashSet mergedPins = mergePins(this.argsToPin, this.argsToUnpin, extant); + if (extant.equals(mergedPins)) { + logger.info("Pinning resulted in no changes to argsfile '" + this.argsPath.toString() + "'"); + } else { + logger.info("Writing updated argsfile '" + this.argsPath.toString() + "' with " + + (this.argsToPin.size() + this.argsToUnpin.size()) + " changes"); + writeArgsFile(mergedPins); + } + + this.argsToPin.clear(); + this.argsToUnpin.clear(); + + } + + + private LinkedHashSet mergePins( + LinkedHashSet toPin, + LinkedHashSet toUnpin, + LinkedHashSet extant) { + + LinkedHashSet merged = new LinkedHashSet<>(); + merged.addAll(extant); + + for (String arg : toPin) { + if (argsToUnpin.contains(arg)) { + throw new RuntimeException("You have both --pin and --unpin for '" + arg + ", I don't know which " + + "one you want."); + } + } + for (String arg : toUnpin) { + if (argsToPin.contains(arg)) { + throw new RuntimeException("You have both --pin and --unpin for '" + arg + ", I don't know which " + + "one you want."); + } + } + + for (String toAdd : toPin) { + if (merged.contains(toAdd)) { + logger.warn("Requested to pin argument again: '" + toAdd + "', ignoring"); + } else { + logger.info("Pinning option '" + toAdd + "' to '" + this.argsPath.toString() + "'"); + merged.add(toAdd); + } + } + + for (String toDel : toUnpin) { + if (merged.contains(toDel)) { + logger.info("Unpinning '" + toDel + "' from '" + this.argsPath.toString() + "'"); + merged.remove(toDel); + } else { + logger.warn("Requested to unpin argument '" + toDel + "' which was not found in " + argsPath.toString()); + } + } + + return merged; + } + + LinkedList mergeArgs(Path argspath, Selection mode, LinkedList commandline) { + this.args.clear(); + if (this.readPaths.contains(argsPath.toString())) { + throw new BasicError("Recursive reading of argsfile is detected for '" + argspath.toString() + "'.\n" + + "Please ensure that you do not have cyclic references in your arguments for argsfiles."); + } + LinkedHashSet loaded = readArgsFile(argspath, mode); + this.readPaths.add(argsPath.toString()); + + List interpolated = loaded.stream() + .map(p -> { + String q = Environment.INSTANCE.interpolate(p).orElse(p); + if (!q.equals(p)) { + logger.info("argsfile: '" + argsPath.toString() + "': loaded option '" + p + "' as '" + q + "'"); + } + return q; + }) + .collect(Collectors.toList()); + + LinkedList inArgvForm = linesToArgs(interpolated); + this.args.addAll(inArgvForm); + return concat(inArgvForm, commandline); + } + + private LinkedList concat(Collection... entries) { + LinkedList composed = new LinkedList<>(); + for (Collection list : entries) { + composed.addAll(list); + } + return composed; + } + + /** + *

Load the args file into an args array. The returned format follows + * the standard pattern of args as you would see for a main method, although + * the internal format is structured to support easy editing and clarity.

+ * + *

+ * The args file is stored in a simple option-per-line format which + * follows these rules: + *

    + *
  • Lines ending with a backslash (\) only are concatenated to the next + * line with the backslash removed. + *
  • Line content consists of one option and one optional argument.
  • + *
  • Options must start with at least one dash (-).
  • + *
  • If an argument is provided for an option, it follows the option and a space.
  • + *
  • Empty lines and lines which start with '//' or '#' are ignored.
  • + *
  • Lines which are identical after applying the above rules are elided + * down to the last occurence.
  • + *
+ *

+ * + *

+ * This allows for multi-valued options, or options which can be specified multiple + * times with different arguments to be supported, so long as each occurrence has a + * unique option value. + *

+ * + * @param argspath The path of the argsfile to load + * @param mode The level of feedback to provide in the case of a missing file + * @return The argsfile content, structured like an args array + */ + private LinkedHashSet readArgsFile(Path argspath, Selection mode) { + LinkedHashSet args = new LinkedHashSet<>(); + + if (!assertArgsFileExists(argspath, mode)) { + return args; + } + + List lines = null; + try { + lines = Files.readAllLines(argspath); + } catch (IOException e) { + throw new RuntimeException(e); + } + List content = lines.stream() + .filter(s -> !s.startsWith("#")) + .filter(s -> !s.startsWith("/")) + .filter(s -> !s.isBlank()) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + StringBuilder splitword = new StringBuilder(); + LinkedHashSet loaded = new LinkedHashSet<>(); + for (String s : content) { + splitword.append(s); + if (!s.endsWith("\\")) { + loaded.add(splitword.toString()); + splitword.setLength(0); + } else { + splitword.setLength(splitword.length() - 1); + } + } + if (splitword.length() > 0) { + throw new RuntimeException("unqualified line continuation for '" + splitword.toString() + "'"); + } + + return loaded; + } + + /** + * Write the argsfile in the format specified by {@link #readArgsFile(Path, Selection)} + * + * This method requires that an argsFile has been set by a previous + * --argsfile or --argsfile-required or --argsfile-optional option. + * + * @param args The args to write in one-arg-per-line form + */ + private void writeArgsFile(LinkedHashSet args) { + if (this.argsPath == null) { + throw new RuntimeException("No argsfile has been selected before using the pin option."); + } + + try { + Files.createDirectories( + this.argsPath.getParent(), + PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---")) + ); + Files.write(this.argsPath, args); + } catch (IOException e) { + throw new BasicError("unable to write '" + this.argsPath + "': " + e.getMessage()); + } + } + + private boolean assertArgsFileExists(Path argspath, Selection mode) { + if (!Files.exists(argsPath)) { + switch (mode) { + case ErrorIfMissing: + throw new RuntimeException("A required argsfile was specified, but it does not exist: '" + argspath + "'"); + case WarnIfMissing: + logger.warn("An argsfile was specified, but it does not exist: '" + argspath + "'"); + case IgnoreIfMissing: + } + return false; + } + return true; + } + + private void setArgsFile(String argspath, Selection mode) { + Path selected = null; + String[] possibles = argspath.split(":"); + for (String possible : possibles) { + Optional expanded = Environment.INSTANCE.interpolate(possible); + if (expanded.isPresent()) { + Path possiblePath = Path.of(expanded.get()); + if (Files.exists(possiblePath)) { + selected = possiblePath; + break; + } + } + } + + if (selected == null) { + String defaultFirst = possibles[0]; + defaultFirst = Environment.INSTANCE.interpolate(defaultFirst) + .orElseThrow(() -> new RuntimeException("Invalid default argsfile: '" + possibles[0] + "'")); + selected = Path.of(defaultFirst); + } + + this.argsPath = selected; + logger.debug("argsfile path is now '" + this.argsPath.toString() + "'"); + } + + /** + * Convert argv arguments to consolidated form which is used in the args file. + * This means that options and their (optional) arguments are on the + * same line, concatenated with a space after the option. + * + * @return The arg-per-line form + */ + LinkedHashSet argsToLines(List args) { + LinkedHashSet lines = new LinkedHashSet<>(); + Iterator iter = args.iterator(); + List element = new ArrayList<>(); + while (iter.hasNext()) { + String word = iter.next(); + if (word.startsWith("-")) { + if (element.size() > 0) { + lines.add(Strings.join(element, " ")); + element.clear(); + } + } + element.add(word); + } + lines.add(Strings.join(element, " ")); + return lines; + } + + /** + * Convert arg lines as used in an args file to the argv which + * is used on the command line. + * + * @return The argv list as you would see with {@code main(String[] argv)} + */ + LinkedList linesToArgs(Collection lines) { + LinkedList args = new LinkedList<>(); + for (String line : lines) { + if (line.startsWith("-")) { + String[] words = line.split(" ", 2); + args.addAll(Arrays.asList(words)); + } else { + args.add(line); + } + } + return args; + } + + private LinkedList unpin(LinkedList arglist) { + if (this.argsPath == null) { + throw new RuntimeException("No argsfile has been selected before using the pin option."); + } + return arglist; + } + + /** + * Read the current command line option from the argument list, + * so long as it is a dash or double-dash option, and is not a + * reserved word, and any argument that goes with it, if any. + * + * @param arglist The command line containing the option + * @return A list containing the current command line option + */ + private LinkedList readOptionAndArg(LinkedList arglist, boolean consume) { + LinkedList option = new LinkedList<>(); + ListIterator iter = arglist.listIterator(); + + if (!iter.hasNext()) { + throw new RuntimeException("Arguments must follow the --pin option"); + } + String opt = iter.next(); + + if (!opt.startsWith("-") || stopWords.contains(opt)) { + throw new RuntimeException("Arguments following the --pin option must not" + + " be commands like '" + opt + "'"); + } + option.add(opt); + if (consume) { + iter.remove(); + } + + if (iter.hasNext()) { + opt = iter.next(); + if (!stopWords.contains(opt) && !opt.startsWith("-")) { + option.add(opt); + if (consume) { + iter.remove(); + } + } + } + return option; + } + + + /** + * Consume the next word from the beginning of the linked list. If there is + * no word to consume, then throw an error with the description. + * + * @param commandline A list of words + * @param description A description of what the next word value is meant to represent + * @return The next word from the list + */ + private String readWordOrThrow(LinkedList commandline, String description) { + String found = commandline.peekFirst(); + if (found == null) { + throw new RuntimeException("Unable to read argument top option for " + description); + } + return commandline.removeFirst(); + } +} 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 c92aa52f3..fe0398152 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 @@ -4,11 +4,15 @@ import ch.qos.logback.classic.Level; import io.nosqlbench.engine.api.metrics.IndicatorMode; import io.nosqlbench.engine.api.util.Unit; import io.nosqlbench.engine.core.script.Scenario; +import io.nosqlbench.nb.api.errors.BasicError; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermissions; import java.security.InvalidParameterException; import java.util.*; import java.util.stream.Collectors; @@ -19,19 +23,16 @@ import java.util.stream.Collectors; */ public class NBCLIOptions { - private final static String userHome = System.getProperty("user.home"); - private final static Path defaultOptFile = Path.of(userHome, ".nosqlbench/options"); - - private final static Logger logger = LoggerFactory.getLogger(NBCLIOptions.class); - - // Options which may contextualize other CLI options or commands. - // These must be parsed first - private static final String ARGS_FILE = "--argsfile"; - private static final String ARGS_FILE_DEFAULT = "$HOME/.nosqlbench/argsfile"; - private static final String ARGS_PIN = "--pin"; - private static final String ARGS_UNPIN = "--unpin"; + private final static Logger logger = LoggerFactory.getLogger("OPTIONS"); + private final static String NB_STATE_DIR = "--statedir"; + private final static String NB_STATEDIR_PATHS = "$NBSTATEDIR:$PWD/.nosqlbench:$HOME/.nosqlbench"; + public static final String ARGS_FILE_DEFAULT = "$NBSTATEDIR/argsfile"; private static final String INCLUDE = "--include"; + + private final static String userHome = System.getProperty("user.home"); + + private static final String METRICS_PREFIX = "--metrics-prefix"; // private static final String ANNOTATE_TO_GRAFANA = "--grafana-baseurl"; @@ -39,7 +40,6 @@ public class NBCLIOptions { private static final String ANNOTATORS_CONFIG = "--annotators"; private static final String DEFAULT_ANNOTATORS = "all"; - // Discovery private static final String HELP = "--help"; private static final String LIST_METRICS = "--list-metrics"; @@ -91,6 +91,7 @@ public class NBCLIOptions { private static final String DOCKER_GRAFANA_TAG = "--docker-grafana-tag"; private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"; + public static final String NBSTATEDIR = "NBSTATEDIR"; private final LinkedList cmdList = new LinkedList<>(); private int logsMax = 0; @@ -130,13 +131,16 @@ public class NBCLIOptions { private Scenario.Engine engine = Scenario.Engine.Graalvm; private boolean graaljs_compat = false; private int hdr_digits = 4; - private String docker_grafana_tag = "7.0.1"; + private String docker_grafana_tag = "7.2.2"; private boolean showStackTraces = false; private boolean compileScript = false; private String scriptFile = null; private String[] annotateEvents = new String[]{"ALL"}; private String dockerMetricsHost; private String annotatorsConfig = ""; + private String statedirs = NB_STATEDIR_PATHS; + private Path statepath; + private List statePathAccesses = new ArrayList<>(); public String getAnnotatorsConfig() { return annotatorsConfig; @@ -163,8 +167,6 @@ public class NBCLIOptions { } private LinkedList parseGlobalOptions(String[] args) { - ArgsFile argsfile = new ArgsFile(); - argsfile.preload("--argsfile-optional", ARGS_FILE_DEFAULT); LinkedList arglist = new LinkedList<>() {{ addAll(Arrays.asList(args)); @@ -175,7 +177,8 @@ public class NBCLIOptions { return arglist; } - // Preprocess --include regardless of position + // Process --include and --statedir, separately first + // regardless of position LinkedList nonincludes = new LinkedList<>(); while (arglist.peekFirst() != null) { String word = arglist.peekFirst(); @@ -188,9 +191,53 @@ public class NBCLIOptions { } switch (word) { - case ARGS_FILE: - case ARGS_PIN: - case ARGS_UNPIN: + case NB_STATE_DIR: + arglist.removeFirst(); + this.statedirs = readWordOrThrow(arglist, "nosqlbench global state directory"); + break; + case INCLUDE: + arglist.removeFirst(); + String include = readWordOrThrow(arglist, "path to include"); + wantsToIncludePaths.add(include); + break; + default: + nonincludes.addLast(arglist.removeFirst()); + } + } + this.statedirs = (this.statedirs != null ? this.statedirs : NB_STATEDIR_PATHS); + this.setStatePath(); + + arglist = nonincludes; + nonincludes = new LinkedList<>(); + + // Now that statdirs is settled, auto load argsfile if it is present + NBCLIArgsFile argsfile = new NBCLIArgsFile(); + argsfile.reserved(NBCLICommandParser.RESERVED_WORDS); + argsfile.preload("--argsfile-optional", ARGS_FILE_DEFAULT); + arglist = argsfile.process(arglist); + + // Parse all --argsfile... and other high level options + + while (arglist.peekFirst() != null) { + String word = arglist.peekFirst(); + if (word.startsWith("--") && word.contains("=")) { + String wordToSplit = arglist.removeFirst(); + String[] split = wordToSplit.split("=", 2); + arglist.offerFirst(split[1]); + arglist.offerFirst(split[0]); + continue; + } + + switch (word) { + // These options modify other options. They should be processed early. + case NBCLIArgsFile.ARGS_FILE: + case NBCLIArgsFile.ARGS_FILE_OPTIONAL: + case NBCLIArgsFile.ARGS_FILE_REQUIRED: + case NBCLIArgsFile.ARGS_PIN: + case NBCLIArgsFile.ARGS_UNPIN: + if (this.statepath == null) { + setStatePath(); + } arglist = argsfile.process(arglist); break; case ANNOTATE_EVENTS: @@ -198,19 +245,10 @@ public class NBCLIOptions { String toAnnotate = readWordOrThrow(arglist, "annotated events"); annotateEvents = toAnnotate.split("\\\\s*,\\\\s*"); break; -// case ANNOTATE_TO_GRAFANA: -// arglist.removeFirst(); -// grafanaEndpoint = readWordOrThrow(arglist,"grafana API endpoint"); -// break; case ANNOTATORS_CONFIG: arglist.removeFirst(); this.annotatorsConfig = readWordOrThrow(arglist, "annotators config"); break; - case INCLUDE: - arglist.removeFirst(); - String include = readWordOrThrow(arglist, "path to include"); - wantsToIncludePaths.add(include); - break; case REPORT_GRAPHITE_TO: arglist.removeFirst(); reportGraphiteTo = arglist.removeFirst(); @@ -245,13 +283,57 @@ public class NBCLIOptions { break; default: nonincludes.addLast(arglist.removeFirst()); - } - } + return nonincludes; } + private Path setStatePath() { + if (statePathAccesses.size() > 0) { + throw new BasicError("The statedir must be set before it is used by other\n" + + " options. If you want to change the statedir, be sure you do it before\n" + + " dependent options. These parameters were called before this --statedir:\n" + + statePathAccesses.stream().map(s -> "> " + s).collect(Collectors.joining("\n"))); + } + if (this.statepath != null) { + return this.statepath; + } + + List paths = Environment.INSTANCE.interpolate(":", statedirs); + Path selected = null; + + for (String pathName : paths) { + Path path = Path.of(pathName); + if (Files.exists(path)) { + if (Files.isDirectory(path)) { + selected = path; + break; + } else { + logger.warn("possible state dir path is not a directory: '" + path.toString() + "'"); + } + } + } + if (selected == null) { + selected = Path.of(paths.get(0)); + } + + if (!Files.exists(selected)) { + try { + Files.createDirectories( + selected, + PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---")) + ); + } catch (IOException e) { + throw new BasicError("Could not create state directory at '" + selected.toString() + "': " + e.getMessage()); + } + } + + Environment.INSTANCE.put(NBSTATEDIR, selected.toString()); + + return selected; + } + private void parseAllOptions(String[] args) { LinkedList arglist = parseGlobalOptions(args); @@ -565,7 +647,7 @@ public class NBCLIOptions { spec.indicatorMode = IndicatorMode.logonly; } else if (this.getCommands().stream().anyMatch(cmd -> cmd.getCmdType().equals(Cmd.CmdType.script))) { logger.info("Command line includes script calls, so progress data on console is " + - "suppressed."); + "suppressed."); spec.indicatorMode = IndicatorMode.logonly; } } @@ -577,7 +659,7 @@ public class NBCLIOptions { configs.stream().map(LoggerConfig::getFilename).forEach(s -> { if (files.contains(s)) { logger.warn(s + " is included in " + configName + " more than once. It will only be included " + - "in the first matching config. Reorder your options if you need to control this."); + "in the first matching config. Reorder your options if you need to control this."); } files.add(s); }); @@ -688,8 +770,8 @@ public class NBCLIOptions { break; default: throw new RuntimeException( - LOG_HISTOGRAMS + - " options must be in either 'regex:filename:interval' or 'regex:filename' or 'filename' format" + LOG_HISTOGRAMS + + " options must be in either 'regex:filename:interval' or 'regex:filename' or 'filename' format" ); } } @@ -714,7 +796,7 @@ public class NBCLIOptions { switch (parts.length) { case 2: Unit.msFor(parts[1]).orElseThrow( - () -> new RuntimeException("Unable to parse progress indicator indicatorSpec '" + parts[1] + "'") + () -> new RuntimeException("Unable to parse progress indicator indicatorSpec '" + parts[1] + "'") ); progressSpec.intervalSpec = parts[1]; case 1: diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java deleted file mode 100644 index 91bb05ecc..000000000 --- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/ArgsFileTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.nosqlbench.engine.cli; - -import org.junit.Test; - -import java.util.LinkedList; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class ArgsFileTest { - - @Test - public void testLoadingArgs() { - LinkedList result; - ArgsFile argsFile = new ArgsFile(); - result = argsFile.process("--argsfile", "src/test/resources/argsfiles/nonextant.cli"); - assertThat(result).containsExactly(); - result = argsFile.process("--argsfile", "src/test/resources/argsfiles/alphagamma.cli"); - assertThat(result).containsExactly("alpha", "gamma"); - } - - @Test(expected = RuntimeException.class) - public void testLoadingMissingRequiredFails() { - LinkedList result; - ArgsFile argsFile = new ArgsFile(); - result = argsFile.process("--argsfile-required", "src/test/resources/argsfiles/nonextant.cli"); - } - - @Test - public void testLoadingInPlace() { - LinkedList result; - LinkedList commands = new LinkedList<>(List.of("--abc", "--def", "--argsfile", "src/test/resources" + - "/argsfiles/alphagamma.cli")); - ArgsFile argsFile = new ArgsFile().preload("--argsfile-optional", "src/test/resources/argsfiles/alphagamma" + - ".cli"); - result = argsFile.process(commands); - assertThat(result).containsExactly("alpha", "gamma", "--abc", "--def", "alpha", "gamma"); - } - -} \ No newline at end of file diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIArgsFileTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIArgsFileTest.java new file mode 100644 index 000000000..9b2b8f55b --- /dev/null +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIArgsFileTest.java @@ -0,0 +1,117 @@ +package io.nosqlbench.engine.cli; + +import org.junit.Test; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.LinkedList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class NBCLIArgsFileTest { + + @Test + public void testLoadingArgs() { + LinkedList result; + NBCLIArgsFile argsFile = new NBCLIArgsFile(); + result = argsFile.process("--argsfile", "src/test/resources/argsfiles/nonextant.cli"); + assertThat(result).containsExactly(); + result = argsFile.process("--argsfile", "src/test/resources/argsfiles/alphagamma.cli"); + assertThat(result).containsExactly("alpha", "gamma"); + } + + @Test + public void loadParamsWithEnv() { + NBCLIArgsFile argsfile = new NBCLIArgsFile(); + LinkedList result = argsfile.process("--argsfile-required", "src/test/resources/argsfiles/home_env.cli"); + System.out.println(result); + } + + @Test(expected = RuntimeException.class) + public void testLoadingMissingRequiredFails() { + LinkedList result; + NBCLIArgsFile argsFile = new NBCLIArgsFile(); + result = argsFile.process("--argsfile-required", "src/test/resources/argsfiles/nonextant.cli"); + } + + @Test + public void testLoadingInPlace() { + LinkedList result; + LinkedList commands = new LinkedList<>(List.of("--abc", "--def")); + + NBCLIArgsFile argsFile = new NBCLIArgsFile().preload("--argsfile-optional", "src/test/resources/argsfiles/alphagamma" + + ".cli"); + result = argsFile.process(commands); + assertThat(result).containsExactly("alpha", "gamma", "--abc", "--def"); + } + + @Test + public void testLinesToArgs() { + NBCLIArgsFile argsfile = new NBCLIArgsFile().reserved("reservedword"); + LinkedList args = argsfile.linesToArgs( + List.of("--optionname argument", "--optionname2", "--opt3 reservedword") + ); + assertThat(args).containsExactly("--optionname", "argument", "--optionname2", "--opt3", "reservedword"); + } + + @Test + public void testOptionPinning() { + Path tempFile = null; + try { + tempFile = Files.createTempFile( + "tmpfile", + "cli", + PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rw-rw-r--")) + ); + + // preloading is a way to have global defaults based on + // the presence of a default file + NBCLIArgsFile argsfile = new NBCLIArgsFile().preload( + "--argsfile-optional", tempFile.toAbsolutePath().toString() + ); + + LinkedList commandline; + + commandline = argsfile.process( + "--pin", "--option1", + "--pin", "--option1", + "--pin", "--option2", "arg2" + ); + + String filecontents; + filecontents = Files.readString(tempFile); + + // logging should indicate no changes + commandline = argsfile.process( + "--pin", "--option1", + "--pin", "--option1", + "--pin", "--option2", "arg2" + ); + + // unpinned options should be discarded + commandline = argsfile.process( + "--unpin", "--option1", + "--option4", "--option5" + ); + + assertThat(commandline).containsExactly( + "--option4", "--option5" + ); + + assertThat(filecontents).isEqualTo("--option1\n--option2 arg2\n"); + + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + Files.deleteIfExists(tempFile); + } catch (Exception ignored) { + } + } + } + + +} \ No newline at end of file From 1e958a7e7911e65bbef555c65ae738bb75d7f1d6 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 10:55:43 -0500 Subject: [PATCH 008/164] simplify logger naming for core systems --- .../engine/api/activityimpl/SimpleActivity.java | 2 +- .../nosqlbench/engine/core/metrics/MetricReporters.java | 8 ++++---- .../java/io/nosqlbench/engine/core/script/Scenario.java | 2 +- 3 files changed, 6 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 de0d82610..9eed87e0e 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 @@ -35,7 +35,7 @@ import java.util.function.Supplier; * A default implementation of an Activity, suitable for building upon. */ public class SimpleActivity implements Activity, ProgressCapable { - private final static Logger logger = LoggerFactory.getLogger(SimpleActivity.class); + private final static Logger logger = LoggerFactory.getLogger("ACTIVITY"); protected ActivityDef activityDef; private final List closeables = new ArrayList<>(); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java index 27346ef9b..8574f6edb 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java @@ -35,10 +35,10 @@ import java.util.concurrent.TimeUnit; public class MetricReporters implements Shutdownable { private final static Logger logger = LoggerFactory.getLogger(MetricReporters.class); - private static MetricReporters instance = new MetricReporters(); + private static final MetricReporters instance = new MetricReporters(); - private List metricRegistries = new ArrayList<>(); - private List scheduledReporters = new ArrayList<>(); + private final List metricRegistries = new ArrayList<>(); + private final List scheduledReporters = new ArrayList<>(); private MetricReporters() { ShutdownManager.register(this); @@ -136,7 +136,7 @@ public class MetricReporters implements Shutdownable { public MetricReporters start(int consoleIntervalSeconds, int remoteIntervalSeconds) { for (ScheduledReporter scheduledReporter : scheduledReporters) { - logger.info("starting reporter: " + scheduledReporter); + logger.info("starting reporter: " + scheduledReporter.getClass().getSimpleName()); if (scheduledReporter instanceof ConsoleReporter) { scheduledReporter.start(consoleIntervalSeconds, TimeUnit.SECONDS); } else { diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java index 3b0360f16..3c8a49e1e 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java @@ -46,7 +46,7 @@ import java.util.stream.Collectors; public class Scenario implements Callable { - private static final Logger logger = (Logger) LoggerFactory.getLogger(Scenario.class); + private static final Logger logger = (Logger) LoggerFactory.getLogger("SCENARIO"); private State state = State.Scheduled; From d5a98f140a262037ecaf13252741082c63e3146e Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 11:34:38 -0500 Subject: [PATCH 009/164] update release notes --- RELEASENOTES.md | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 15867f798..38beaf0a4 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,19 +1,8 @@ -- f702736f (HEAD -> main) flatten maps in OpTemplates to allow map consumers -- 4a9fa81b pull Named service up -- 574a89e7 pull ConfigAware api up -- 71195d0a http release fixes -- 3fa89ebc partial work for --args -- 262df571 improved error messages -- 453b1b2c extract ratio from optemplate before construction -- dcf458c4 annotation progress -- 7017b6cd add SplitLongs function -- 0758670f add nb clients module -- 1dbf36c4 add grafana annotation client -- 120d9761 remove warning for speculative defaults -- c78f1e92 typos and minor fixes -- f3f1b8f4 add annotations design sketch -- 394580d6 more idea sketches -- 9e5972f5 comment cleanup -- 06edfcc9 fix NPE when binding has undefined value -- 510746b7 improve mismatched scenario name feedback -- 735b32e1 add illustrative test for EpochMillisToJavaLocalDate +- 1e958a7e (HEAD -> main) simplify logger naming for core systems +- 1382d33d argsfiles and statedirs +- b5901679 environment and sys prop support +- fd74ccba move common topics to resources base +- 6a8dfef1 qualify grafana docker with tag +- 2830d070 simple workload improvements +- b9607d07 make argsfiles use double dash +- a9b0dc9d argsfile support From 4611f679536a06407b4af548a4187b89f7f74357 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 29 Oct 2020 11:34:56 -0500 Subject: [PATCH 010/164] cqld4 fixes --- driver-cqld4/pom.xml | 6 ++++++ .../activitytype/cqld4/statements/rowoperators/Save.java | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/driver-cqld4/pom.xml b/driver-cqld4/pom.xml index b869f96a4..d8216bd72 100644 --- a/driver-cqld4/pom.xml +++ b/driver-cqld4/pom.xml @@ -76,6 +76,12 @@ org.xerial.snappy snappy-java + + io.nosqlbench + virtdata-lib-basics + 3.12.155-SNAPSHOT + compile + diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java index df35df3f0..fc01f6934 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java @@ -1,7 +1,6 @@ package io.nosqlbench.activitytype.cqld4.statements.rowoperators; import com.datastax.oss.driver.api.core.cql.ColumnDefinition; -import com.datastax.oss.driver.api.core.cql.ColumnDefinitions; import com.datastax.oss.driver.api.core.cql.Row; import io.nosqlbench.activitytype.cqld4.api.RowCycleOperator; import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState; From 2d9d141cfffef3e69a9c943607c2b7d0f8ba5433 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 12 Nov 2020 15:24:27 -0600 Subject: [PATCH 011/164] include dsegraph --- RELEASENOTES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 15867f798..787cc5822 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -17,3 +17,5 @@ - 06edfcc9 fix NPE when binding has undefined value - 510746b7 improve mismatched scenario name feedback - 735b32e1 add illustrative test for EpochMillisToJavaLocalDate +- 2390f253 Initial Migration of DSE Graph +- 2275573c Update Readme From 7ead8fba2f59521049f54d841b3db6d9a1602c93 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Thu, 12 Nov 2020 21:35:46 +0000 Subject: [PATCH 012/164] [maven-release-plugin] prepare release nosqlbench-3.12.155 --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 8ebb39825..1f89ad0f5 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.155-SNAPSHOT + 3.12.155 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index a7918c88a..2b9d1eea8 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index b80d13267..fca7ac100 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 876af26e0..834a4e8d9 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 77bdc0b0e..8eec49a26 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-http/pom.xml b/driver-http/pom.xml index abbfdd73a..0a7543952 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 0fb2df6d2..e728686c3 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 63fe03ed0..4549b8f5a 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-stdout - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 81f78dc92..b3816f48f 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 7bb6e8b3f..4dfe527ea 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 7c1e7e1c7..6f2e409ad 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-stdout - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 0792af8ce..fb93b7881 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index c8ecb8267..3f4e8817a 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench virtdata-userlibs - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index cc264b70b..23fe9bfbf 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench nb-annotations - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench virtdata-userlibs - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index a5e010a26..1a0fc0fa6 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench engine-docker - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 9b23a67e2..32aad946d 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 12a95183f..365e9d745 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.155 @@ -90,7 +90,7 @@ io.nosqlbench engine-clients - 3.12.155-SNAPSHOT + 3.12.155 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index e2985ccff..969dc47ef 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 51542e43f..e1eb3e31b 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 136d66e56..714ffca56 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index cccec2954..d8495afda 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 97cb7bfb4..0aa94449e 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 3.12.155-SNAPSHOT + 3.12.155 pom @@ -95,7 +95,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.155 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 9ea4bb229..ee56907aa 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 5a41f6031..82f628576 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/nb/pom.xml b/nb/pom.xml index 6f6f045cb..f905b3ec1 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench engine-cli - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench engine-docs - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench engine-core - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench engine-extensions - 3.12.155-SNAPSHOT + 3.12.155 @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-kafka - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-stdout - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-diag - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-tcp - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-http - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-jmx - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-dsegraph-shaded - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-cql-shaded - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-cqlverify - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench driver-mongodb - 3.12.155-SNAPSHOT + 3.12.155 @@ -259,7 +259,7 @@ io.nosqlbench driver-mongodb - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/pom.xml b/pom.xml index abc203dcf..5db1a1559 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.155 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 99425bb5f..b1e41362f 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 nb-api io.nosqlbench virtdata-lang - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index c4b07dddd..10131c033 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index aeafd6554..c461c77d7 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 0194ec6d7..a7082c086 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench virtdata-lib-basics - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 7c42852d5..5933d678f 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench virtdata-lib-basics - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 279090f3f..4e9444f6f 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index dda04f214..2ac839bd4 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.155-SNAPSHOT + 3.12.155 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index fd434bd34..1ee5422e4 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench virtdata-lib-realer - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench virtdata-api - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench virtdata-lib-random - 3.12.155-SNAPSHOT + 3.12.155 io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 virtdata-lib-basics io.nosqlbench - 3.12.155-SNAPSHOT + 3.12.155 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.155-SNAPSHOT + 3.12.155 From ad5bc4e4477bf1bbd09a3b5a977038dfc36dac91 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Thu, 12 Nov 2020 21:35:52 +0000 Subject: [PATCH 013/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 1f89ad0f5..38ef76178 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.155 + 3.12.156-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 2b9d1eea8..02bc2c009 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index fca7ac100..bdce34dd8 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 834a4e8d9..bdc2687c6 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 8eec49a26..50a0078e2 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 0a7543952..ddf35a5d8 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index e728686c3..c38259925 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 4549b8f5a..8dc0bef7a 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-stdout - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index b3816f48f..37138df14 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 4dfe527ea..5175e32be 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 6f2e409ad..9462878a7 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-stdout - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index fb93b7881..9ac89affa 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 3f4e8817a..b51ee675b 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 23fe9bfbf..dd67637cb 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench nb-annotations - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 1a0fc0fa6..efc5314c5 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench engine-docker - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 32aad946d..0c0dc49c3 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 365e9d745..67bc4df8e 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155 + 3.12.156-SNAPSHOT @@ -90,7 +90,7 @@ io.nosqlbench engine-clients - 3.12.155 + 3.12.156-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 969dc47ef..4e3368a67 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index e1eb3e31b..3571c7aff 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 714ffca56..a4eef4090 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index d8495afda..446e932a7 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 0aa94449e..5f5fd76bf 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 3.12.155 + 3.12.156-SNAPSHOT pom @@ -95,7 +95,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-3.12.155 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index ee56907aa..8a655563b 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 82f628576..6daf0666b 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index f905b3ec1..54837d431 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench engine-cli - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench engine-docs - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench engine-core - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench engine-extensions - 3.12.155 + 3.12.156-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-kafka - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-stdout - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-diag - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-tcp - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-http - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-jmx - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-cql-shaded - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-cqlverify - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench driver-mongodb - 3.12.155 + 3.12.156-SNAPSHOT @@ -259,7 +259,7 @@ io.nosqlbench driver-mongodb - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/pom.xml b/pom.xml index 5db1a1559..42c461ecf 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-3.12.155 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index b1e41362f..f7e15ce94 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 10131c033..d883e3ac0 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index c461c77d7..5e5974d36 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index a7082c086..c88224403 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 5933d678f..a259d6b73 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 4e9444f6f..41121ee38 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 2ac839bd4..14cc88ca8 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.155 + 3.12.156-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 1ee5422e4..3ee4b0b8d 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench virtdata-lib-realer - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench virtdata-api - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench virtdata-lib-random - 3.12.155 + 3.12.156-SNAPSHOT io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT virtdata-lib-basics io.nosqlbench - 3.12.155 + 3.12.156-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.155 + 3.12.156-SNAPSHOT From 93e10e6a70275edfa2e6bc413a10cb763533207a Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 16:29:40 -0600 Subject: [PATCH 014/164] config model improvements --- .../nosqlbench/nb/api/config/ConfigAware.java | 3 +- .../nb/api/config/ConfigElement.java | 59 +++++++++++++++++++ .../nb/api/config/ConfigReader.java | 40 +++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigElement.java create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigAware.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigAware.java index de040a6fe..2ec877dd4 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigAware.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigAware.java @@ -3,6 +3,7 @@ package io.nosqlbench.nb.api.config; import java.util.Map; public interface ConfigAware { - void applyConfig(Map element); + void applyConfig(Map providedConfig); + ConfigModel getConfigModel(); } diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigElement.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigElement.java new file mode 100644 index 000000000..b8f1bfaa4 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigElement.java @@ -0,0 +1,59 @@ +package io.nosqlbench.nb.api.config; + +public class ConfigElement { + + public final String name; + public final Class type; + public final String description; + private final T defaultValue; + public boolean required; + + public ConfigElement( + String name, + Class type, + String description, + boolean required, + T defaultValue + ) { + this.name = name; + this.type = type; + this.description = description; + this.required = required; + this.defaultValue = defaultValue; + } + + @Override + public String toString() { + return "Element{" + + "name='" + name + '\'' + + ", type=" + type + + ", description='" + description + '\'' + + ", required=" + required + + ", defaultValue = " + defaultValue + + '}'; + } + + public String getName() { + return name; + } + + public Class getType() { + return type; + } + + public String getDescription() { + return description; + } + + public boolean isRequired() { + return required; + } + + public void setRequired(boolean required) { + this.required = required; + } + + public T getDefaultValue() { + return defaultValue; + } +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java new file mode 100644 index 000000000..5457fa8d4 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java @@ -0,0 +1,40 @@ +package io.nosqlbench.nb.api.config; + +import io.nosqlbench.nb.api.Environment; + +import java.util.LinkedHashMap; +import java.util.Optional; + +public class ConfigReader extends LinkedHashMap { + private final ConfigModel configModel; + + public ConfigReader(ConfigModel model, LinkedHashMap validConfig) { + super(validConfig); + this.configModel = model; + } + + public T paramEnv(String name, Class vclass) { + T param = param(name, vclass); + if (param instanceof String) { + Optional interpolated = Environment.INSTANCE.interpolate(param.toString()); + if (interpolated.isEmpty()) { + throw new RuntimeException("Unable to interpolate env and sys props in '" + param + "'"); + } + return (T) interpolated.get(); + } else { + return param; + } + + } + + public T param(String name, Class vclass) { + Object o = get(name); + ConfigElement elem = configModel.getElements().get(name); + if (elem == null) { + throw new RuntimeException("Invalid config element named '" + name + "'"); + } + Class type = (Class) elem.getType(); + T typeCastedValue = type.cast(o); + return typeCastedValue; + } +} From 55edec5389c5102c00e5346b3bc9466d2d330247 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 16:32:21 -0600 Subject: [PATCH 015/164] add ToByteBuffer binding function --- .../conversions/from_long/ToByteBuffer.java | 22 ++++++++++-- .../from_long/ToByteBufferTest.java | 35 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBufferTest.java diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBuffer.java b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBuffer.java index 307782c84..0fad52b1e 100644 --- a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBuffer.java +++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBuffer.java @@ -20,6 +20,7 @@ package io.nosqlbench.virtdata.library.basics.shared.conversions.from_long; import io.nosqlbench.virtdata.api.annotations.Categories; import io.nosqlbench.virtdata.api.annotations.Category; +import io.nosqlbench.virtdata.api.annotations.Example; import io.nosqlbench.virtdata.api.annotations.ThreadSafeMapper; import java.nio.ByteBuffer; @@ -32,10 +33,27 @@ import java.util.function.LongFunction; @Categories({Category.conversion}) public class ToByteBuffer implements LongFunction { + private final int allocSize; + private final int bufSize; + + public ToByteBuffer() { + this.allocSize = Long.BYTES; + this.bufSize = Long.BYTES; + } + + @Example({"ToByteBuffer(13)", "Repeat the input long value to make a 13byte buffer"}) + public ToByteBuffer(int size) { + this.bufSize = size; + this.allocSize = ((size + Long.BYTES - 1) / Long.BYTES) * Long.BYTES; + } + @Override public ByteBuffer apply(long input) { - ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); - buffer.putLong(input); + ByteBuffer buffer = ByteBuffer.allocate(allocSize); + while (buffer.remaining() >= Long.BYTES) { + buffer.putLong(input); + } + buffer.position(this.bufSize); buffer.flip(); return buffer; } diff --git a/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBufferTest.java b/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBufferTest.java new file mode 100644 index 000000000..3f7ac17b1 --- /dev/null +++ b/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/conversions/from_long/ToByteBufferTest.java @@ -0,0 +1,35 @@ +package io.nosqlbench.virtdata.library.basics.shared.conversions.from_long; + +import org.junit.Test; + +import java.nio.ByteBuffer; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ToByteBufferTest { + + @Test + public void toByteBuffer7() { + ToByteBuffer f = new ToByteBuffer(7); + ByteBuffer byteBuffer = f.apply(33); + ByteBuffer expected = ByteBuffer.wrap(new byte[]{0, 0, 0, 0, 0, 0, 0}); + assertThat(byteBuffer).isEqualByComparingTo(expected); + } + + @Test + public void toByteBuffer8() { + ToByteBuffer f = new ToByteBuffer(8); + ByteBuffer byteBuffer = f.apply(33); + ByteBuffer expected = ByteBuffer.wrap(new byte[]{0, 0, 0, 0, 0, 0, 0, 33}); + assertThat(byteBuffer).isEqualByComparingTo(expected); + } + + @Test + public void toByteBuffer9() { + ToByteBuffer f = new ToByteBuffer(9); + ByteBuffer byteBuffer = f.apply(33); + ByteBuffer expected = ByteBuffer.wrap(new byte[]{0, 0, 0, 0, 0, 0, 0, 33, 0}); + assertThat(byteBuffer).isEqualByComparingTo(expected); + } + +} \ No newline at end of file From 4d65dc625f5d292df197f9b8f0b74f8a9ceea823 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:22:01 -0600 Subject: [PATCH 016/164] update inactive coords --- driver-cqld4/pom.xml | 6 +- nb/pom.xml | 168 +++++++++++++++++++++---------------------- 2 files changed, 87 insertions(+), 87 deletions(-) diff --git a/driver-cqld4/pom.xml b/driver-cqld4/pom.xml index d8216bd72..f6b1252f5 100644 --- a/driver-cqld4/pom.xml +++ b/driver-cqld4/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.141-SNAPSHOT + 3.12.155-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.141-SNAPSHOT + 3.12.155-SNAPSHOT io.nosqlbench drivers-api - 3.12.146-SNAPSHOT + 3.12.155-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index 18a60f899..d71d03574 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -230,90 +230,90 @@ - - - with-cql-d4 - - false - - - - io.nosqlbench - driver-cqld4 - 3.12.141-SNAPSHOT - - - - - with-mongodb - - true - - - - io.nosqlbench - driver-mongodb - 3.12.155-SNAPSHOT - - - - - build-nb-appimage - - - unix - linux - amd64 - - - - - - org.codehaus.mojo - exec-maven-plugin - - - build-nb-appimage - package - - exec - - - ${project.basedir} - ${project.basedir}/build-bin.sh - - - - - - - - - enforce - - false - - - - - - - - enforce - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - - - - - - - + + + with-cql-d4 + + false + + + + io.nosqlbench + driver-cqld4 + 3.12.155-SNAPSHOT + + + + + with-mongodb + + true + + + + io.nosqlbench + driver-mongodb + 3.12.155-SNAPSHOT + + + + + build-nb-appimage + + + unix + linux + amd64 + + + + + + org.codehaus.mojo + exec-maven-plugin + + + build-nb-appimage + package + + exec + + + ${project.basedir} + ${project.basedir}/build-bin.sh + + + + + + + + + enforce + + false + + + + + + + + enforce + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + + + + + + + From 52b029f8b8bdd5ba73458a2954b872493b86d22b Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:22:12 -0600 Subject: [PATCH 017/164] typos, culling, and alignment --- devdocs/docstructure/bundled_docs.md | 3 +- .../nosqlbench/docsys/core/DocServerApp.java | 15 ------ .../nosqlbench/engine/cli/NBCLIOptions.java | 2 +- .../engine/core/script/BufferAppender.java | 49 ------------------- .../docs/NosqlbenchMarkdownManifest.java | 7 +-- .../script/AsyncScriptIntegrationTests.java | 1 + 6 files changed, 8 insertions(+), 69 deletions(-) delete mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/script/BufferAppender.java diff --git a/devdocs/docstructure/bundled_docs.md b/devdocs/docstructure/bundled_docs.md index 8291e64fa..bc08c9434 100644 --- a/devdocs/docstructure/bundled_docs.md +++ b/devdocs/docstructure/bundled_docs.md @@ -9,7 +9,8 @@ can be used by the documentation system. ## MarkdownDocs Service -The primary markdown service that is meant to be consumed by the documetnation system is known simply as +The primary markdown service that is meant to be consumed by the + documentation system is known simply as MarkdownDocs diff --git a/docsys/src/main/java/io/nosqlbench/docsys/core/DocServerApp.java b/docsys/src/main/java/io/nosqlbench/docsys/core/DocServerApp.java index e99c836ff..e93da3b3e 100644 --- a/docsys/src/main/java/io/nosqlbench/docsys/core/DocServerApp.java +++ b/docsys/src/main/java/io/nosqlbench/docsys/core/DocServerApp.java @@ -14,21 +14,6 @@ import java.util.Arrays; public class DocServerApp { private static final Logger logger = LogManager.getLogger(DocServerApp.class); -// static { -// // defer to an extant logger context if it is there, otherwise -// // assume a local and docserver specific logging configuration -// -// LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); -// if (context.getLoggerList().size() == 1 && context.getLoggerList().get(0).getName().equals("ROOT")) { -// configureDocServerLogging(context); -// logger = LoggerFactory.getLogger(DocServerApp.class); -// logger.info("Configured logging system from logback-docsys.xml"); -// } else { -// logger = LoggerFactory.getLogger(DocServerApp.class); -// logger.info("Configured logging within existing logging context."); -// } -// } - public static void main(String[] args) { if (args.length > 0 && args[0].contains("help")) { showHelp(); 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 fe0398152..807377d0a 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 @@ -624,7 +624,7 @@ public class NBCLIOptions { private String readWordOrThrow(LinkedList arglist, String required) { if (arglist.peekFirst() == null) { - throw new InvalidParameterException(required + " not found"); + throw new InvalidParameterException(required + " is required after this option"); } return arglist.removeFirst(); } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/BufferAppender.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/BufferAppender.java deleted file mode 100644 index 2391df249..000000000 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/BufferAppender.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * - * Copyright 2016 jshook - * 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.core.script; - -import ch.qos.logback.core.OutputStreamAppender; - -import java.io.CharArrayWriter; - -public class BufferAppender extends OutputStreamAppender { - - private CharArrayWriter buffer = new CharArrayWriter(0); - - @Override - public void start() { - buffer = new CharArrayWriter(0); - super.start(); - } - - @Override - public void stop() { - super.stop(); - buffer.reset(); - } - - @Override - protected void append(E eventObject) { - super.append(eventObject); - buffer.append(eventObject.toString()); - } - - public String toString() { - return (buffer==null) ? "" : buffer.toString(); - } -} diff --git a/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java b/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java index f170de708..9bd03fcea 100644 --- a/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java +++ b/engine-docs/src/main/java/io/nosqlbench/engine/docs/NosqlbenchMarkdownManifest.java @@ -10,9 +10,10 @@ public class NosqlbenchMarkdownManifest implements DocsysDynamicManifest { @Override public DocsBinder getDocs() { return new Docs().namespace("docs-for-eb") - .addFirstFoundPath("engine-docs/src/main/resources/docs-for-nb/", - "docs-for-nb/") - .setEnabledByDefault(true) + .addFirstFoundPath( + "engine-docs/src/main/resources/docs-for-nb/", + "docs-for-nb/" + ).setEnabledByDefault(true) .asDocsBinder(); } } diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java index ba80381fb..d0d734a1e 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java @@ -29,6 +29,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.List; From e6e70f713f4ce8b0957ad8203fe0f2b7e241655c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:22:20 -0600 Subject: [PATCH 018/164] support DoubleToIntFunction in function matrix --- .../io/nosqlbench/virtdata/api/bindings/VirtDataFunctions.java | 1 + 1 file changed, 1 insertion(+) diff --git a/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/bindings/VirtDataFunctions.java b/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/bindings/VirtDataFunctions.java index e1b07eb6e..c6dedba74 100644 --- a/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/bindings/VirtDataFunctions.java +++ b/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/bindings/VirtDataFunctions.java @@ -18,6 +18,7 @@ public class VirtDataFunctions { LongUnaryOperator(java.util.function.LongUnaryOperator.class, long.class), IntFunction(java.util.function.IntFunction.class, int.class), IntUnaryOperator(java.util.function.IntUnaryOperator.class, int.class), + DoubleToIntFunction(java.util.function.DoubleToIntFunction.class, int.class), DoubleFunction(java.util.function.DoubleFunction.class, double.class), DoubleUnaryOperator(java.util.function.DoubleUnaryOperator.class, double.class), Function(java.util.function.Function.class, Object.class); From 089a29d8466d7462b48063d28105b20db61d5a1e Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:22:35 -0600 Subject: [PATCH 019/164] grafana api tokens --- .../engine/clients/grafana/ApiToken.java | 35 ++++++++++++++++++ .../grafana/transfer/ApiTokenRequest.java | 36 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/ApiToken.java create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/ApiTokenRequest.java diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/ApiToken.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/ApiToken.java new file mode 100644 index 000000000..6b678c65f --- /dev/null +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/ApiToken.java @@ -0,0 +1,35 @@ +package io.nosqlbench.engine.clients.grafana; + +public class ApiToken { + private String name; + private String key; + + public ApiToken(String name, String key) { + this.name = name; + this.key = key; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + @Override + public String toString() { + return "ApiToken{" + + "name='" + name + '\'' + + ", key='" + key + '\'' + + '}'; + } +} diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/ApiTokenRequest.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/ApiTokenRequest.java new file mode 100644 index 000000000..9e1a5eb49 --- /dev/null +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/ApiTokenRequest.java @@ -0,0 +1,36 @@ +package io.nosqlbench.engine.clients.grafana.transfer; + +import java.util.Set; + +public class ApiTokenRequest { + + public static final Set VALID_ROLES = Set.of("Admin", "Editor", "Viewer"); + private final String name; + private final String role; + private final long ttl; + + public ApiTokenRequest(String name, String role, long ttl) { + this.name = name; + this.role = checkRole(role); + this.ttl = ttl; + } + + private String checkRole(String role) { + if (!VALID_ROLES.contains(role)) { + throw new RuntimeException("Role '" + role + "' must be one of " + VALID_ROLES.toString()); + } + return role; + } + + public String getName() { + return name; + } + + public String getRole() { + return role; + } + + public long getTtl() { + return ttl; + } +} From 831361394313a90b4e6e2e6f91eb81e56ae8cd1f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:22:43 -0600 Subject: [PATCH 020/164] generalize op source --- .../api/activityapi/planning/OpSequence.java | 13 ++------- .../api/activityapi/planning/OpSource.java | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSource.java diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSequence.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSequence.java index 608987dde..4b70099c0 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSequence.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSequence.java @@ -23,19 +23,10 @@ import java.util.function.Function; /** * An OpSequence provides fast access to a set of operations in a specific * order. + * * @param The type of element which is to be sequenced */ -public interface OpSequence { - - /** - * Get the next operation for the given long value. This is simply - * the offset indicated by the offset sequence array at a modulo - * position. - * - * @param selector the long value that determines the next op - * @return An op of type T - */ - T get(long selector); +public interface OpSequence extends OpSource { /** * Get the list of individual operations which could be returned by {@link #get(long)}. diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSource.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSource.java new file mode 100644 index 000000000..20a55326a --- /dev/null +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/OpSource.java @@ -0,0 +1,27 @@ +package io.nosqlbench.engine.api.activityapi.planning; + +import java.util.function.LongFunction; + +/** + * An OpSource provides an Op when given an ordinal. + * OpSources are expected to be deterministic with respect to inputs. + * + * @param + */ +public interface OpSource extends LongFunction { + + /** + * Get the next operation for the given long value. This is simply + * the offset indicated by the offset sequence array at a modulo + * position. + * + * @param selector the long value that determines the next op + * @return An op of type T + */ + T get(long selector); + + @Override + default T apply(long value) { + return get(value); + } +} From a3a513814e3d9f4eb7f21fa10fe5db5dc74d3276 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:27:40 -0600 Subject: [PATCH 021/164] update inactive coords --- nb/pom.xml | 400 ++++++++++++++++++++++++++--------------------------- 1 file changed, 200 insertions(+), 200 deletions(-) diff --git a/nb/pom.xml b/nb/pom.xml index d71d03574..2d28f3325 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -1,234 +1,234 @@ - - 4.0.0 + + 4.0.0 - - mvn-defaults - io.nosqlbench - 3.12.155-SNAPSHOT - ../mvn-defaults - + + mvn-defaults + io.nosqlbench + 3.12.155-SNAPSHOT + ../mvn-defaults + - nb - jar - ${project.artifactId} - CLI for nosqlbench. + nb + jar + ${project.artifactId} + CLI for nosqlbench. - - UTF-8 - nosqlbench Command Line - + + UTF-8 + nosqlbench Command Line + - + - - io.nosqlbench - engine-rest - 3.12.155-SNAPSHOT - + + io.nosqlbench + engine-rest + 3.12.155-SNAPSHOT + - - io.nosqlbench - engine-cli - 3.12.155-SNAPSHOT - + + io.nosqlbench + engine-cli + 3.12.155-SNAPSHOT + - - io.nosqlbench - engine-docs - 3.12.155-SNAPSHOT - + + io.nosqlbench + engine-docs + 3.12.155-SNAPSHOT + - - io.nosqlbench - engine-core - 3.12.155-SNAPSHOT - + + io.nosqlbench + engine-core + 3.12.155-SNAPSHOT + - - io.nosqlbench - engine-extensions - 3.12.155-SNAPSHOT - + + io.nosqlbench + engine-extensions + 3.12.155-SNAPSHOT + - - - - - + + + + + - - io.nosqlbench - driver-web - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-web + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-kafka - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-kafka + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-stdout - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-stdout + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-diag - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-diag + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-tcp - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-tcp + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-http - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-http + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-jmx - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-jmx + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-cql-shaded - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-cql-shaded + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-cqlverify - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-cqlverify + 3.12.155-SNAPSHOT + - - io.nosqlbench - driver-mongodb - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-mongodb + 3.12.155-SNAPSHOT + - - - - - + + + + + - - ch.qos.logback - logback-classic - + + javax.activation + activation + - - javax.activation - activation - + + javax.xml.bind + jaxb-api + - - javax.xml.bind - jaxb-api - + + + + - - - - + + + + - - - - + - + + + + src/main/resources + true + + - - - - src/main/resources - true - - + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + assembly.xml + + + + io.nosqlbench.engine.cli.NBCLI + + + true + + + + + + assemble-nb + package + + single + + + + - - - org.apache.maven.plugins - maven-assembly-plugin - 3.3.0 - - - assembly.xml - - - - io.nosqlbench.engine.cli.NBCLI - - - - - - assemble-nb - package - - single - - - - + + + + + + + + + + - - - - - - - - - - + + org.codehaus.mojo + exec-maven-plugin + + + link-nb-jar-name + package + + exec + + + + ${project.version} + + ${project.basedir} + ${project.basedir}/nb-scripts/link-jar-name.sh + + + + build-static-guidebook + package + + exec + + + ${project.basedir} + ${project.basedir}/gendocs.sh + + + + - - org.codehaus.mojo - exec-maven-plugin - - - link-nb-jar-name - package - - exec - - - - ${project.version} - - ${project.basedir} - ${project.basedir}/nb-scripts/link-jar-name.sh - - - - build-static-guidebook - package - - exec - - - ${project.basedir} - ${project.basedir}/gendocs.sh - - - - - - - + + @@ -316,7 +316,7 @@ - + From 2c09b8ae7ae4a64b1bade9606d7afdcdb53c315e Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:27:48 -0600 Subject: [PATCH 022/164] typos, culling, and alignment --- .../nosqlbench/engine/cli/ConsoleLogging.java | 75 ------------------- 1 file changed, 75 deletions(-) delete mode 100644 engine-cli/src/main/java/io/nosqlbench/engine/cli/ConsoleLogging.java diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ConsoleLogging.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/ConsoleLogging.java deleted file mode 100644 index cfc7999d8..000000000 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/ConsoleLogging.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * - * Copyright 2016 jshook - * 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.cli; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.encoder.PatternLayoutEncoder; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.spi.LoggingEvent; -import ch.qos.logback.core.ConsoleAppender; -import ch.qos.logback.core.filter.AbstractMatcherFilter; -import ch.qos.logback.core.spi.FilterReply; -import org.slf4j.LoggerFactory; - -public class ConsoleLogging { - - public static void enableConsoleLogging(Level level, String loggingPattern) { - - LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); - //List copyOfListenerList = loggerContext.getCopyOfListenerList(); - - ConsoleAppender ca = new ConsoleAppender<>(); - ca.setContext(loggerContext); - - PatternLayoutEncoder ple = new PatternLayoutEncoder(); - ple.setPattern(loggingPattern); - ple.setContext(loggerContext); - ple.start(); - ca.setEncoder(ple); - LevelFilter levelFilter = new LevelFilter<>(level); - levelFilter.start(); - ca.addFilter(levelFilter); - ca.start(); - - Logger root = loggerContext.getLogger("ROOT"); - root.addAppender(ca); - root.setLevel(Level.TRACE); - } - - private static class LevelFilter extends AbstractMatcherFilter { - - private final Level filterLevel; - - public LevelFilter(Level filterLevel) { - this.filterLevel = filterLevel; - } - @Override - public FilterReply decide(Object event) { - if (!isStarted()) { - return FilterReply.NEUTRAL; - } - LoggingEvent loggingEvent = (LoggingEvent) event; - if (((LoggingEvent) event).getLevel().isGreaterOrEqual(filterLevel)) { - return FilterReply.ACCEPT; - } - return FilterReply.DENY; - } - } -} From a97db87f845aa77dfd987a5a99edba2e98f63318 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:27:58 -0600 Subject: [PATCH 023/164] include JSON support in project API --- nb-api/pom.xml | 39 +++++++++++-------- .../src/test/resources/importable-config.json | 6 +++ virtdata-userlibs/pom.xml | 5 --- 3 files changed, 28 insertions(+), 22 deletions(-) create mode 100644 nb-api/src/test/resources/importable-config.json diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 5a41f6031..f00001771 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -58,26 +58,31 @@ log4j-api - - org.apache.logging.log4j - log4j-core - + + org.apache.logging.log4j + log4j-core + - - net.sf.jopt-simple - jopt-simple - 5.0.3 - + + net.sf.jopt-simple + jopt-simple + 5.0.3 + - + + com.google.code.gson + gson + - - org.openjdk.jmh - jmh-core - - - org.openjdk.jmh - jmh-generator-annprocess + + + + org.openjdk.jmh + jmh-core + + + org.openjdk.jmh + jmh-generator-annprocess diff --git a/nb-api/src/test/resources/importable-config.json b/nb-api/src/test/resources/importable-config.json new file mode 100644 index 000000000..004d0f757 --- /dev/null +++ b/nb-api/src/test/resources/importable-config.json @@ -0,0 +1,6 @@ +{ + "a": "B", + "b": "C", + "c": 123, + "d": 45.6 +} \ No newline at end of file diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index fd434bd34..0142b6716 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -58,11 +58,6 @@ 3.12.155-SNAPSHOT - - com.google.code.gson - gson - - From 897a8389c9797b999f85c63c069e76f1a29214c7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:28:10 -0600 Subject: [PATCH 024/164] generalize log level to NB --- .../java/io/nosqlbench/engine/cli/NBCLI.java | 1 + .../nosqlbench/engine/cli/NBCLIOptions.java | 29 ++++++------- .../nosqlbench/nb/api/logging/NBLogLevel.java | 42 +++++++++++++++++++ 3 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java 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 db6f08530..34ee57d16 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 @@ -21,6 +21,7 @@ import io.nosqlbench.nb.api.annotation.Annotator; import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; import io.nosqlbench.nb.api.errors.BasicError; +import io.nosqlbench.nb.api.logging.NBLogLevel; import io.nosqlbench.nb.api.markdown.exporter.MarkdownExporter; import io.nosqlbench.virtdata.userlibs.apps.VirtDataMainApp; import org.slf4j.Logger; 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 807377d0a..10bafb9c2 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 @@ -108,7 +108,7 @@ public class NBCLIOptions { private String wantsMetricsForActivity; private String sessionName = ""; private boolean showScript = false; - private Level consoleLevel = Level.WARN; + private NBLogLevel consoleLevel = NBLogLevel.WARN; private final List histoLoggerConfigs = new ArrayList<>(); private final List statsLoggerConfigs = new ArrayList<>(); private final List classicHistoConfigs = new ArrayList<>(); @@ -120,8 +120,8 @@ public class NBCLIOptions { private String[] rleDumpOptions = new String[0]; private String[] cyclelogImportOptions = new String[0]; private String consoleLoggingPattern = DEFAULT_CONSOLE_LOGGING_PATTERN; - private String logsLevel = "INFO"; - private Map logLevelsOverrides = new HashMap<>(); + private NBLogLevel logsLevel = NBLogLevel.INFO; + private Map logLevelsOverrides = new HashMap<>(); private boolean enableChart = false; private boolean dockerMetrics = false; private boolean wantsScenariosList = false; @@ -393,7 +393,8 @@ public class NBCLIOptions { break; case LOGS_LEVEL: arglist.removeFirst(); - logsLevel = readWordOrThrow(arglist, "a log level"); + String loglevel = readWordOrThrow(arglist, "a log level"); + this.logsLevel = NBLogLevel.valueOfName(loglevel); break; case LOG_LEVEL_OVERRIDE: arglist.removeFirst(); @@ -464,15 +465,15 @@ public class NBCLIOptions { wantsMarkerTypes = true; break; case DASH_V_INFO: - consoleLevel = Level.INFO; + consoleLevel = NBLogLevel.INFO; arglist.removeFirst(); break; case DASH_VV_DEBUG: - consoleLevel = Level.DEBUG; + consoleLevel = NBLogLevel.DEBUG; arglist.removeFirst(); break; case DASH_VVV_TRACE: - consoleLevel = Level.TRACE; + consoleLevel = NBLogLevel.TRACE; arglist.removeFirst(); break; case WITH_LOGGING_PATTERN: @@ -508,14 +509,14 @@ public class NBCLIOptions { return wantsToIncludePaths.toArray(new String[0]); } - private Map parseLogLevelOverrides(String levelsSpec) { - Map levels = new HashMap<>(); + private Map parseLogLevelOverrides(String levelsSpec) { + Map levels = new HashMap<>(); Arrays.stream(levelsSpec.split("[,;]")).forEach(kp -> { String[] ll = kp.split(":"); if (ll.length != 2) { throw new RuntimeException("Log level must have name:level format"); } - levels.put(ll[0], Level.toLevel(ll[1])); + levels.put(ll[0], ll[1]); }); return levels; } @@ -618,7 +619,7 @@ public class NBCLIOptions { return sessionName; } - public Level wantsConsoleLogLevel() { + public NBLogLevel wantsConsoleLogLevel() { return consoleLevel; } @@ -642,7 +643,7 @@ public class NBCLIOptions { public String getProgressSpec() { ProgressSpec spec = parseProgressSpec(this.progressSpec);// sanity check if (spec.indicatorMode == IndicatorMode.console) { - if (Level.INFO.isGreaterOrEqual(wantsConsoleLogLevel())) { + if (NBLogLevel.INFO.isGreaterOrEqualTo(wantsConsoleLogLevel())) { logger.warn("Console is already logging info or more, so progress data on console is suppressed."); spec.indicatorMode = IndicatorMode.logonly; } else if (this.getCommands().stream().anyMatch(cmd -> cmd.getCmdType().equals(Cmd.CmdType.script))) { @@ -677,7 +678,7 @@ public class NBCLIOptions { return logsMax; } - public String getLogsLevel() { + public NBLogLevel getScenarioLogLevel() { return logsLevel; } @@ -721,7 +722,7 @@ public class NBCLIOptions { return consoleLoggingPattern; } - public Map getLogLevelOverrides() { + public Map getLogLevelOverrides() { return logLevelsOverrides; } diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java b/nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java new file mode 100644 index 000000000..a726a7dc1 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java @@ -0,0 +1,42 @@ +package io.nosqlbench.nb.api.logging; + +public enum NBLogLevel { + NONE(0L), + FATAL(1L << 0), + ERROR(1L << 1), + WARN(1L << 2), + INFO(1L << 3), + DEBUG(1L << 4), + TRACE(1L << 5), + ALL(1L << 30), + ; + + private final long level; + + NBLogLevel(long level) { + this.level = level; + } + + public static NBLogLevel valueOfName(String name) { + for (NBLogLevel possible : NBLogLevel.values()) { + if (name.toUpperCase().equals(possible.toString())) { + return possible; + } + } + throw new RuntimeException("Unable to find NBLogLevel for " + name); + } + + public static NBLogLevel max(NBLogLevel... levels) { + NBLogLevel max = NBLogLevel.NONE; + for (NBLogLevel level : levels) { + if (level.level > max.level) { + max = level; + } + } + return max; + } + + public boolean isGreaterOrEqualTo(NBLogLevel other) { + return level >= other.level; + } +} From e9d2b48985b7f3bb844c42eb479d51571b8f44be Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:28:19 -0600 Subject: [PATCH 025/164] environment API improvements --- .../src/main/java/io/nosqlbench/nb/api}/Environment.java | 8 ++++---- .../test/java/io/nosqlbench/nb/api}/EnvironmentTest.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) rename {engine-cli/src/main/java/io/nosqlbench/engine/cli => nb-api/src/main/java/io/nosqlbench/nb/api}/Environment.java (97%) rename {engine-cli/src/test/java/io/nosqlbench/engine/cli => nb-api/src/test/java/io/nosqlbench/nb/api}/EnvironmentTest.java (92%) diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/Environment.java b/nb-api/src/main/java/io/nosqlbench/nb/api/Environment.java similarity index 97% rename from engine-cli/src/main/java/io/nosqlbench/engine/cli/Environment.java rename to nb-api/src/main/java/io/nosqlbench/nb/api/Environment.java index adf3da550..4d92c0c93 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/Environment.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/Environment.java @@ -1,8 +1,8 @@ -package io.nosqlbench.engine.cli; +package io.nosqlbench.nb.api; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.regex.Matcher; @@ -36,7 +36,7 @@ import java.util.regex.Pattern; * invalid in this API, except when provided as a default value. */ public class Environment { - private final static Logger logger = LoggerFactory.getLogger(Environment.class); + private final static Logger logger = LogManager.getLogger("ENVIRONMENT"); // package private for testing Environment() { diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/EnvironmentTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/EnvironmentTest.java similarity index 92% rename from engine-cli/src/test/java/io/nosqlbench/engine/cli/EnvironmentTest.java rename to nb-api/src/test/java/io/nosqlbench/nb/api/EnvironmentTest.java index c65b069f1..55b99eaee 100644 --- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/EnvironmentTest.java +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/EnvironmentTest.java @@ -1,4 +1,4 @@ -package io.nosqlbench.engine.cli; +package io.nosqlbench.nb.api; import org.junit.Test; From e0498ff29b71b9d5983f84e8472a72f260a3f06f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:28:26 -0600 Subject: [PATCH 026/164] docs updates --- engine-cli/src/main/resources/argsfile.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/engine-cli/src/main/resources/argsfile.md b/engine-cli/src/main/resources/argsfile.md index 6dba1011c..7803a29b6 100644 --- a/engine-cli/src/main/resources/argsfile.md +++ b/engine-cli/src/main/resources/argsfile.md @@ -99,3 +99,9 @@ To simply set global defaults, you can run nosqlbench with a command line like this: ./nb --pin --docker-metrics-at metricsnode --pin --annotate all + +# Compatibility + +You should use the --pin and --unpin options to make any changes to the + argsfile when integrating or automating workflows. This ensures that + any changes to file format are handled for you by nb. \ No newline at end of file From 4996d206c71dfd5cd8d62a97b4bc67fbab4b3242 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:28:39 -0600 Subject: [PATCH 027/164] config API improvements --- .../nb/api/config/ConfigLoader.java | 115 ++++++++++++++++++ .../nosqlbench/nb/api/config/ConfigModel.java | 16 +-- .../nb/api/config/MutableConfigModel.java | 110 +++++++++++++++-- .../nb/api/config/ConfigLoaderTest.java | 49 ++++++++ .../basics/shared/stateful/LoadElement.java | 8 +- 5 files changed, 273 insertions(+), 25 deletions(-) create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigLoader.java create mode 100644 nb-api/src/test/java/io/nosqlbench/nb/api/config/ConfigLoaderTest.java diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigLoader.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigLoader.java new file mode 100644 index 000000000..a4e693a58 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigLoader.java @@ -0,0 +1,115 @@ +package io.nosqlbench.nb.api.config; + +import com.google.gson.*; +import io.nosqlbench.nb.api.content.NBIO; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + *

The config loader is meant to be the way that configurations + * for objects or subsystems are loaded generically.

+ * + *

It supports value which are defined as JSON objects, lists + * of JSON objects, or as a fall-back simple parameter maps according to + * {@link ParamsParser} rules.

+ * + * If a block of config data begins with a '[' (open square bracket), + * it is taken as a JSON list of configs. If it starts with a '{' (open curly + * brace), it is taken as a single config. Otherwise it is taken as a simple + * set of named parameters using '=' as an assignment operator. + * + * An empty string represents the null value. + * + * Users of this interface should be prepared to receive a null, or a list + * of zero or more config elements of the requested type. + * + *

Importing configs

+ *

+ * Configs can be imported from local files, classpath resources, or URLs. + * This is supported with the form of

{@code IMPORT{URL}}
+ * where URL can be any form mentioned above. This syntax is obtuse and + * strange, but the point of this is to use something + * that should never occur in the wild, to avoid collisions with actual + * configuration content, but which is also clearly doing what it says.

+ */ +public class ConfigLoader { + private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + private final static Logger logger = LogManager.getLogger("CONFIG"); + + /** + * Load a string into an ordered map of objects, with the key being defined + * by an extractor function over the objects. Any duplicate keys are treated + * as an error. This is a useful method for loading configuration blocks + * which must be distinctly named. + * + * @param source The config data + * @param type The type of configuration object to be stored in the map values + * @param keyer The function that extracts the key + * @param The generic parameter for the type field + * @return A map of named configuration objects + */ + public LinkedHashMap loadMap( + CharSequence source, + Class type, + Function keyer) { + + LinkedHashMap mapOf = new LinkedHashMap<>(); + List elems = load(source, type); + + for (V elem : elems) { + String key = keyer.apply(elem); + if (mapOf.containsKey(key)) { + throw new RuntimeException("Duplicitous key mappings are disallowed here."); + } + mapOf.put(key, elem); + } + return mapOf; + } + + public List load(CharSequence source, Class type) { + List cfgs = new ArrayList<>(); + + String data = source.toString(); + data = data.trim(); + if (data.isEmpty()) { + return null; + } + + if (data.startsWith("IMPORT{") && data.endsWith("}")) { + String filename = data.substring("IMPORT{".length(), data.length() - 1); + Path filepath = Path.of(filename); + + data = NBIO.all().name(filename).first() + .map(c -> { + logger.debug("found 'data' at " + c.getURI()); + return c.asString(); + }).orElseThrow(); + } + + if (data.startsWith("{") || data.startsWith("[")) { + JsonParser parser = new JsonParser(); + + JsonElement jsonElement = parser.parse(data); + if (jsonElement.isJsonArray()) { + JsonArray asJsonArray = jsonElement.getAsJsonArray(); + for (JsonElement element : asJsonArray) { + T object = gson.fromJson(element, type); + cfgs.add(object); + } + } else if (jsonElement.isJsonObject()) { + cfgs.add(gson.fromJson(jsonElement, type)); + } + } else if (Map.class.isAssignableFrom(type)) { + Map parsedMap = ParamsParser.parse(data, false); + cfgs.add(type.cast(parsedMap)); + } + return cfgs; + } +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigModel.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigModel.java index 4a1eff0ce..0043275a9 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigModel.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigModel.java @@ -1,17 +1,13 @@ package io.nosqlbench.nb.api.config; -import java.util.List; +import java.util.Map; public interface ConfigModel { - List getElements(); + Map getElements(); - class Element { - public final String name; - public final Class type; + Class getOf(); - public Element(String name, Class type) { - this.name = name; - this.type = type; - } - } + void assertValidConfig(Map config); + + ConfigReader apply(Map config); } diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java index 18790b595..16f3ed183 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java @@ -1,22 +1,52 @@ package io.nosqlbench.nb.api.config; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; public class MutableConfigModel implements ConfigModel { - private final List elements = new ArrayList<>(); + private final LinkedHashMap elements = new LinkedHashMap<>(); + private final Class ofType; - public MutableConfigModel() {} + public MutableConfigModel(Class ofType) { + this.ofType = ofType; + } - public MutableConfigModel add(String name, Class clazz) { - add(new ConfigModel.Element(name, clazz)); + public MutableConfigModel(Object ofObject) { + this.ofType = ofObject.getClass(); + } + + public MutableConfigModel optional(String name, Class clazz) { + add(new ConfigElement(name, clazz, "", false, null)); return this; } - private void add(ConfigModel.Element element) { - this.elements.add(element); + public MutableConfigModel optional(String name, Class clazz, String description) { + add(new ConfigElement(name, clazz, description, false, null)); + return this; + } + + public MutableConfigModel required(String name, Class clazz, String description) { + add(new ConfigElement(name, clazz, description, true, null)); + return this; + } + + public MutableConfigModel required(String name, Class clazz) { + add(new ConfigElement(name, clazz, "", true, null)); + return this; + } + + public MutableConfigModel defaultto(String name, Object defaultValue) { + add(new ConfigElement(name, defaultValue.getClass(), "", true, defaultValue)); + return this; + } + + public MutableConfigModel defaultto(String name, Object defaultValue, String description) { + add(new ConfigElement(name, defaultValue.getClass(), description, true, defaultValue)); + return this; + } + + private void add(ConfigElement element) { + this.elements.put(element.name, element); } public ConfigModel asReadOnly() { @@ -24,7 +54,65 @@ public class MutableConfigModel implements ConfigModel { } @Override - public List getElements() { - return Collections.unmodifiableList(elements); + public Map getElements() { + return Collections.unmodifiableMap(elements); + } + + @Override + public Class getOf() { + return ofType; + } + + @Override + public void assertValidConfig(Map config) { + for (String configkey : config.keySet()) { + ConfigElement element = this.elements.get(configkey); + if (element == null) { + throw new RuntimeException( + "Unknown config parameter in config model '" + configkey + "'\n" + + "while configuring a " + getOf().getSimpleName()); + } + Object value = config.get(configkey); + if (!element.getType().isAssignableFrom(value.getClass())) { + throw new RuntimeException("Unable to assign provided configuration\n" + + "of type '" + value.getClass().getSimpleName() + " to config\n" + + "parameter of type '" + element.getType().getSimpleName() + "'\n" + + "while configuring a " + getOf().getSimpleName()); + } + } + for (ConfigElement element : elements.values()) { + if (element.isRequired() && element.getDefaultValue() == null) { + if (!config.containsKey(element.getName())) { + throw new RuntimeException("A required config element named '" + element.getName() + + "' and type '" + element.getType().getSimpleName() + "' was not found\n" + + "for configuring a " + getOf().getSimpleName()); + } + } + } + } + + @Override + public ConfigReader apply(Map config) { + assertValidConfig(config); + LinkedHashMap validConfig = new LinkedHashMap<>(); + + elements.forEach((k, v) -> { + String name = v.getName(); + Class type = v.getType(); + Object cval = config.get(name); + if (cval == null && v.isRequired()) { + cval = v.getDefaultValue(); + } + if (cval != null) { + if (type.isAssignableFrom(cval.getClass())) { + validConfig.put(name, cval); + } else { + throw new RuntimeException("Unable to assign a " + cval.getClass().getSimpleName() + + " to a " + type.getSimpleName()); + } + } + }); + + return new ConfigReader(this.asReadOnly(), validConfig); } } diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/config/ConfigLoaderTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/config/ConfigLoaderTest.java new file mode 100644 index 000000000..9ad30c9d2 --- /dev/null +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/config/ConfigLoaderTest.java @@ -0,0 +1,49 @@ +package io.nosqlbench.nb.api.config; + +import org.junit.Test; + +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class ConfigLoaderTest { + + @Test + public void testSingleParams() { + ConfigLoader cl = new ConfigLoader(); + List cfg1 = cl.load("a=b c=234", Map.class); + assertThat(cfg1).contains(Map.of("a", "b", "c", "234")); + } + + @Test + public void testSingleJsonObject() { + ConfigLoader cl = new ConfigLoader(); + List cfg1 = cl.load("{a:'b', c:'234'}", Map.class); + assertThat(cfg1).contains(Map.of("a", "b", "c", "234")); + } + + @Test + public void testJsonArray() { + ConfigLoader cl = new ConfigLoader(); + List cfg1 = cl.load("[{a:'b', c:'234'}]", Map.class); + assertThat(cfg1).contains(Map.of("a", "b", "c", "234")); + + } + + @Test + public void testImportSingle() { + ConfigLoader cl = new ConfigLoader(); + List imported = cl.load("IMPORT{importable-config.json}", Map.class); + assertThat(imported).contains(Map.of("a", "B", "b", "C", "c", 123.0, "d", 45.6)); + } + + @Test + public void testEmpty() { + ConfigLoader cl = new ConfigLoader(); + List cfg1 = cl.load("", Map.class); + assertThat(cfg1).isNull(); + + } +} \ No newline at end of file diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/stateful/LoadElement.java b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/stateful/LoadElement.java index ac810cc8a..1b9ada6f5 100644 --- a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/stateful/LoadElement.java +++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/stateful/LoadElement.java @@ -42,15 +42,15 @@ public class LoadElement implements Function, ConfigAware { } @Override - public void applyConfig(Map elements) { - Map vars = (Map) elements.get(mapname); - if (vars!=null) { + public void applyConfig(Map providedConfig) { + Map vars = (Map) providedConfig.get(mapname); + if (vars != null) { this.vars = vars; } } @Override public ConfigModel getConfigModel() { - return new MutableConfigModel().add("",Map.class); + return new MutableConfigModel(this).optional("", Map.class); } } From fa85704b837d32f95765582712b206e28b081a58 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:28:54 -0600 Subject: [PATCH 028/164] add SPI impl selector field 'selector' --- .../src/main/java/io/nosqlbench/nb/annotations/Service.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java b/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java index c2a79ec6e..8b8aa60b9 100644 --- a/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java +++ b/nb-annotations/src/main/java/io/nosqlbench/nb/annotations/Service.java @@ -30,4 +30,6 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) public @interface Service { Class value(); + + String selector() default ""; } From a3e0739ade4f8b0a7f99950547a15b205bdddb2b Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:29:11 -0600 Subject: [PATCH 029/164] add FixedValues for double --- .../from_long/to_double/FixedValues.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_double/FixedValues.java diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_double/FixedValues.java b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_double/FixedValues.java new file mode 100644 index 000000000..edd566a72 --- /dev/null +++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_double/FixedValues.java @@ -0,0 +1,23 @@ +package io.nosqlbench.virtdata.library.basics.shared.from_long.to_double; + +import io.nosqlbench.virtdata.api.annotations.Example; +import io.nosqlbench.virtdata.api.annotations.ThreadSafeMapper; + +import java.util.function.LongToDoubleFunction; + +@ThreadSafeMapper +public class FixedValues implements LongToDoubleFunction { + + private final long[] fixedValues; + + @Example({"FixedValues(3D,53D,73d)", "Yield 3D, 53D, 73D, 3D, 53D, 73D, 3D, ..."}) + public FixedValues(long... values) { + this.fixedValues = values; + } + + @Override + public double applyAsDouble(long value) { + int index = (int) (value % Integer.MAX_VALUE) % fixedValues.length; + return fixedValues[index]; + } +} From 60fa052951f75eb25725871709ffd2cd25be4b68 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:29:17 -0600 Subject: [PATCH 030/164] add default log4j configs --- docsys/src/main/resources/logback-docsys.xml | 39 ------------------ engine-api/src/test/resources/log4j-test.xml | 41 +++++++++++++++++++ .../src/test/resources/logback-test.xml | 14 ------- engine-cli/src/main/resources/log4j.xml | 41 +++++++++++++++++++ engine-cli/src/main/resources/logback.xml | 34 --------------- engine-cli/src/test/resources/log4j-test.xml | 41 +++++++++++++++++++ .../src/test/resources/logback-test.xml | 15 ------- engine-core/src/main/resources/log4j.xml | 41 +++++++++++++++++++ engine-core/src/main/resources/logback.xml | 14 ------- engine-core/src/test/resources/log4j-test.xml | 41 +++++++++++++++++++ .../src/test/resources/logback-test.xml | 16 -------- nb/src/main/resources/log4j.xml | 41 +++++++++++++++++++ nb/src/main/resources/logback.xml | 40 ------------------ .../src/test/resources/log4j-test.xml | 41 +++++++++++++++++++ .../src/test/resources/logback-test.xml | 13 ------ .../src/test/resources/log4j-test.xml | 41 +++++++++++++++++++ .../src/test/resources/logback-test.xml | 14 ------- .../src/main/resources/log4j.xml | 41 +++++++++++++++++++ .../src/main/resources/logback.xml | 15 ------- .../src/test/resources/log4j-test.xml | 41 +++++++++++++++++++ .../src/test/resources/logback-test.xml | 13 ------ 21 files changed, 410 insertions(+), 227 deletions(-) delete mode 100644 docsys/src/main/resources/logback-docsys.xml create mode 100644 engine-api/src/test/resources/log4j-test.xml delete mode 100644 engine-api/src/test/resources/logback-test.xml create mode 100644 engine-cli/src/main/resources/log4j.xml delete mode 100644 engine-cli/src/main/resources/logback.xml create mode 100644 engine-cli/src/test/resources/log4j-test.xml delete mode 100644 engine-cli/src/test/resources/logback-test.xml create mode 100644 engine-core/src/main/resources/log4j.xml delete mode 100644 engine-core/src/main/resources/logback.xml create mode 100644 engine-core/src/test/resources/log4j-test.xml delete mode 100644 engine-core/src/test/resources/logback-test.xml create mode 100644 nb/src/main/resources/log4j.xml delete mode 100644 nb/src/main/resources/logback.xml create mode 100644 virtdata-lang/src/test/resources/log4j-test.xml delete mode 100644 virtdata-lang/src/test/resources/logback-test.xml create mode 100644 virtdata-lib-basics/src/test/resources/log4j-test.xml delete mode 100644 virtdata-lib-basics/src/test/resources/logback-test.xml create mode 100644 virtdata-userlibs/src/main/resources/log4j.xml delete mode 100644 virtdata-userlibs/src/main/resources/logback.xml create mode 100644 virtdata-userlibs/src/test/resources/log4j-test.xml delete mode 100644 virtdata-userlibs/src/test/resources/logback-test.xml diff --git a/docsys/src/main/resources/logback-docsys.xml b/docsys/src/main/resources/logback-docsys.xml deleted file mode 100644 index 75ee168cf..000000000 --- a/docsys/src/main/resources/logback-docsys.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - false - logs/docserver.log - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - false - logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz - - 50MB - - 250GB - - 1 - true - - - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - \ No newline at end of file diff --git a/engine-api/src/test/resources/log4j-test.xml b/engine-api/src/test/resources/log4j-test.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/engine-api/src/test/resources/log4j-test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/engine-api/src/test/resources/logback-test.xml b/engine-api/src/test/resources/logback-test.xml deleted file mode 100644 index b352084ec..000000000 --- a/engine-api/src/test/resources/logback-test.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - \ No newline at end of file diff --git a/engine-cli/src/main/resources/log4j.xml b/engine-cli/src/main/resources/log4j.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/engine-cli/src/main/resources/log4j.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/engine-cli/src/main/resources/logback.xml b/engine-cli/src/main/resources/logback.xml deleted file mode 100644 index 7513a2819..000000000 --- a/engine-cli/src/main/resources/logback.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - logs/docserver.log - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz - - 50MB - - 250GB - - 1 - - - - - - - - - - \ No newline at end of file diff --git a/engine-cli/src/test/resources/log4j-test.xml b/engine-cli/src/test/resources/log4j-test.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/engine-cli/src/test/resources/log4j-test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/engine-cli/src/test/resources/logback-test.xml b/engine-cli/src/test/resources/logback-test.xml deleted file mode 100644 index b5e147ade..000000000 --- a/engine-cli/src/test/resources/logback-test.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - \ No newline at end of file diff --git a/engine-core/src/main/resources/log4j.xml b/engine-core/src/main/resources/log4j.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/engine-core/src/main/resources/log4j.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/engine-core/src/main/resources/logback.xml b/engine-core/src/main/resources/logback.xml deleted file mode 100644 index 12e2f501d..000000000 --- a/engine-core/src/main/resources/logback.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/engine-core/src/test/resources/log4j-test.xml b/engine-core/src/test/resources/log4j-test.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/engine-core/src/test/resources/log4j-test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/engine-core/src/test/resources/logback-test.xml b/engine-core/src/test/resources/logback-test.xml deleted file mode 100644 index 5fd8688bc..000000000 --- a/engine-core/src/test/resources/logback-test.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - \ No newline at end of file diff --git a/nb/src/main/resources/log4j.xml b/nb/src/main/resources/log4j.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/nb/src/main/resources/log4j.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nb/src/main/resources/logback.xml b/nb/src/main/resources/logback.xml deleted file mode 100644 index 4016f4bf8..000000000 --- a/nb/src/main/resources/logback.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - logs/docserver.log - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz - - 50MB - - 250GB - - 1 - - - - - - - - diff --git a/virtdata-lang/src/test/resources/log4j-test.xml b/virtdata-lang/src/test/resources/log4j-test.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/virtdata-lang/src/test/resources/log4j-test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/virtdata-lang/src/test/resources/logback-test.xml b/virtdata-lang/src/test/resources/logback-test.xml deleted file mode 100644 index 5060e6eed..000000000 --- a/virtdata-lang/src/test/resources/logback-test.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - \ No newline at end of file diff --git a/virtdata-lib-basics/src/test/resources/log4j-test.xml b/virtdata-lib-basics/src/test/resources/log4j-test.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/virtdata-lib-basics/src/test/resources/log4j-test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/virtdata-lib-basics/src/test/resources/logback-test.xml b/virtdata-lib-basics/src/test/resources/logback-test.xml deleted file mode 100644 index c38e933b1..000000000 --- a/virtdata-lib-basics/src/test/resources/logback-test.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/virtdata-userlibs/src/main/resources/log4j.xml b/virtdata-userlibs/src/main/resources/log4j.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/virtdata-userlibs/src/main/resources/log4j.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/virtdata-userlibs/src/main/resources/logback.xml b/virtdata-userlibs/src/main/resources/logback.xml deleted file mode 100644 index 01e836ef0..000000000 --- a/virtdata-userlibs/src/main/resources/logback.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/virtdata-userlibs/src/test/resources/log4j-test.xml b/virtdata-userlibs/src/test/resources/log4j-test.xml new file mode 100644 index 000000000..70176aaf6 --- /dev/null +++ b/virtdata-userlibs/src/test/resources/log4j-test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/virtdata-userlibs/src/test/resources/logback-test.xml b/virtdata-userlibs/src/test/resources/logback-test.xml deleted file mode 100644 index 8c7d3db36..000000000 --- a/virtdata-userlibs/src/test/resources/logback-test.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - \ No newline at end of file From 667fbdbae9fa8f44164187dcf9b6365c7e836af5 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:29:35 -0600 Subject: [PATCH 031/164] add log4j2 programmatic configuration --- .../java/io/nosqlbench/engine/cli/NBCLI.java | 34 +-- .../nosqlbench/engine/cli/NBCLIOptions.java | 8 +- .../engine/core/ScenarioLogger.java | 176 --------------- .../engine/core/logging/LoggerConfig.java | 152 +++++++++++++ .../engine/core/logging/ScenarioLogger.java | 27 +++ .../engine/core/logging/SessionLogConfig.java | 204 ++++++++++++++++++ .../engine/core/script/ScenariosExecutor.java | 6 +- .../script/AsyncScriptIntegrationTests.java | 5 +- 8 files changed, 418 insertions(+), 194 deletions(-) delete mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioLogger.java create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java 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 34ee57d16..14c2d50a1 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 @@ -40,8 +40,7 @@ import java.util.stream.Collectors; public class NBCLI { - private static final Logger logger = LoggerFactory.getLogger("NBCLI"); - private static final Logger EVENTS = LoggerFactory.getLogger("EVENTS"); + private static Logger logger; private static final String CHART_HDR_LOG_NAME = "hdrdata-for-chart.log"; @@ -68,6 +67,14 @@ public class NBCLI { public void run(String[] args) { + // Initial logging config covers only command line parsing + // We don't want anything to go to console here unless it is a real problem + // as some integrations will depend on a stable and parsable program output + LoggerConfig loggerConfig = new LoggerConfig(NBLogLevel.ERROR, NBLogLevel.ERROR); + + ConfigurationFactory.setConfigurationFactory(loggerConfig); + logger = LogManager.getLogger("NBCLI"); + NBCLIOptions globalOptions = new NBCLIOptions(args, NBCLIOptions.Mode.ParseGlobalsOnly); // Global only processing @@ -128,11 +135,10 @@ public class NBCLI { String sessionName = new SessionNamer().format(options.getSessionName()); - ConsoleLogging.enableConsoleLogging(options.wantsConsoleLogLevel(), options.getConsoleLoggingPattern()); - - Annotators.init(options.getAnnotatorsConfig()); - Annotators.recordAnnotation(sessionName, 0L, 0L, - Map.of(), Map.of()); + SessionLogConfig sessionLogConfig = new SessionLogConfig(sessionName); + sessionLogConfig.setConsolePattern(options.getConsoleLoggingPattern()); + sessionLogConfig.setLevel(options.wantsConsoleLogLevel()); + sessionLogConfig.start(); ActivityMetrics.setHdrDigits(options.getHdrDigits()); @@ -312,13 +318,12 @@ public class NBCLI { } - Level consoleLogLevel = options.wantsConsoleLogLevel(); - Level scenarioLogLevel = Level.toLevel(options.getLogsLevel()); - if (scenarioLogLevel.toInt() > consoleLogLevel.toInt()) { + NBLogLevel consoleLogLevel = options.wantsConsoleLogLevel(); + NBLogLevel scenarioLogLevel = options.getScenarioLogLevel(); + if (scenarioLogLevel.isGreaterOrEqualTo(consoleLogLevel)) { logger.info("raising scenario logging level to accommodate console logging level"); } - - Level maxLevel = Level.toLevel(Math.min(consoleLogLevel.toInt(), scenarioLogLevel.toInt())); + NBLogLevel maxLevel = NBLogLevel.max(consoleLogLevel, scenarioLogLevel); // Execute Scenario! if (options.getCommands().size() == 0) { @@ -330,7 +335,10 @@ public class NBCLI { ScriptParams scriptParams = new ScriptParams(); scriptParams.putAll(buffer.getCombinedParams()); scenario.addScenarioScriptParams(scriptParams); - ScenarioLogger sl = new ScenarioLogger(scenario) + + Path scenarioLogPath = SessionLogConfig.composeSessionLogName(options.getLogsDirectory(), scenario.getScenarioName()); + logger.info("Configuring scenario log at " + scenarioLogPath.toString()); + ScenarioLogger sl = new SessionLogConfig(scenario.getScenarioName()) .setLogDir(options.getLogsDirectory()) .setMaxLogs(options.getLogsMax()) .setLevel(maxLevel) 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 10bafb9c2..f8e5c1308 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 @@ -90,7 +90,9 @@ public class NBCLIOptions { private static final String GRAALJS_COMPAT = "--graaljs-compat"; private static final String DOCKER_GRAFANA_TAG = "--docker-grafana-tag"; - private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"; + private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable"; + + // private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"; public static final String NBSTATEDIR = "NBSTATEDIR"; private final LinkedList cmdList = new LinkedList<>(); @@ -670,8 +672,8 @@ public class NBCLIOptions { return reportCsvTo; } - public String getLogsDirectory() { - return logsDirectory; + public Path getLogsDirectory() { + return Path.of(logsDirectory); } public int getLogsMax() { diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioLogger.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioLogger.java deleted file mode 100644 index 0b5482971..000000000 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioLogger.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * - * Copyright 2016 jshook - * 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.core; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.encoder.PatternLayoutEncoder; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.core.ConsoleAppender; -import ch.qos.logback.core.FileAppender; -import io.nosqlbench.engine.core.script.Scenario; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.nio.file.Files; -import java.util.*; -import java.util.stream.Collectors; - -public class ScenarioLogger { - - private final Scenario scenario; - private File loggerDir = new File("logs"); - private int maxLogfiles = 10; - private Level logLevel = Level.INFO; - private Map logLevelOverrides = new HashMap<>(); - - public ScenarioLogger(Scenario scenario) { - this.scenario = scenario; - } - - public ScenarioLogger setLogDir(String logDir) { - this.loggerDir = new File(logDir); - return this; - } - - public ScenarioLogger setMaxLogs(int maxLogfiles) { - this.maxLogfiles = maxLogfiles; - return this; - } - - public ScenarioLogger setLevel(Level level) { - this.logLevel = level; - return this; - } - - public ScenarioLogger setLevel(String levelname) { - this.logLevel = Level.toLevel(levelname); - return this; - } - - public ScenarioLogger start() { - - if (!loggerDir.exists()) { - if (!loggerDir.mkdirs()) { - throw new RuntimeException("Unable to create logger directory:" + loggerDir.getPath()); - } - } - - LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); - //List copyOfListenerList = loggerContext.getCopyOfListenerList(); - - ConsoleAppender ca = new ConsoleAppender<>(); - ca.setContext(loggerContext); - - PatternLayoutEncoder ple = new PatternLayoutEncoder(); -// ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n"); - - ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n"); - ple.setContext(loggerContext); - ple.start(); - - String scenarioLog = loggerDir.getPath() + File.separator + scenario.getScenarioName()+".log"; - scenarioLog = scenarioLog.replaceAll("\\s","_"); - FileAppender fileAppender = new FileAppender(); - fileAppender.setFile(scenarioLog); - fileAppender.setEncoder(ple); - fileAppender.setContext(loggerContext); - fileAppender.setImmediateFlush(true); - System.err.println("Logging to " + scenarioLog); - fileAppender.start(); - - Logger logger = (Logger) LoggerFactory.getLogger("ROOT"); - logger.addAppender(fileAppender); - - logLevelOverrides.forEach((loggerName,loggingLevel) -> { - logger.debug("Overriding log level for " + loggerName + " to " + loggingLevel); - Logger toOverride = (Logger) LoggerFactory.getLogger(loggerName); - toOverride.setLevel(loggingLevel); - toOverride.debug("Log level was set to " + loggingLevel + - " by CLI option."); - }); - - logger.setLevel(logLevel); - logger.setAdditive(true); /* set to true if root should log too */ - - purgeOldFiles(logger); - - return this; - } - - private void purgeOldFiles(Logger logger) { - if (maxLogfiles==0) { - logger.debug("Not purging old files, since maxLogFiles is 0."); - return; - } - - - File[] files = loggerDir.listFiles(new FileFilter() { - @Override - public boolean accept(File pathname) { - return pathname.getPath().endsWith(".log"); - } - }); - if (files==null) { - return; - } - - List filesList = Arrays.asList(files); - int remove = filesList.size() - maxLogfiles; - if (remove<=0) { - return; - } - - List toDelete = filesList.stream() - .sorted(fileTimeComparator) - .limit(remove) - .collect(Collectors.toList()); - - for (File file : toDelete) { - logger.info("removing extra logfile: " + file.getPath()); - if (!file.delete()) { - logger.warn("unable to delete: " + file); - try { - Files.delete(file.toPath()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - } - - private static final Comparator fileTimeComparator = new Comparator() { - @Override - public int compare(File o1, File o2) { - return Long.compare(o1.lastModified(),o2.lastModified()); - } - }; - - - public ScenarioLogger setLogLevelOverrides(Map logLevelOverrides) { - this.logLevelOverrides = logLevelOverrides; - return this; - } - - public String getLogDir() { - return this.loggerDir.toString(); - } -} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java new file mode 100644 index 000000000..6427ecdb2 --- /dev/null +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java @@ -0,0 +1,152 @@ +package io.nosqlbench.engine.core.logging; + +import io.nosqlbench.nb.api.logging.NBLogLevel; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.apache.logging.log4j.core.appender.RollingFileAppender; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.ConfigurationFactory; +import org.apache.logging.log4j.core.config.ConfigurationSource; +import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder; +import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder; +import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder; +import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder; +import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; + +import java.net.URI; + +//@Plugin(name = "CustomConfigurationFactory", category = ConfigurationFactory.CATEGORY) +//@Order(50) +// Can't use plugin injection, since we need a tailored instance before logging +public class LoggerConfig extends ConfigurationFactory { + + private static final String LOG_PATTERN = "%d{DEFAULT}{GMT} [%t] %-5level: %msg%n"; + private static final String CONSOLE_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable"; + public static final Level ROOT_LOG_LEVEL = Level.ALL; + private final NBLogLevel consoleLevel; + private final NBLogLevel fileLevel; + + public LoggerConfig(NBLogLevel consoleLevel, NBLogLevel fileLevel) { + this.consoleLevel = consoleLevel; + this.fileLevel = fileLevel; + } + + Configuration createConfiguration(final String name, ConfigurationBuilder builder) { + + Level internalLoggingStatusThreshold = Level.ERROR; + Level builderThresholdLevel = Level.INFO; +// Level rootLoggingLevel = Level.INFO; + + builder.setConfigurationName(name); + + builder.setStatusLevel(internalLoggingStatusThreshold); + +// builder.add( +// builder.newFilter( +// "ThresholdFilter", +// Filter.Result.ACCEPT, +// Filter.Result.NEUTRAL +// ).addAttribute("level", builderThresholdLevel) +// ); + + // CONSOLE appender + AppenderComponentBuilder appenderBuilder = + builder.newAppender("Stdout", "CONSOLE") + .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT); + + appenderBuilder.add(builder.newLayout("PatternLayout") + .addAttribute("pattern", CONSOLE_PATTERN)); + +// appenderBuilder.add( +// builder.newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL) +// .addAttribute("marker", "FLOW") +// ); + builder.add(appenderBuilder); + + // Log4J internal logging + builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG) + .add(builder.newAppenderRef("Stdout")) + .addAttribute("additivity", false)); + + + // LOGFILE appender + + LayoutComponentBuilder logfileLayout = builder.newLayout("PatternLayout") + .addAttribute("pattern", LOG_PATTERN); + + ComponentBuilder triggeringPolicy = builder.newComponent("Policies") + .addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule", "0 0 0 * * ?")) + .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "100M")); + + AppenderComponentBuilder logsAppenderBuilder = + builder.newAppender("LOGS_APPENDER", RollingFileAppender.PLUGIN_NAME) + .addAttribute("fileName", "logs/irengine.log") + .addAttribute("filePattern", "logs/irengine-%d{MM-dd-yy}.log.gz") + .addAttribute("append", true) + .add(logfileLayout) + .addComponent(triggeringPolicy); + builder.add(logsAppenderBuilder); + +// LoggerComponentBuilder payloadBuilder = +// builder.newLogger(PAYLOADS, Level.TRACE) +// .addAttribute("additivity", false); +// +// +// if (consoleConfig.isPaylaodsEnabled()) { +// payloadBuilder = payloadBuilder.add(builder.newAppenderRef("Stdout").addAttribute("level", +// consoleConfig.getLogLevel())); +// } +// if (fileConfig.isPaylaodsEnabled()) { +// payloadBuilder = payloadBuilder.add(builder.newAppenderRef("LOGS_APPENDER").addAttribute("level", +// fileConfig.getLogLevel())); +// } +// builder.add(payloadBuilder); + + +// LoggerComponentBuilder stacktracesBuilder = +// builder.newLogger(STACKTRACES, Level.TRACE) +// .addAttribute("additivity", false); +// if (consoleConfig.isStackTracesEnabled()) { +// stacktracesBuilder = payloadBuilder.add(builder.newAppenderRef("Stdout").addAttribute("level", +// consoleConfig.getLogLevel())); +// } +// if (fileConfig.isStackTracesEnabled()) { +// stacktracesBuilder = payloadBuilder.add(builder.newAppenderRef("LOGS_APPENDER").addAttribute("level", +// fileConfig.getLogLevel())); +// } +// builder.add(stacktracesBuilder); + + // ROOT logging and appender + builder.add( + builder.newRootLogger(ROOT_LOG_LEVEL) + .add( + builder.newAppenderRef("Stdout") + .addAttribute("level", Level.valueOf(consoleLevel.toString())) + ) + .add( + builder.newAppenderRef("LOGS_APPENDER") + .addAttribute("level", Level.valueOf(fileLevel.toString())) + ) + ); + + + return builder.build(); + } + + @Override + public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) { + return getConfiguration(loggerContext, source.toString(), null); + } + + @Override + public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) { + ConfigurationBuilder builder = newConfigurationBuilder(); + return createConfiguration(name, builder); + } + + @Override + protected String[] getSupportedTypes() { + return new String[]{"*"}; + } +} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java new file mode 100644 index 000000000..3cc0b6a9a --- /dev/null +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java @@ -0,0 +1,27 @@ +package io.nosqlbench.engine.core.logging; + +import io.nosqlbench.nb.api.logging.NBLogLevel; +import org.apache.logging.log4j.Logger; + +import java.nio.file.Path; +import java.util.Map; + +public interface ScenarioLogger { + + ScenarioLogger setLogDir(Path logDir); + + Path getLogDir(); + + ScenarioLogger setMaxLogs(int maxLogfiles); + + void purgeOldFiles(Logger logger); + + ScenarioLogger setLevel(NBLogLevel levelname); + + NBLogLevel getLevel(); + + ScenarioLogger start(); + + ScenarioLogger setLogLevelOverrides(Map logLevelOverrides); + +} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java new file mode 100644 index 000000000..d34221691 --- /dev/null +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java @@ -0,0 +1,204 @@ +package io.nosqlbench.engine.core.logging; + +import io.nosqlbench.nb.api.logging.NBLogLevel; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.apache.logging.log4j.core.config.Configurator; +import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder; +import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder; +import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory; +import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder; +import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; +import org.apache.logging.log4j.spi.LoggerContext; + +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.stream.Collectors; + +public class SessionLogConfig implements ScenarioLogger { + + // private static final String LOG_PATTERN = "%d{DEFAULT}{GMT} [%t] %-5level: %msg%n"; + private static final String DEFAULT_CONSOLE_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable"; + private final String session; + private String consolePattern = DEFAULT_CONSOLE_PATTERN; + // private final Scenario scenario; + private Path loggerDir = Path.of("logs"); + private NBLogLevel logLevel; + private int maxLogfiles = 100; + private Map logLevelOverrides = new LinkedHashMap<>(); + + public SessionLogConfig(String session) { + this.session = session; + } + + public ScenarioLogger setConsolePattern(String consolePattern) { + this.consolePattern = consolePattern; + return this; + } + + public String getConsolePattern() { + return consolePattern; + } + + public void configure() { + ConfigurationBuilder builder = ConfigurationBuilderFactory.newConfigurationBuilder(); + builder.setStatusLevel(Level.WARN); + + builder.setConfigurationName("ScenarioLogger"); + + // Append simple format to stdout + + AppenderComponentBuilder appenderBuilder = + builder.newAppender("console", "CONSOLE") + .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT); + + appenderBuilder.add(builder.newLayout("PatternLayout") + .addAttribute("pattern", consolePattern)); + + builder.add(appenderBuilder); + + +// create a rolling file appender + + Path scenarioLog = composeSessionLogName(loggerDir, session); + + LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout") +// .addAttribute("pattern", "%d [%t] %-5level: %msg%n"); + .addAttribute("pattern", "%date %level [%thread] %logger{10} [%file:%line] %msg%n"); + + appenderBuilder = builder.newAppender("scenariolog", "File") + .addAttribute("fileName", scenarioLog.getFileName()) + .addAttribute("append", false) + .add(layoutBuilder); + builder.add(appenderBuilder); + + // Assemble the scenario logger instance + Level level = Level.valueOf(logLevel.toString()); + builder.add(builder.newRootLogger(level) + .add(builder.newAppenderRef("console")) + .add(builder.newAppenderRef("scenariolog")) + .addAttribute("additivity", true)); + + logLevelOverrides.forEach((k, v) -> { + Level olevel = Level.valueOf(v); + builder.add(builder.newLogger(k, olevel) + .add(builder.newAppenderRef("console")) + .add(builder.newAppenderRef("scenariolog")) + .addAttribute("additivity", true)); + }); + + LoggerContext ctx = Configurator.initialize(builder.build()); + } + + public static Path composeSessionLogName(Path loggerDir, String session) { + String logfilePath = loggerDir.toString() + File.separator + ".log"; + Path resolved = loggerDir.resolve(session.replaceAll("\\s", "_") + ".log"); + return resolved; + } + + @Override + public ScenarioLogger setLogDir(Path logDir) { + this.loggerDir = logDir; + return this; + } + + @Override + public Path getLogDir() { + return this.loggerDir; + } + + @Override + public ScenarioLogger setMaxLogs(int maxLogfiles) { + this.maxLogfiles = maxLogfiles; + return this; + } + + @Override + public void purgeOldFiles(Logger logger) { + if (maxLogfiles == 0) { + logger.debug("Not purging old files, since maxLogFiles is 0."); + return; + } + + + File[] files = loggerDir.toFile().listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.getPath().endsWith(".log"); + } + }); + if (files == null) { + return; + } + + List filesList = Arrays.asList(files); + int remove = filesList.size() - maxLogfiles; + if (remove <= 0) { + return; + } + + List toDelete = filesList.stream() + .sorted(fileTimeComparator) + .limit(remove) + .collect(Collectors.toList()); + + for (File file : toDelete) { + logger.info("removing extra logfile: " + file.getPath()); + if (!file.delete()) { + logger.warn("unable to delete: " + file); + try { + Files.delete(file.toPath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + + private static final Comparator fileTimeComparator = new Comparator() { + @Override + public int compare(File o1, File o2) { + return Long.compare(o1.lastModified(), o2.lastModified()); + } + }; + + @Override + public ScenarioLogger setLevel(NBLogLevel levelname) { + this.logLevel = levelname; + return this; + } + + @Override + public NBLogLevel getLevel() { + return logLevel; + } + + @Override + public ScenarioLogger start() { + if (!Files.exists(loggerDir)) { + try { + Files.createDirectories(loggerDir); + } catch (Exception e) { + throw new RuntimeException("Unable to create logger directory:" + loggerDir); + } + } + + configure(); + org.apache.logging.log4j.Logger logger = LogManager.getLogger("LOGGER"); + + purgeOldFiles(logger); + return this; + } + + @Override + public ScenarioLogger setLogLevelOverrides(Map logLevelOverrides) { + this.logLevelOverrides = logLevelOverrides; + return this; + } +} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java index 566302dfb..26a8ab152 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java @@ -48,7 +48,11 @@ public class ScenariosExecutor { } public synchronized void execute(Scenario scenario) { - execute(scenario, new ScenarioLogger(scenario).setLogDir("logs").setMaxLogs(0)); + ScenarioLogger logs = new SessionLogConfig(scenario.getScenarioName()) + .setLogDir(Path.of("logs")) + .setMaxLogs(0) + .start(); + execute(scenario, logs); } public synchronized void execute(Scenario scenario, ScenarioLogger scenarioLogger) { diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java index d0d734a1e..37e822d81 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java @@ -68,7 +68,10 @@ public class AsyncScriptIntegrationTests { } s.addScriptText(script); // s.addScriptText("load('classpath:scripts/async/" + scriptname + ".js');"); - ScenarioLogger scenarioLogger = new ScenarioLogger(s).setMaxLogs(0).setLogDir("logs/test").start(); + ScenarioLogger scenarioLogger = new SessionLogConfig(scenarioName) + .setMaxLogs(0) + .setLogDir(Path.of("logs/test")) + .start(); e.execute(s, scenarioLogger); ScenariosResults scenariosResults = e.awaitAllResults(); ScenarioResult scenarioResult = scenariosResults.getOne(); From a88d03760d4c94ccff49129d478bac141bd165b7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:29:45 -0600 Subject: [PATCH 032/164] docker-metrics improvements --- .../src/main/java/io/nosqlbench/engine/cli/NBCLI.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 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 14c2d50a1..5549ae556 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 @@ -87,10 +87,11 @@ public class NBCLI { String dockerMetricsAt = globalOptions.wantsDockerMetricsAt(); String reportGraphiteTo = globalOptions.wantsReportGraphiteTo(); int mOpts = (dockerMetrics ? 1 : 0) + (dockerMetricsAt != null ? 1 : 0) + (reportGraphiteTo != null ? 1 : 0); - if (mOpts > 1) { + if (mOpts > 1 && (reportGraphiteTo == null || annotatorsConfig == null)) { throw new BasicError("You have multiple conflicting options which attempt to set\n" + " the destination for metrics and annotations. Please select only one of\n" + - " --docker-metrics, --docker-metrics-at , or --report-graphite-to \n" + + " --docker-metrics, --docker-metrics-at , or other options like \n" + + " --report-graphite-to and --annotators \n" + " For more details, see run 'nb help docker-metrics'"); } @@ -114,7 +115,8 @@ public class NBCLI { if (metricsAddr != null) { reportGraphiteTo = metricsAddr + ":9109"; - Annotators.init("{type:'grafana',url:'http://" + metricsAddr + ":3000/'}"); + annotatorsConfig = "[{type:'log'},{type:'grafana',baseurl:'http://" + metricsAddr + ":3000/'," + + "tags:'appname:nosqlbench',timeoutms:5000,onerror:'warn'}]"; } if (args.length > 0 && args[0].toLowerCase().equals("virtdata")) { From 67eefbbebbdea2b193762fcb894708943b2e765e Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:29:53 -0600 Subject: [PATCH 033/164] fix activity run state bug --- .../java/io/nosqlbench/engine/core/ActivityExecutor.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java index e0fb0a911..daa80c130 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java @@ -108,12 +108,13 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen public synchronized void stopActivity() { activitylogger.debug("STOP/before alias=(" + activity.getAlias() + ")"); - activity.setRunState(RunState.Stopped); + activity.setRunState(RunState.Stopping); logger.info("stopping activity in progress: " + this.getActivityDef().getAlias()); motors.forEach(Motor::requestStop); motors.forEach(m -> awaitRequiredMotorState(m, 30000, 50, RunState.Stopped, RunState.Finished)); activity.shutdownActivity(); activity.closeAutoCloseables(); + activity.setRunState(RunState.Stopped); logger.info("stopped: " + this.getActivityDef().getAlias() + " with " + motors.size() + " slots"); activitylogger.debug("STOP/after alias=(" + activity.getAlias() + ")"); @@ -181,7 +182,6 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen public boolean requestStopExecutor(int secondsToWait) { activitylogger.debug("REQUEST STOP/before alias=(" + activity.getAlias() + ")"); - activity.setRunState(RunState.Stopped); logger.info("Stopping executor for " + activity.getAlias() + " when work completes."); @@ -200,6 +200,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen activity.shutdownActivity(); logger.trace("closing auto-closeables"); activity.closeAutoCloseables(); + activity.setRunState(RunState.Stopped); } if (stoppingException != null) { logger.trace("an exception caused the activity to stop:" + stoppingException.getMessage()); From 6a523dc48405efcb035d6689bf19fd756ce5e4a9 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:30:06 -0600 Subject: [PATCH 034/164] remove slf4j --- driver-diag/pom.xml | 5 ----- driver-kafka/pom.xml | 24 ++++++++++++------------ engine-api/pom.xml | 10 ---------- engine-cli/pom.xml | 7 ------- engine-core/pom.xml | 5 ----- engine-rest/pom.xml | 6 ------ mvn-defaults/pom.xml | 37 ++++++++++++++++++------------------- nb-annotations/pom.xml | 10 ---------- nb-api/pom.xml | 10 ---------- 9 files changed, 30 insertions(+), 84 deletions(-) diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 876af26e0..adb9200d2 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -29,11 +29,6 @@ 3.12.155-SNAPSHOT
- - org.slf4j - slf4j-api - - diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 63fe03ed0..d4d9d6bc6 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -43,21 +43,21 @@ io.nosqlbench - engine-api - 3.12.155-SNAPSHOT + engine-api + 3.12.155-SNAPSHOT - - io.nosqlbench - driver-stdout - 3.12.155-SNAPSHOT - + + io.nosqlbench + driver-stdout + 3.12.155-SNAPSHOT + - - org.slf4j - slf4j-api - 1.7.25 - + + + + + diff --git a/engine-api/pom.xml b/engine-api/pom.xml index cc264b70b..df0d69b2f 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -49,16 +49,6 @@ graal-sdk
- - org.slf4j - slf4j-api - - - - ch.qos.logback - logback-classic - - io.dropwizard.metrics metrics-core diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index a5e010a26..ddc1efb6d 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -32,13 +32,6 @@ 3.12.155-SNAPSHOT - - ch.qos.logback - logback-classic - 1.2.3 - - - diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 12a95183f..ef918eec9 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -37,11 +37,6 @@ 3.12.155-SNAPSHOT
- - ch.qos.logback - logback-classic - - io.dropwizard.metrics metrics-core diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index cccec2954..8ed0d58e9 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -50,12 +50,6 @@ 3.12.155-SNAPSHOT - - ch.qos.logback - logback-classic - 1.2.3 - - diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 97cb7bfb4..7d44e8a69 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -40,8 +40,7 @@ 1.22 2.9.9 5.3.2 - 2.13.3 - 1.2.3 + 1.4.1 1.1.0 4.0.7 @@ -50,7 +49,7 @@ 4.1.47.Final 1.0.0 - 1.7.29 + 1.23 1.1.2.6 @@ -152,15 +151,15 @@ io.dropwizard.metrics - metrics-core - ${metrics.version} + metrics-core + ${metrics.version} - - org.apache.commons - commons-text - ${commons.text.version} - + + org.apache.commons + commons-text + ${commons.text.version} + org.slf4j @@ -168,15 +167,15 @@ ${slf4j.version} - - org.openjdk.jmh - jmh-core - ${jmh.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 9ea4bb229..75ed9dbaf 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -21,16 +21,6 @@ - - org.slf4j - slf4j-api - - - - ch.qos.logback - logback-classic - - org.apache.commons diff --git a/nb-api/pom.xml b/nb-api/pom.xml index f00001771..19f3d3eb9 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -34,16 +34,6 @@ 3.12.155-SNAPSHOT - - org.slf4j - slf4j-api - - - - ch.qos.logback - logback-classic - - com.vladsch.flexmark flexmark-ext-yaml-front-matter From a09efbe9948ba5cccdc073517d66125c98566165 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:30:20 -0600 Subject: [PATCH 035/164] consolidate to log4j2 --- .../cql/codecsupport/UDTCodecInjector.java | 10 +- .../cql/codecsupport/UserCodecProvider.java | 8 +- .../activitytype/cql/core/CQLOptions.java | 6 +- .../activitytype/cql/core/CqlAction.java | 6 +- .../activitytype/cql/core/CqlActivity.java | 6 +- .../activitytype/cql/core/CqlAsyncAction.java | 6 +- .../long_string/ModuloCSVLineToUUID.java | 10 +- .../functions/to_tuple/CustomFunc955.java | 8 +- .../cql/errorhandling/CQLExceptionEnum.java | 8 +- .../errorhandling/HashedCQLErrorHandler.java | 10 +- .../errorhandling/NBCycleErrorHandler.java | 10 +- .../binders/DiagnosticPreparedBinder.java | 6 +- .../binders/DirectArrayValuesBinder.java | 6 +- .../binders/UnsettableValuesBinder.java | 6 +- .../cql/statements/core/CQLSessionCache.java | 6 +- .../cql/statements/core/CQLStatementDef.java | 6 +- .../core/CQLStatementDefParser.java | 18 +- .../core/ReadyCQLStatementTemplate.java | 6 +- .../core/YamlCQLStatementLoader.java | 10 +- .../cql/statements/rowoperators/Save.java | 6 +- .../rsoperators/CqlResultSetLogger.java | 6 +- .../statements/rsoperators/TraceLogger.java | 8 +- .../cqld4/codecsupport/UDTCodecInjector.java | 8 +- .../cqld4/codecsupport/UserCodecProvider.java | 8 +- .../activitytype/cqld4/core/CQLOptions.java | 2 +- .../activitytype/cqld4/core/CqlAction.java | 6 +- .../activitytype/cqld4/core/CqlActivity.java | 6 +- .../cqld4/core/CqlAsyncAction.java | 6 +- .../cqld4/errorhandling/CQLExceptionEnum.java | 16 +- .../errorhandling/HashedCQLErrorHandler.java | 10 +- .../errorhandling/NBCycleErrorHandler.java | 6 +- .../binders/DiagnosticPreparedBinder.java | 6 +- .../binders/DirectArrayValuesBinder.java | 6 +- .../binders/UnsettableValuesBinder.java | 8 +- .../statements/core/CQLSessionCache.java | 10 +- .../statements/core/CQLStatementDef.java | 6 +- .../core/CQLStatementDefParser.java | 18 +- .../core/ReadyCQLStatementTemplate.java | 6 +- .../core/YamlCQLStatementLoader.java | 6 +- .../cqld4/statements/rowoperators/Save.java | 8 +- .../rsoperators/CqlD4ResultSetLogger.java | 6 +- .../statements/rsoperators/TraceLogger.java | 8 +- .../cqlverify/CqlVerifyActivity.java | 6 +- .../activitytype/diag/AsyncDiagAction.java | 10 +- .../activitytype/diag/DiagAction.java | 8 +- .../diag/DiagActionDispenser.java | 9 +- .../activitytype/diag/DiagActivityType.java | 6 +- .../activitytype/diag/SequenceBlocker.java | 6 +- .../activitytype/http/HttpAction.java | 6 +- .../activitytype/http/HttpActivity.java | 6 +- .../activitytype/http/HttpActivityType.java | 6 +- .../http/async/HttpAsyncAction.java | 6 +- .../io/nosqlbench/driver/jmx/JMXAction.java | 6 +- .../io/nosqlbench/driver/jmx/SecureUtils.java | 7 +- .../io/nosqlbench/driver/jmx/ops/JmxOp.java | 6 +- .../ebdrivers/kafkaproducer/KafkaAction.java | 6 +- .../kafkaproducer/KafkaProducerActivity.java | 18 +- .../kafkaproducer/KafkaStatement.java | 6 +- .../driver/mongodb/MongoAction.java | 6 +- .../driver/mongodb/MongoActivity.java | 6 +- .../mongodb/ReadyMongoStatementTest.java | 30 +- .../stdout/AsyncStdoutAction.java | 6 +- .../activitytype/stdout/StdoutAction.java | 20 +- .../activitytype/stdout/StdoutActivity.java | 6 +- .../tcpclient/TCPClientActivity.java | 6 +- .../tcpserver/TCPServerActivity.java | 12 +- .../driver/webdriver/WebContext.java | 10 +- .../driver/webdriver/WebDriverAction.java | 8 +- .../driver/webdriver/WebDriverActivity.java | 13 +- .../driver/webdriver/verbs/AssertElement.java | 9 +- .../driver/webdriver/verbs/FindElement.java | 7 +- .../driver/webdriver/verbs/FindElements.java | 7 +- .../driver/webdriver/verbs/Get.java | 6 +- .../webdriver/verbs/WebDriverVerbs.java | 6 +- .../api/activityapi/core/BaseAsyncAction.java | 6 +- .../CycleResultsRLEBufferTarget.java | 12 +- .../tristate/EnumReadableMappingFilter.java | 8 +- .../inputs/cyclelog/CycleLogInput.java | 6 +- .../ReorderingConcurrentResultBuffer.java | 10 +- .../outputs/cyclelog/CycleLogOutput.java | 10 +- .../outputs/cyclelog/CycleLogOutputType.java | 8 +- .../logger/LoggingMarkerDispenser.java | 8 +- .../outputs/logger/LoggingOutput.java | 8 +- .../errorhandling/CycleErrorHandlers.java | 6 +- .../errorhandling/HashedErrorHandler.java | 12 +- .../activityapi/planning/SequencePlanner.java | 6 +- .../ratelimits/HybridRateLimiter.java | 8 +- .../activityapi/ratelimits/RateLimiters.java | 6 +- .../api/activityapi/ratelimits/RateSpec.java | 11 +- .../activityapi/ratelimits/TokenFiller.java | 8 +- .../api/activityapi/ratelimits/TokenPool.java | 6 +- .../api/activityapi/sysperf/SysPerf.java | 6 +- .../activityapi/sysperf/SysPerfBaseliner.java | 6 +- .../engine/api/activityconfig/ParsedStmt.java | 6 +- .../api/activityconfig/StatementsLoader.java | 6 +- .../activityconfig/rawyaml/RawStmtFields.java | 6 +- .../rawyaml/RawStmtsLoader.java | 2 +- .../engine/api/activityimpl/ActivityDef.java | 10 +- .../engine/api/activityimpl/CpuInfo.java | 6 +- .../engine/api/activityimpl/ParameterMap.java | 8 +- .../api/activityimpl/SimpleActivity.java | 6 +- .../api/activityimpl/SlotStateTracker.java | 6 +- .../api/activityimpl/action/CoreAction.java | 6 +- .../action/CoreActionDispenser.java | 8 +- .../api/activityimpl/input/AtomicInput.java | 6 +- .../marker/ContiguousOutputChunker.java | 20 +- .../api/activityimpl/motor/CoreMotor.java | 16 +- .../api/activityimpl/motor/StrideTracker.java | 6 +- .../api/extensions/ScriptingPluginInfo.java | 2 +- .../engine/api/metrics/ActivityMetrics.java | 10 +- .../api/metrics/ClassicHistoListener.java | 18 +- .../api/metrics/ClassicTimerListener.java | 18 +- .../metrics/DeltaHdrHistogramReservoir.java | 8 +- .../api/metrics/HistoIntervalLogger.java | 14 +- .../api/metrics/HistoLogChartGenerator.java | 8 +- .../api/metrics/HistoStatsCSVWriter.java | 6 +- .../engine/api/metrics/HistoStatsLogger.java | 14 +- .../engine/api/metrics/PeriodicRunnable.java | 10 +- .../api/scenarios/NBCLIScenarioParser.java | 6 +- .../api/scripting/NashornEvaluator.java | 6 +- .../api/templating/CommandTemplate.java | 8 +- .../engine/api/util/SSLKsFactory.java | 6 +- .../engine/api/util/SimpleServiceLoader.java | 6 +- .../io/nosqlbench/engine/api/util/Unit.java | 26 +- .../rawyaml/BindingEscapingTest.java | 6 +- .../rawyaml/RawYamlStatementLoaderTest.java | 6 +- .../activityconfig/rawyaml/StmtDefTest.java | 6 +- .../rawyaml/StmtEscapingTest.java | 6 +- .../rawyaml/StmtVariationTests.java | 6 +- .../activityconfig/yaml/ParsedStmtTest.java | 6 +- .../yaml/StmtDetailOverrideTest.java | 6 +- .../activityconfig/yaml/StmtsDocListTest.java | 12 +- .../engine/cli/BasicScriptBuffer.java | 6 +- .../java/io/nosqlbench/engine/cli/Cmd.java | 6 +- .../java/io/nosqlbench/engine/cli/NBCLI.java | 11 +- .../nosqlbench/engine/cli/NBCLIArgsFile.java | 7 +- .../nosqlbench/engine/cli/NBCLIOptions.java | 9 +- .../engine/cli/PathCanonicalizer.java | 6 +- .../engine/core/ActivityExecutor.java | 8 +- .../core/ActivityProgressIndicator.java | 6 +- .../engine/core/MarkdownDocInfo.java | 12 +- .../core/PolyglotScenarioController.java | 7 +- .../engine/core/ScenarioController.java | 8 +- .../engine/core/ScenarioErrorHandler.java | 6 +- .../engine/core/ScenarioResult.java | 10 +- .../engine/core/ScenariosResults.java | 6 +- .../core/logging/Log4JMetricsReporter.java | 418 ++++++++++++++++++ .../engine/core/metrics/MetricMap.java | 6 +- .../engine/core/metrics/MetricReporters.java | 12 +- .../NashornMetricRegistryBindings.java | 10 +- .../PolyglotMetricRegistryBindings.java | 8 +- .../engine/core/script/MetricsMapper.java | 12 +- .../engine/core/script/Scenario.java | 33 +- .../engine/core/script/ScenariosExecutor.java | 14 +- .../engine/core/script/ScriptParams.java | 9 +- .../engine/core/ActivityExecutorTest.java | 8 +- .../engine/docker/DockerHelper.java | 6 +- .../engine/docker/DockerMetricsManager.java | 6 +- .../nosqlbench/engine/docker/RestHelper.java | 7 +- .../extensions/csvmetrics/CSVMetrics.java | 4 +- .../csvmetrics/CSVMetricsPlugin.java | 2 +- .../csvmetrics/CSVMetricsPluginData.java | 2 +- .../extensions/example/ExamplePluginData.java | 2 +- .../files/FileAccessPluginData.java | 2 +- .../GlobalVarsScriptingPluginData.java | 2 +- .../histologger/HdrHistoLogPlugin.java | 8 +- .../histologger/HdrHistoLogPluginData.java | 2 +- .../histostatslogger/HistoStatsPlugin.java | 8 +- .../HistoStatsPluginData.java | 2 +- .../extensions/http/HttpPluginData.java | 3 +- .../optimizers/BobyqaOptimizerInstance.java | 4 +- .../optimizers/BobyqaOptimizerPlugin.java | 2 +- .../optimizers/BobyqaOptimizerPluginData.java | 2 +- .../optimizers/MultivariateArrayScript.java | 4 +- .../optimizers/MultivariateDynamicScript.java | 4 +- .../NashornMultivariateObjectScript.java | 4 +- .../PolyglotMultivariateObjectScript.java | 2 +- .../scriptingmetrics/ScriptingMetrics.java | 8 +- .../ScriptingMetricsPluginData.java | 2 +- .../resources/ScenarioExecutorEndpoint.java | 36 +- mvn-defaults/pom.xml | 20 +- .../io/nosqlbench/nb/api/config/Synonyms.java | 2 +- .../nosqlbench/nb/api/content/PathFinder.java | 6 +- .../nb/api/content/ResolverForURL.java | 8 +- .../script/AsyncScriptIntegrationTests.java | 3 +- .../core/script/NBCliIntegrationTests.java | 6 +- .../core/script/ScriptIntegrationTests.java | 9 +- 187 files changed, 1153 insertions(+), 756 deletions(-) create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/logging/Log4JMetricsReporter.java diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UDTCodecInjector.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UDTCodecInjector.java index c2fb720c9..85acc8973 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UDTCodecInjector.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UDTCodecInjector.java @@ -3,18 +3,18 @@ package io.nosqlbench.activitytype.cql.codecsupport; import com.datastax.driver.core.CodecRegistry; import com.datastax.driver.core.Session; import com.datastax.driver.core.UserType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.List; import java.util.ServiceLoader; public class UDTCodecInjector { - private final static Logger logger = LoggerFactory.getLogger(UDTCodecInjector.class); + private final static Logger logger = LogManager.getLogger(UDTCodecInjector.class); - private List codecProviders = new ArrayList<>(); - private List userTypes = new ArrayList<>(); + private final List codecProviders = new ArrayList<>(); + private final List userTypes = new ArrayList<>(); public void injectUserProvidedCodecs(Session session, boolean allowAcrossKeyspaces) { diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UserCodecProvider.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UserCodecProvider.java index 3a9cb4efa..d9998ed27 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UserCodecProvider.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/codecsupport/UserCodecProvider.java @@ -1,8 +1,8 @@ package io.nosqlbench.activitytype.cql.codecsupport; import com.datastax.driver.core.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.lang.reflect.Constructor; import java.util.*; @@ -10,7 +10,7 @@ import java.util.stream.Collectors; public abstract class UserCodecProvider { - private final static Logger logger = LoggerFactory.getLogger(UserCodecProvider.class); + private final static Logger logger = LogManager.getLogger(UserCodecProvider.class); public List registerCodecsForCluster( Session session, @@ -131,7 +131,7 @@ public abstract class UserCodecProvider { .orElseThrow( () -> new RuntimeException("Unable to find UDTJavaType annotation for " + codecClass.getCanonicalName()) ); - return (Class) javaType; + return javaType; } diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CQLOptions.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CQLOptions.java index 660bc5fc5..27fbd5b29 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CQLOptions.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CQLOptions.java @@ -4,8 +4,8 @@ import com.datastax.driver.core.*; import com.datastax.driver.core.policies.*; import io.netty.util.HashedWheelTimer; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.net.InetSocketAddress; import java.util.*; @@ -16,7 +16,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; public class CQLOptions { - private final static Logger logger = LoggerFactory.getLogger(CQLOptions.class); + private final static Logger logger = LogManager.getLogger(CQLOptions.class); private final static Pattern CORE_AND_MAX_RQ_PATTERN = Pattern.compile("(?\\d+)(:(?\\d+)(:(?\\d+))?)?(,(?\\d+)(:(?\\d+)(:(?\\d+))?)?)?(,?heartbeat_interval_s:(?\\d+))?(,?idle_timeout_s:(?\\d+))?(,?pool_timeout_ms:(?\\d+))?"); private final static Pattern PERCENTILE_EAGER_PATTERN = Pattern.compile("^p(?[^:]+)(:(?\\d+))?(:(?\\d+)ms)?$"); diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAction.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAction.java index 7ce4c6107..04613f3f8 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAction.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAction.java @@ -19,8 +19,8 @@ import io.nosqlbench.engine.api.activityapi.core.MultiPhaseAction; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; import java.util.concurrent.TimeUnit; @@ -28,7 +28,7 @@ import java.util.concurrent.TimeUnit; @SuppressWarnings("Duplicates") public class CqlAction implements SyncAction, MultiPhaseAction, ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(CqlAction.class); + private final static Logger logger = LogManager.getLogger(CqlAction.class); private final int slot; private final CqlActivity cqlActivity; private final ActivityDef activityDef; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java index 5aa718fd8..23f0f9ece 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java @@ -44,8 +44,8 @@ import io.nosqlbench.engine.api.util.TagFilter; import io.nosqlbench.engine.api.util.Unit; import io.nosqlbench.nb.api.errors.BasicError; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.FileWriter; import java.io.IOException; @@ -56,7 +56,7 @@ import java.util.*; @SuppressWarnings("Duplicates") public class CqlActivity extends SimpleActivity implements Activity, ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(CqlActivity.class); + private final static Logger logger = LogManager.getLogger(CqlActivity.class); private final ExceptionCountMetrics exceptionCountMetrics; private final ExceptionHistoMetrics exceptionHistoMetrics; private final ActivityDef activityDef; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAsyncAction.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAsyncAction.java index 43f16f7ef..695b7852e 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAsyncAction.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlAsyncAction.java @@ -23,8 +23,8 @@ import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.SucceededOp import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.TrackedOp; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; import java.util.concurrent.TimeUnit; @@ -33,7 +33,7 @@ import java.util.function.LongFunction; @SuppressWarnings("Duplicates") public class CqlAsyncAction extends BaseAsyncAction { - private final static Logger logger = LoggerFactory.getLogger(CqlAsyncAction.class); + private final static Logger logger = LogManager.getLogger(CqlAsyncAction.class); private final ActivityDef activityDef; private List rowOps; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/long_string/ModuloCSVLineToUUID.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/long_string/ModuloCSVLineToUUID.java index 838c329fa..9af56f0f4 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/long_string/ModuloCSVLineToUUID.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/long_string/ModuloCSVLineToUUID.java @@ -25,8 +25,8 @@ import io.nosqlbench.virtdata.api.annotations.ThreadSafeMapper; import io.nosqlbench.virtdata.library.basics.shared.from_long.to_string.ModuloLineToString; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.List; @@ -40,11 +40,11 @@ import java.util.function.LongFunction; */ @ThreadSafeMapper public class ModuloCSVLineToUUID implements LongFunction { - private final static Logger logger = LoggerFactory.getLogger(ModuloLineToString.class); + private final static Logger logger = LogManager.getLogger(ModuloLineToString.class); - private List lines = new ArrayList<>(); + private final List lines = new ArrayList<>(); - private String filename; + private final String filename; @Example({"ModuloCSVLineToUUID('data/myfile.csv','lat')","load values for 'lat' from the CSV file myfile.csv."}) public ModuloCSVLineToUUID(String filename, String fieldname) { diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/to_tuple/CustomFunc955.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/to_tuple/CustomFunc955.java index b3e359c87..c3d80306c 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/to_tuple/CustomFunc955.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/datamappers/functions/to_tuple/CustomFunc955.java @@ -71,8 +71,8 @@ public class CustomFunc955 implements LongFunction>, ConfigAware { } @Override - public void applyConfig(Map elements) { - this.cluster = Optional.ofNullable(elements.get("cluster")) + public void applyConfig(Map providedConfig) { + this.cluster = Optional.ofNullable(providedConfig.get("cluster")) .map(Cluster.class::cast) .orElseThrow(); this.tupleType = cluster.getMetadata().newTupleType(DataType.cint(), DataType.bigint()); @@ -80,8 +80,8 @@ public class CustomFunc955 implements LongFunction>, ConfigAware { @Override public ConfigModel getConfigModel() { - return new MutableConfigModel() - .add("", Cluster.class) + return new MutableConfigModel(this) + .optional("", Cluster.class) .asReadOnly(); } } diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/CQLExceptionEnum.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/CQLExceptionEnum.java index 0e5723e45..83fe72e1f 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/CQLExceptionEnum.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/CQLExceptionEnum.java @@ -3,8 +3,8 @@ package io.nosqlbench.activitytype.cql.errorhandling; import com.datastax.driver.core.exceptions.*; import io.nosqlbench.activitytype.cql.errorhandling.exceptions.*; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.ResultReadable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.HashMap; @@ -64,10 +64,10 @@ public enum CQLExceptionEnum implements ResultReadable { EbdseCycleException(CqlGenericCycleException.class, 42), MaxTriesExhaustedException(io.nosqlbench.activitytype.cql.errorhandling.exceptions.MaxTriesExhaustedException.class,43); - private final static Logger logger = LoggerFactory.getLogger(CQLExceptionEnum.class); + private final static Logger logger = LogManager.getLogger(CQLExceptionEnum.class); private static Map codesByName = getCodesByName(); - private static String[] namesByCode = getNamesByCode(); + private static final String[] namesByCode = getNamesByCode(); private final Class exceptionClass; private final int resultCode; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/HashedCQLErrorHandler.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/HashedCQLErrorHandler.java index 2a4dcdc79..e23069ce2 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/HashedCQLErrorHandler.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/HashedCQLErrorHandler.java @@ -8,18 +8,18 @@ import io.nosqlbench.activitytype.cql.errorhandling.exceptions.RowVerificationEx import io.nosqlbench.engine.api.activityapi.errorhandling.CycleErrorHandler; import io.nosqlbench.engine.api.activityapi.errorhandling.HashedErrorHandler; import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class HashedCQLErrorHandler extends HashedErrorHandler { - private static final Logger logger = LoggerFactory.getLogger(HashedCQLErrorHandler.class); + private static final Logger logger = LogManager.getLogger(HashedCQLErrorHandler.class); // private static Set> UNVERIFIED_ERRORS = new HashSet>() {{ // add(RowVerificationException.class); // add(ResultSetVerificationException.class); // }}; - private ExceptionCountMetrics exceptionCountMetrics; - private static ThreadLocal tlResultCode = ThreadLocal.withInitial(() -> (0)); + private final ExceptionCountMetrics exceptionCountMetrics; + private static final ThreadLocal tlResultCode = ThreadLocal.withInitial(() -> (0)); public HashedCQLErrorHandler(ExceptionCountMetrics exceptionCountMetrics) { this.exceptionCountMetrics = exceptionCountMetrics; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/NBCycleErrorHandler.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/NBCycleErrorHandler.java index 43f36c6a1..88ed8e17d 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/NBCycleErrorHandler.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/errorhandling/NBCycleErrorHandler.java @@ -6,8 +6,8 @@ import io.nosqlbench.activitytype.cql.errorhandling.exceptions.CQLExceptionDetai import io.nosqlbench.engine.api.activityapi.errorhandling.CycleErrorHandler; import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics; import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * A contextualized error handler that can catch a cycle-specific error. @@ -42,10 +42,10 @@ import org.slf4j.LoggerFactory; @SuppressWarnings("Duplicates") public class NBCycleErrorHandler implements CycleErrorHandler { - private static final Logger logger = LoggerFactory.getLogger(NBCycleErrorHandler.class); + private static final Logger logger = LogManager.getLogger(NBCycleErrorHandler.class); - private ErrorResponse errorResponse; - private ExceptionCountMetrics exceptionCountMetrics; + private final ErrorResponse errorResponse; + private final ExceptionCountMetrics exceptionCountMetrics; private final ExceptionHistoMetrics exceptionHistoMetrics; private boolean throwExceptionOnStop=false; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DiagnosticPreparedBinder.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DiagnosticPreparedBinder.java index 2c7a2fe2f..238911192 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DiagnosticPreparedBinder.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DiagnosticPreparedBinder.java @@ -3,8 +3,8 @@ package io.nosqlbench.activitytype.cql.statements.binders; import com.datastax.driver.core.*; import io.nosqlbench.activitytype.cql.core.CQLBindHelper; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; @@ -15,7 +15,7 @@ import java.util.List; * order to explain in more detail what is happening for users. */ public class DiagnosticPreparedBinder implements ValuesArrayBinder { - public static final Logger logger = LoggerFactory.getLogger(DiagnosticPreparedBinder.class); + public static final Logger logger = LogManager.getLogger(DiagnosticPreparedBinder.class); @Override public Statement bindValues(PreparedStatement prepared, Object[] values) { ColumnDefinitions columnDefinitions = prepared.getVariables(); diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DirectArrayValuesBinder.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DirectArrayValuesBinder.java index 7d9a1aa3b..046781c24 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DirectArrayValuesBinder.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/DirectArrayValuesBinder.java @@ -3,8 +3,8 @@ package io.nosqlbench.activitytype.cql.statements.binders; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Statement; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Arrays; @@ -19,7 +19,7 @@ import java.util.Arrays; * will become the default. */ public class DirectArrayValuesBinder implements ValuesArrayBinder { - public final static Logger logger = LoggerFactory.getLogger(DirectArrayValuesBinder.class); + public final static Logger logger = LogManager.getLogger(DirectArrayValuesBinder.class); @Override public Statement bindValues(PreparedStatement preparedStatement, Object[] objects) { diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/UnsettableValuesBinder.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/UnsettableValuesBinder.java index 64fa5484c..5a8c1cc44 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/UnsettableValuesBinder.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/UnsettableValuesBinder.java @@ -3,14 +3,14 @@ package io.nosqlbench.activitytype.cql.statements.binders; import com.datastax.driver.core.*; import io.nosqlbench.virtdata.api.bindings.VALUE; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.nio.ByteBuffer; import java.util.List; public class UnsettableValuesBinder implements ValuesArrayBinder { - private final static Logger logger = LoggerFactory.getLogger(UnsettableValuesBinder.class); + private final static Logger logger = LogManager.getLogger(UnsettableValuesBinder.class); private final Session session; private final CodecRegistry codecRegistry; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java index a274bf451..db84e375e 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java @@ -14,8 +14,8 @@ import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.api.scripting.NashornEvaluator; import io.nosqlbench.engine.api.util.SSLKsFactory; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.net.ssl.SSLContext; import java.io.File; @@ -28,7 +28,7 @@ import java.util.*; public class CQLSessionCache implements Shutdownable { - private final static Logger logger = LoggerFactory.getLogger(CQLSessionCache.class); + private final static Logger logger = LogManager.getLogger(CQLSessionCache.class); private final static String DEFAULT_SESSION_ID = "default"; private static final CQLSessionCache instance = new CQLSessionCache(); private final Map sessionCache = new HashMap<>(); diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDef.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDef.java index 043cea6c6..27edcbb19 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDef.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDef.java @@ -1,14 +1,14 @@ package io.nosqlbench.activitytype.cql.statements.core; import com.datastax.driver.core.ConsistencyLevel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.stream.Collectors; public class CQLStatementDef { - private final static Logger logger = LoggerFactory.getLogger(CQLStatementDef.class); + private final static Logger logger = LogManager.getLogger(CQLStatementDef.class); private Map params = new HashMap<>(); private String name = ""; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDefParser.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDefParser.java index c82b124b0..7e4ddc076 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDefParser.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLStatementDefParser.java @@ -1,7 +1,7 @@ package io.nosqlbench.activitytype.cql.statements.core; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.regex.Matcher; @@ -9,7 +9,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; public class CQLStatementDefParser { - private final static Logger logger = LoggerFactory.getLogger(CQLStatementDefParser.class); + private final static Logger logger = LogManager.getLogger(CQLStatementDefParser.class); // private final static Pattern templateToken = Pattern.compile("<<(\\w+(:(.+?))?)>>"); private final static Pattern stmtToken = Pattern.compile("\\?(\\w+[-_\\d\\w]*)|\\{(\\w+[-_\\d\\w.]*)}"); private final static String UNSET_VALUE = "UNSET-VALUE"; @@ -93,9 +93,7 @@ public class CQLStatementDefParser { if (!namedBindings.contains(tokenName)) { missingBindings.add(tokenName); } else { - if (missingAnchors.contains(tokenName)) { - missingAnchors.remove(tokenName); - } + missingAnchors.remove(tokenName); } } @@ -114,11 +112,11 @@ public class CQLStatementDefParser { } public static class ParseResult { - private Set missingGenerators; - private Set missingAnchors; - private String statement; + private final Set missingGenerators; + private final Set missingAnchors; + private final String statement; private Map bindings; - private String name; + private final String name; public ParseResult(String stmt, String name, Map bindings, Set missingGenerators, Set missingAnchors) { this.missingGenerators = missingGenerators; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java index f76fc422e..6f5ad5813 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java @@ -15,15 +15,15 @@ import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.virtdata.core.bindings.BindingsTemplate; import io.nosqlbench.virtdata.core.bindings.ContextualBindingsArrayTemplate; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.Writer; import java.util.Map; public class ReadyCQLStatementTemplate { - private final static Logger logger = LoggerFactory.getLogger(ReadyCQLStatementTemplate.class); + private final static Logger logger = LogManager.getLogger(ReadyCQLStatementTemplate.class); private final Session session; private final ContextualBindingsArrayTemplate template; private final long ratio; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/YamlCQLStatementLoader.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/YamlCQLStatementLoader.java index ec2be1090..109772f73 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/YamlCQLStatementLoader.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/YamlCQLStatementLoader.java @@ -3,25 +3,21 @@ package io.nosqlbench.activitytype.cql.statements.core; import io.nosqlbench.engine.api.activityimpl.ActivityInitializationError; import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.yaml.snakeyaml.TypeDescription; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Function; -import java.util.stream.Collectors; @SuppressWarnings("ALL") public class YamlCQLStatementLoader { - private final static Logger logger = LoggerFactory.getLogger(YamlCQLStatementLoader.class); + private final static Logger logger = LogManager.getLogger(YamlCQLStatementLoader.class); List> transformers = new ArrayList<>(); public YamlCQLStatementLoader() { diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rowoperators/Save.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rowoperators/Save.java index 5517f622c..6fae4d104 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rowoperators/Save.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rowoperators/Save.java @@ -4,8 +4,8 @@ import com.datastax.driver.core.ColumnDefinitions; import com.datastax.driver.core.Row; import io.nosqlbench.activitytype.cql.api.RowCycleOperator; import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Arrays; import java.util.HashMap; @@ -16,7 +16,7 @@ import java.util.stream.Collectors; * Save specific variables to the thread local object map */ public class Save implements RowCycleOperator { - private final static Logger logger = LoggerFactory.getLogger(Save.class); + private final static Logger logger = LogManager.getLogger(Save.class); ThreadLocal> tl_objectMap = SharedState.tl_ObjectMap; diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/CqlResultSetLogger.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/CqlResultSetLogger.java index b7ee30db5..b4149e749 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/CqlResultSetLogger.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/CqlResultSetLogger.java @@ -2,15 +2,15 @@ package io.nosqlbench.activitytype.cql.statements.rsoperators; import com.datastax.driver.core.*; import io.nosqlbench.activitytype.cql.api.ResultSetCycleOperator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * Logs a trace-level event for the result set, including * cycles, rows, fetched row count, and the statement. */ public class CqlResultSetLogger implements ResultSetCycleOperator { - private final static Logger logger = LoggerFactory.getLogger(CqlResultSetLogger.class); + private final static Logger logger = LogManager.getLogger(CqlResultSetLogger.class); private static String getQueryString(Statement stmt) { if (stmt instanceof PreparedStatement) { diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/TraceLogger.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/TraceLogger.java index a432bd669..81f86a243 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/TraceLogger.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/rsoperators/TraceLogger.java @@ -7,8 +7,8 @@ import com.datastax.driver.core.Statement; import io.nosqlbench.activitytype.cql.api.ResultSetCycleOperator; import io.nosqlbench.activitytype.cql.statements.modifiers.StatementModifier; import io.nosqlbench.engine.api.util.SimpleConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.FileDescriptor; import java.io.FileWriter; @@ -18,9 +18,9 @@ import java.util.Date; public class TraceLogger implements ResultSetCycleOperator, StatementModifier { - private final static Logger logger = LoggerFactory.getLogger(TraceLogger.class); + private final static Logger logger = LogManager.getLogger(TraceLogger.class); - private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); + private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); private final long modulo; private final String filename; private final FileWriter writer; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UDTCodecInjector.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UDTCodecInjector.java index d5acdc7fa..76d94c59f 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UDTCodecInjector.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UDTCodecInjector.java @@ -2,17 +2,17 @@ package io.nosqlbench.activitytype.cqld4.codecsupport; import com.datastax.oss.driver.api.core.session.Session; import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.List; import java.util.ServiceLoader; public class UDTCodecInjector { - private final static Logger logger = LoggerFactory.getLogger(UDTCodecInjector.class); + private final static Logger logger = LogManager.getLogger(UDTCodecInjector.class); - private List codecProviders = new ArrayList<>(); + private final List codecProviders = new ArrayList<>(); public void injectUserProvidedCodecs(Session session, boolean allowAcrossKeyspaces) { diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UserCodecProvider.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UserCodecProvider.java index c0ea70137..4b02f6b8a 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UserCodecProvider.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/codecsupport/UserCodecProvider.java @@ -6,8 +6,8 @@ import com.datastax.oss.driver.api.core.type.UserDefinedType; import com.datastax.oss.driver.api.core.type.codec.TypeCodec; import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry; import com.datastax.oss.driver.api.core.type.codec.registry.MutableCodecRegistry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.lang.reflect.Constructor; import java.util.*; @@ -15,7 +15,7 @@ import java.util.stream.Collectors; public abstract class UserCodecProvider { - private final static Logger logger = LoggerFactory.getLogger(UserCodecProvider.class); + private final static Logger logger = LogManager.getLogger(UserCodecProvider.class); public List> registerCodecsForCluster( Session session, @@ -139,7 +139,7 @@ public abstract class UserCodecProvider { .orElseThrow( () -> new RuntimeException("Unable to find UDTJavaType annotation for " + codecClass.getCanonicalName()) ); - return (Class) javaType; + return javaType; } diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CQLOptions.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CQLOptions.java index 9143026a8..60262dad8 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CQLOptions.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CQLOptions.java @@ -1,7 +1,7 @@ package io.nosqlbench.activitytype.cqld4.core; public class CQLOptions { -// private final static Logger logger = LoggerFactory.getLogger(CQLOptions.class); +// private final static Logger logger = LogManager.getLogger(CQLOptions.class); // // private final static Pattern CORE_AND_MAX_RQ_PATTERN = Pattern.compile("(?\\d+)(:(?\\d+)(:(?\\d+))?)?(,(?\\d+)(:(?\\d+)(:(?\\d+))?)?)?(,?heartbeat_interval_s:(?\\d+))?(,?idle_timeout_s:(?\\d+))?(,?pool_timeout_ms:(?\\d+))?"); // private final static Pattern PERCENTILE_EAGER_PATTERN = Pattern.compile("^p(?[^:]+)(:(?\\d+))?(:(?\\d+)ms)?$"); diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAction.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAction.java index a23e7961c..00d370e93 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAction.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAction.java @@ -17,8 +17,8 @@ import io.nosqlbench.engine.api.activityapi.core.MultiPhaseAction; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; import java.util.concurrent.CompletionStage; @@ -27,7 +27,7 @@ import java.util.concurrent.TimeUnit; @SuppressWarnings("Duplicates") public class CqlAction implements SyncAction, MultiPhaseAction, ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(CqlAction.class); + private final static Logger logger = LogManager.getLogger(CqlAction.class); private final int slot; private final CqlActivity cqlActivity; private final ActivityDef activityDef; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivity.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivity.java index f6048798b..4e9cc05bf 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivity.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivity.java @@ -45,8 +45,8 @@ import io.nosqlbench.engine.api.util.SimpleConfig; import io.nosqlbench.engine.api.templating.StrInterpolator; import io.nosqlbench.engine.api.util.TagFilter; import io.nosqlbench.engine.api.util.Unit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.FileWriter; import java.io.IOException; @@ -57,7 +57,7 @@ import java.util.*; @SuppressWarnings("Duplicates") public class CqlActivity extends SimpleActivity implements Activity, ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(CqlActivity.class); + private final static Logger logger = LogManager.getLogger(CqlActivity.class); private final ExceptionCountMetrics exceptionCountMetrics; private final ExceptionHistoMetrics exceptionHistoMetrics; private final ActivityDef activityDef; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java index 1702eb60e..f00f6f2f2 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java @@ -22,8 +22,8 @@ import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.SucceededOp import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.TrackedOp; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; import java.util.concurrent.CompletionStage; @@ -33,7 +33,7 @@ import java.util.function.LongFunction; @SuppressWarnings("Duplicates") public class CqlAsyncAction extends BaseAsyncAction { - private final static Logger logger = LoggerFactory.getLogger(CqlAsyncAction.class); + private final static Logger logger = LogManager.getLogger(CqlAsyncAction.class); private final ActivityDef activityDef; private List rowOps; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/CQLExceptionEnum.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/CQLExceptionEnum.java index 5d4a81909..8968319a4 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/CQLExceptionEnum.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/CQLExceptionEnum.java @@ -1,18 +1,12 @@ package io.nosqlbench.activitytype.cqld4.errorhandling; -import com.datastax.dse.driver.api.core.servererrors.UnfitClientException; -import com.datastax.oss.driver.api.core.*; +import com.datastax.oss.driver.api.core.RequestThrottlingException; import com.datastax.oss.driver.api.core.connection.ClosedConnectionException; -import com.datastax.oss.driver.api.core.connection.ConnectionInitException; -import com.datastax.oss.driver.api.core.connection.FrameTooLongException; -import com.datastax.oss.driver.api.core.connection.HeartbeatException; import com.datastax.oss.driver.api.core.servererrors.*; -import com.datastax.oss.driver.internal.core.channel.ClusterNameMismatchException; -import com.datastax.oss.driver.shaded.guava.common.collect.ComputationException; import io.nosqlbench.activitytype.cqld4.errorhandling.exceptions.CqlGenericCycleException; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.ResultReadable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.HashMap; @@ -92,10 +86,10 @@ public enum CQLExceptionEnum implements ResultReadable { RequestThrottlingException(RequestThrottlingException.class,57), CqlGenericCycleException(CqlGenericCycleException.class,58); - private final static Logger logger = LoggerFactory.getLogger(CQLExceptionEnum.class); + private final static Logger logger = LogManager.getLogger(CQLExceptionEnum.class); private static Map codesByName = getCodesByName(); - private static String[] namesByCode = getNamesByCode(); + private static final String[] namesByCode = getNamesByCode(); private final Class exceptionClass; private final int resultCode; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/HashedCQLErrorHandler.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/HashedCQLErrorHandler.java index 8d4cae63c..6d5dd4ef5 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/HashedCQLErrorHandler.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/HashedCQLErrorHandler.java @@ -16,18 +16,18 @@ import io.nosqlbench.activitytype.cqld4.errorhandling.exceptions.RowVerification import io.nosqlbench.engine.api.activityapi.errorhandling.CycleErrorHandler; import io.nosqlbench.engine.api.activityapi.errorhandling.HashedErrorHandler; import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class HashedCQLErrorHandler extends HashedErrorHandler { - private static final Logger logger = LoggerFactory.getLogger(HashedCQLErrorHandler.class); + private static final Logger logger = LogManager.getLogger(HashedCQLErrorHandler.class); // private static Set> UNVERIFIED_ERRORS = new HashSet>() {{ // add(RowVerificationException.class); // add(ResultSetVerificationException.class); // }}; - private ExceptionCountMetrics exceptionCountMetrics; - private static ThreadLocal tlResultCode = ThreadLocal.withInitial(() -> (0)); + private final ExceptionCountMetrics exceptionCountMetrics; + private static final ThreadLocal tlResultCode = ThreadLocal.withInitial(() -> (0)); public HashedCQLErrorHandler(ExceptionCountMetrics exceptionCountMetrics) { this.exceptionCountMetrics = exceptionCountMetrics; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/NBCycleErrorHandler.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/NBCycleErrorHandler.java index 0f6fb88c6..526a0e683 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/NBCycleErrorHandler.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/errorhandling/NBCycleErrorHandler.java @@ -5,8 +5,8 @@ import io.nosqlbench.activitytype.cqld4.errorhandling.exceptions.CQLCycleWithSta import io.nosqlbench.engine.api.activityapi.errorhandling.CycleErrorHandler; import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics; import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * A contextualized error handler that can catch a cycle-specific error. @@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory; @SuppressWarnings("Duplicates") public class NBCycleErrorHandler implements CycleErrorHandler { - private static final Logger logger = LoggerFactory.getLogger(NBCycleErrorHandler.class); + private static final Logger logger = LogManager.getLogger(NBCycleErrorHandler.class); private final ErrorResponse errorResponse; private final ExceptionCountMetrics exceptionCountMetrics; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DiagnosticPreparedBinder.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DiagnosticPreparedBinder.java index 354d71746..71dc6c48d 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DiagnosticPreparedBinder.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DiagnosticPreparedBinder.java @@ -5,8 +5,8 @@ import com.datastax.oss.driver.api.core.cql.*; import com.datastax.oss.driver.api.core.type.DataType; import io.nosqlbench.activitytype.cqld4.core.CQLBindHelper; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ import java.util.List; */ public class DiagnosticPreparedBinder implements ValuesArrayBinder> { - public static final Logger logger = LoggerFactory.getLogger(DiagnosticPreparedBinder.class); + public static final Logger logger = LogManager.getLogger(DiagnosticPreparedBinder.class); private final CqlSession session; public DiagnosticPreparedBinder(CqlSession session) { diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DirectArrayValuesBinder.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DirectArrayValuesBinder.java index 2b10dba55..1341b5207 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DirectArrayValuesBinder.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/DirectArrayValuesBinder.java @@ -4,8 +4,8 @@ import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.cql.PreparedStatement; import com.datastax.oss.driver.api.core.cql.Statement; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Arrays; @@ -20,7 +20,7 @@ import java.util.Arrays; * will become the default. */ public class DirectArrayValuesBinder implements ValuesArrayBinder> { - public final static Logger logger = LoggerFactory.getLogger(DirectArrayValuesBinder.class); + public final static Logger logger = LogManager.getLogger(DirectArrayValuesBinder.class); private final CqlSession session; public DirectArrayValuesBinder(CqlSession session) { diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/UnsettableValuesBinder.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/UnsettableValuesBinder.java index 25177543c..d9048a397 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/UnsettableValuesBinder.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/binders/UnsettableValuesBinder.java @@ -1,6 +1,5 @@ package io.nosqlbench.activitytype.cqld4.statements.binders; -import com.datastax.driver.core.*; import com.datastax.oss.driver.api.core.ProtocolVersion; import com.datastax.oss.driver.api.core.cql.*; import com.datastax.oss.driver.api.core.session.Session; @@ -9,16 +8,15 @@ import com.datastax.oss.driver.api.core.type.codec.TypeCodec; import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry; import io.nosqlbench.virtdata.api.bindings.VALUE; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; public class UnsettableValuesBinder implements ValuesArrayBinder> { - private final static Logger logger = LoggerFactory.getLogger(UnsettableValuesBinder.class); + private final static Logger logger = LogManager.getLogger(UnsettableValuesBinder.class); private final Session session; private final CodecRegistry codecRegistry; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java index 9aaae99ed..7026e7fa7 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java @@ -23,8 +23,8 @@ import io.nosqlbench.engine.api.scripting.NashornEvaluator; import io.nosqlbench.engine.api.util.SSLKsFactory; import org.apache.tinkerpop.gremlin.driver.Cluster; import org.graalvm.options.OptionMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.File; import java.io.IOException; @@ -37,10 +37,10 @@ import java.util.concurrent.ConcurrentHashMap; public class CQLSessionCache implements Shutdownable { - private final static Logger logger = LoggerFactory.getLogger(CQLSessionCache.class); + private final static Logger logger = LogManager.getLogger(CQLSessionCache.class); private final static String DEFAULT_SESSION_ID = "default"; - private static CQLSessionCache instance = new CQLSessionCache(); - private Map sessionCache = new HashMap<>(); + private static final CQLSessionCache instance = new CQLSessionCache(); + private final Map sessionCache = new HashMap<>(); public final static class SessionConfig extends ConcurrentHashMap { diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDef.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDef.java index 33cdca1ce..cf236d32a 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDef.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDef.java @@ -1,14 +1,14 @@ package io.nosqlbench.activitytype.cqld4.statements.core; import com.datastax.oss.driver.api.core.ConsistencyLevel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.stream.Collectors; public class CQLStatementDef { - private final static Logger logger = LoggerFactory.getLogger(CQLStatementDef.class); + private final static Logger logger = LogManager.getLogger(CQLStatementDef.class); private Map params = new HashMap<>(); private String name = ""; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDefParser.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDefParser.java index a750a8cc9..361ca7edf 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDefParser.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLStatementDefParser.java @@ -1,7 +1,7 @@ package io.nosqlbench.activitytype.cqld4.statements.core; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.regex.Matcher; @@ -9,7 +9,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; public class CQLStatementDefParser { - private final static Logger logger = LoggerFactory.getLogger(CQLStatementDefParser.class); + private final static Logger logger = LogManager.getLogger(CQLStatementDefParser.class); // private final static Pattern templateToken = Pattern.compile("<<(\\w+(:(.+?))?)>>"); private final static Pattern stmtToken = Pattern.compile("\\?(\\w+[-_\\d\\w]*)|\\{(\\w+[-_\\d\\w.]*)}"); private final static String UNSET_VALUE = "UNSET-VALUE"; @@ -93,9 +93,7 @@ public class CQLStatementDefParser { if (!namedBindings.contains(tokenName)) { missingBindings.add(tokenName); } else { - if (missingAnchors.contains(tokenName)) { - missingAnchors.remove(tokenName); - } + missingAnchors.remove(tokenName); } } @@ -114,11 +112,11 @@ public class CQLStatementDefParser { } public static class ParseResult { - private Set missingGenerators; - private Set missingAnchors; - private String statement; + private final Set missingGenerators; + private final Set missingAnchors; + private final String statement; private Map bindings; - private String name; + private final String name; public ParseResult(String stmt, String name, Map bindings, Set missingGenerators, Set missingAnchors) { this.missingGenerators = missingGenerators; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/ReadyCQLStatementTemplate.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/ReadyCQLStatementTemplate.java index d29c7219f..8496ea6e0 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/ReadyCQLStatementTemplate.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/ReadyCQLStatementTemplate.java @@ -16,15 +16,15 @@ import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.virtdata.core.bindings.BindingsTemplate; import io.nosqlbench.virtdata.core.bindings.ContextualBindingsArrayTemplate; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.Writer; import java.util.Map; public class ReadyCQLStatementTemplate { - private final static Logger logger = LoggerFactory.getLogger(ReadyCQLStatementTemplate.class); + private final static Logger logger = LogManager.getLogger(ReadyCQLStatementTemplate.class); private final Session session; private final ContextualBindingsArrayTemplate> template; private final long ratio; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/YamlCQLStatementLoader.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/YamlCQLStatementLoader.java index 8eaf8fced..9806c9876 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/YamlCQLStatementLoader.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/YamlCQLStatementLoader.java @@ -3,8 +3,8 @@ package io.nosqlbench.activitytype.cqld4.statements.core; import io.nosqlbench.engine.api.activityimpl.ActivityInitializationError; import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import org.yaml.snakeyaml.TypeDescription; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; @@ -17,7 +17,7 @@ import java.util.function.Function; @SuppressWarnings("ALL") public class YamlCQLStatementLoader { - private final static Logger logger = LoggerFactory.getLogger(YamlCQLStatementLoader.class); + private final static Logger logger = LogManager.getLogger(YamlCQLStatementLoader.class); List> transformers = new ArrayList<>(); public YamlCQLStatementLoader() { diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java index fc01f6934..99fefc89b 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rowoperators/Save.java @@ -4,8 +4,8 @@ import com.datastax.oss.driver.api.core.cql.ColumnDefinition; import com.datastax.oss.driver.api.core.cql.Row; import io.nosqlbench.activitytype.cqld4.api.RowCycleOperator; import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Arrays; import java.util.HashMap; @@ -17,11 +17,11 @@ import java.util.stream.StreamSupport; * Save specific variables to the thread local object map */ public class Save implements RowCycleOperator { - private final static Logger logger = LoggerFactory.getLogger(Save.class); + private final static Logger logger = LogManager.getLogger(Save.class); ThreadLocal> tl_objectMap = SharedState.tl_ObjectMap; - private String[] varnames; + private final String[] varnames; public Save(String... varnames) { this.varnames = varnames; diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/CqlD4ResultSetLogger.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/CqlD4ResultSetLogger.java index 8ddce18c7..57e6b3863 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/CqlD4ResultSetLogger.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/CqlD4ResultSetLogger.java @@ -2,15 +2,15 @@ package io.nosqlbench.activitytype.cqld4.statements.rsoperators; import com.datastax.oss.driver.api.core.cql.*; import io.nosqlbench.activitytype.cqld4.api.D4ResultSetCycleOperator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * Logs a trace-level event for the result set, including * cycles, rows, fetched row count, and the statement. */ public class CqlD4ResultSetLogger implements D4ResultSetCycleOperator { - private final static Logger logger = LoggerFactory.getLogger(CqlD4ResultSetLogger.class); + private final static Logger logger = LogManager.getLogger(CqlD4ResultSetLogger.class); private static String getQueryString(Statement stmt) { if (stmt instanceof PreparedStatement) { diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/TraceLogger.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/TraceLogger.java index 263197529..c38189e96 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/TraceLogger.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/rsoperators/TraceLogger.java @@ -4,8 +4,8 @@ import com.datastax.oss.driver.api.core.cql.*; import io.nosqlbench.activitytype.cqld4.api.D4ResultSetCycleOperator; import io.nosqlbench.activitytype.cqld4.core.StatementModifier; import io.nosqlbench.engine.api.util.SimpleConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.FileDescriptor; import java.io.FileWriter; @@ -15,9 +15,9 @@ import java.util.Date; public class TraceLogger implements D4ResultSetCycleOperator, StatementModifier { - private final static Logger logger = LoggerFactory.getLogger(TraceLogger.class); + private final static Logger logger = LogManager.getLogger(TraceLogger.class); - private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); + private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); private final long modulo; private final String filename; private final FileWriter writer; diff --git a/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivity.java b/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivity.java index d20f479a9..487008c89 100644 --- a/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivity.java +++ b/driver-cqlverify/src/main/java/io/nosqlbench/activitytype/cqlverify/CqlVerifyActivity.java @@ -5,8 +5,8 @@ import io.nosqlbench.activitytype.cql.statements.rsoperators.AssertSingleRowResu import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.virtdata.core.bindings.Bindings; import io.nosqlbench.virtdata.core.bindings.BindingsTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.List; @@ -15,7 +15,7 @@ import java.util.Optional; public class CqlVerifyActivity extends CqlActivity { - private final static Logger logger = LoggerFactory.getLogger(CqlVerifyActivity.class); + private final static Logger logger = LogManager.getLogger(CqlVerifyActivity.class); private BindingsTemplate expectedValuesTemplate; private VerificationMetrics verificationMetrics; diff --git a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/AsyncDiagAction.java b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/AsyncDiagAction.java index d2d127167..1f67a1016 100644 --- a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/AsyncDiagAction.java +++ b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/AsyncDiagAction.java @@ -24,8 +24,8 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.op_output.StrideOut import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ParameterMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; import java.util.concurrent.BlockingQueue; @@ -38,7 +38,7 @@ import java.util.stream.Collectors; public class AsyncDiagAction extends BaseAsyncAction implements Thread.UncaughtExceptionHandler, StrideOutputConsumer { - private final static Logger logger = LoggerFactory.getLogger(AsyncDiagAction.class); + private final static Logger logger = LogManager.getLogger(AsyncDiagAction.class); private long lastUpdate; private long quantizedInterval; @@ -213,8 +213,8 @@ public class AsyncDiagAction extends BaseAsyncAction i private final AsyncDiagAction action; AsyncDiagAction mainContext; private volatile boolean running = true; - private Thread thread; - private String name; + private final Thread thread; + private final String name; public OpFinisher(String name, BlockingQueue> queue, AsyncDiagAction action) { this.queue = queue; diff --git a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagAction.java b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagAction.java index 0bab6740e..5f84a400c 100644 --- a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagAction.java +++ b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagAction.java @@ -20,16 +20,16 @@ import io.nosqlbench.engine.api.activityapi.core.MultiPhaseAction; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class DiagAction implements SyncAction, ActivityDefObserver, MultiPhaseAction { - private final static Logger logger = LoggerFactory.getLogger(DiagAction.class); + private final static Logger logger = LogManager.getLogger(DiagAction.class); private final ActivityDef activityDef; private final DiagActivity diagActivity; - private int slot; + private final int slot; private long lastUpdate; private long quantizedInterval; private long reportModulo; diff --git a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActionDispenser.java b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActionDispenser.java index 1ff3a45c3..c961844f1 100644 --- a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActionDispenser.java +++ b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActionDispenser.java @@ -16,14 +16,13 @@ package io.nosqlbench.activitytype.diag; import io.nosqlbench.engine.api.activityapi.core.Action; import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; -import org.slf4j.Logger; - -import static org.slf4j.LoggerFactory.getLogger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class DiagActionDispenser implements ActionDispenser { - private final static Logger logger = getLogger(DiagActionDispenser.class); - private DiagActivity activity; + private final static Logger logger = LogManager.getLogger(DiagActionDispenser.class); + private final DiagActivity activity; public DiagActionDispenser(DiagActivity activity) { this.activity = activity; diff --git a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java index 8196384c5..27083fe2f 100644 --- a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java +++ b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/DiagActivityType.java @@ -19,8 +19,8 @@ import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * The DiagActivity, aka "diag", is simply a diagnostic activity. @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; @Service(ActivityType.class) public class DiagActivityType implements ActivityType { - private static final Logger logger = LoggerFactory.getLogger(DiagActivityType.class); + private static final Logger logger = LogManager.getLogger(DiagActivityType.class); @Override public String getName() { diff --git a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/SequenceBlocker.java b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/SequenceBlocker.java index af96a1225..550cb353d 100644 --- a/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/SequenceBlocker.java +++ b/driver-diag/src/main/java/io/nosqlbench/activitytype/diag/SequenceBlocker.java @@ -17,14 +17,14 @@ package io.nosqlbench.activitytype.diag; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.security.InvalidParameterException; import java.util.concurrent.atomic.AtomicLong; public class SequenceBlocker { - private final static Logger logger = LoggerFactory.getLogger(SequenceBlocker.class); + private final static Logger logger = LogManager.getLogger(SequenceBlocker.class); private final AtomicLong sequence; private final AtomicLong waiting=new AtomicLong(0L); private final boolean errorsAreFatal; diff --git a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java index 327b79c6c..b97425c47 100644 --- a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java +++ b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java @@ -8,8 +8,8 @@ import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.api.errors.BasicError; import io.nosqlbench.virtdata.core.templates.StringBindings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.*; import java.net.http.HttpClient; @@ -23,7 +23,7 @@ import java.util.concurrent.TimeUnit; public class HttpAction implements SyncAction { - private final static Logger logger = LoggerFactory.getLogger(HttpAction.class); + private final static Logger logger = LogManager.getLogger(HttpAction.class); private final HttpActivity httpActivity; private final int slot; diff --git a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivity.java b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivity.java index f0169b7b6..01d40da6c 100644 --- a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivity.java +++ b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivity.java @@ -10,14 +10,14 @@ import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.SimpleActivity; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.net.http.HttpClient; import java.util.function.Function; public class HttpActivity extends SimpleActivity implements Activity, ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(HttpActivity.class); + private final static Logger logger = LogManager.getLogger(HttpActivity.class); private final ActivityDef activityDef; public HttpConsoleFormats console; diff --git a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java index 800e5bd24..6d24956dc 100644 --- a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java +++ b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpActivityType.java @@ -4,13 +4,13 @@ import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.annotations.Service; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; @Service(ActivityType.class) public class HttpActivityType implements ActivityType { - private static final Logger logger = LoggerFactory.getLogger(HttpActivityType.class); + private static final Logger logger = LogManager.getLogger(HttpActivityType.class); @Override public String getName() { diff --git a/driver-http/src/main/java/io/nosqlbench/activitytype/http/async/HttpAsyncAction.java b/driver-http/src/main/java/io/nosqlbench/activitytype/http/async/HttpAsyncAction.java index 676e335e6..461a66088 100644 --- a/driver-http/src/main/java/io/nosqlbench/activitytype/http/async/HttpAsyncAction.java +++ b/driver-http/src/main/java/io/nosqlbench/activitytype/http/async/HttpAsyncAction.java @@ -7,8 +7,8 @@ import io.nosqlbench.activitytype.http.HttpActivity; import io.nosqlbench.engine.api.activityapi.core.BaseAsyncAction; import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.TrackedOp; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.net.http.HttpClient; import java.net.http.HttpResponse; @@ -17,7 +17,7 @@ import java.util.function.LongFunction; public class HttpAsyncAction extends BaseAsyncAction { - private final static Logger logger = LoggerFactory.getLogger(HttpAsyncAction.class); + private final static Logger logger = LogManager.getLogger(HttpAsyncAction.class); private OpSequence sequencer; private HttpClient client; diff --git a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXAction.java b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXAction.java index fdd6d0010..b5e22ed46 100644 --- a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXAction.java +++ b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/JMXAction.java @@ -4,12 +4,12 @@ import io.nosqlbench.driver.jmx.ops.JmxOp; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class JMXAction implements SyncAction { - private final static Logger logger = LoggerFactory.getLogger(JMXAction.class); + private final static Logger logger = LogManager.getLogger(JMXAction.class); private final ActivityDef activityDef; private final int slot; diff --git a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/SecureUtils.java b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/SecureUtils.java index e103540bd..7934ecbe7 100644 --- a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/SecureUtils.java +++ b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/SecureUtils.java @@ -1,16 +1,15 @@ package io.nosqlbench.driver.jmx; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -import java.io.Console; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; public class SecureUtils { - private final static Logger logger = LoggerFactory.getLogger(SecureUtils.class); + private final static Logger logger = LogManager.getLogger(SecureUtils.class); public static String readSecret(String description, String source) { if (source==null) { diff --git a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/ops/JmxOp.java b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/ops/JmxOp.java index 99a5985ae..abd006fa8 100644 --- a/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/ops/JmxOp.java +++ b/driver-jmx/src/main/java/io/nosqlbench/driver/jmx/ops/JmxOp.java @@ -1,7 +1,7 @@ package io.nosqlbench.driver.jmx.ops; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.management.MBeanServerConnection; import javax.management.ObjectName; @@ -12,7 +12,7 @@ import javax.management.remote.JMXConnector; */ public abstract class JmxOp { - protected final static Logger logger = LoggerFactory.getLogger(JmxOp.class); + protected final static Logger logger = LogManager.getLogger(JmxOp.class); protected JMXConnector connector; protected ObjectName objectName; diff --git a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaAction.java b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaAction.java index f01b3e82b..c34143c2c 100644 --- a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaAction.java +++ b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaAction.java @@ -2,13 +2,13 @@ package com.datastax.ebdrivers.kafkaproducer; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class KafkaAction implements SyncAction { - private final static Logger logger = LoggerFactory.getLogger(KafkaAction.class); + private final static Logger logger = LogManager.getLogger(KafkaAction.class); private final KafkaProducerActivity activity; private final int slot; diff --git a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivity.java b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivity.java index 30189c531..54ec6513b 100644 --- a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivity.java +++ b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaProducerActivity.java @@ -4,7 +4,6 @@ import com.codahale.metrics.Timer; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityapi.planning.SequencePlanner; import io.nosqlbench.engine.api.activityapi.planning.SequencerType; -import io.nosqlbench.engine.api.activityconfig.ParsedStmt; import io.nosqlbench.engine.api.activityconfig.StatementsLoader; import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; @@ -12,22 +11,15 @@ import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.SimpleActivity; import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.api.templating.StrInterpolator; -import io.nosqlbench.virtdata.core.bindings.BindingsTemplate; -import io.nosqlbench.virtdata.core.templates.StringBindings; -import io.nosqlbench.virtdata.core.templates.StringBindingsTemplate; -import org.apache.kafka.clients.producer.*; -import org.apache.kafka.common.serialization.StringSerializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -import java.util.*; -import java.util.concurrent.Future; -import java.util.function.Function; -import java.util.regex.Pattern; +import java.util.Arrays; +import java.util.List; import java.util.stream.Collectors; public class KafkaProducerActivity extends SimpleActivity { - private final static Logger logger = LoggerFactory.getLogger(KafkaProducerActivity.class); + private final static Logger logger = LogManager.getLogger(KafkaProducerActivity.class); private String yamlLoc; private String clientId; private String servers; diff --git a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaStatement.java b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaStatement.java index e0323248c..20796b233 100644 --- a/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaStatement.java +++ b/driver-kafka/src/main/java/com/datastax/ebdrivers/kafkaproducer/KafkaStatement.java @@ -9,8 +9,8 @@ import io.nosqlbench.virtdata.core.templates.StringBindings; import io.nosqlbench.virtdata.core.templates.StringBindingsTemplate; import org.apache.kafka.clients.producer.*; import org.apache.kafka.common.serialization.StringSerializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.IOException; import java.nio.file.Files; @@ -20,7 +20,7 @@ import java.util.Properties; import java.util.concurrent.Future; public class KafkaStatement { - private final static Logger logger = LoggerFactory.getLogger(KafkaStatement.class); + private final static Logger logger = LogManager.getLogger(KafkaStatement.class); private Producer producer = null; private final StringBindings bindings; diff --git a/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoAction.java b/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoAction.java index 4a97622fe..beaad3839 100644 --- a/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoAction.java +++ b/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoAction.java @@ -2,8 +2,8 @@ package io.nosqlbench.driver.mongodb; import java.util.concurrent.TimeUnit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import com.codahale.metrics.Timer; import io.nosqlbench.engine.api.activityapi.core.SyncAction; @@ -13,7 +13,7 @@ import org.bson.conversions.Bson; public class MongoAction implements SyncAction { - private final static Logger logger = LoggerFactory.getLogger(MongoAction.class); + private final static Logger logger = LogManager.getLogger(MongoAction.class); private final MongoActivity activity; private final int slot; diff --git a/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoActivity.java b/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoActivity.java index 47f2d1bc0..73434d7a2 100644 --- a/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoActivity.java +++ b/driver-mongodb/src/main/java/io/nosqlbench/driver/mongodb/MongoActivity.java @@ -5,8 +5,8 @@ import java.util.Objects; import java.util.function.Function; import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import com.codahale.metrics.Histogram; import com.codahale.metrics.Timer; @@ -37,7 +37,7 @@ import static org.bson.codecs.configuration.CodecRegistries.fromRegistries; public class MongoActivity extends SimpleActivity implements ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(MongoActivity.class); + private final static Logger logger = LogManager.getLogger(MongoActivity.class); private String yamlLoc; private String connectionString; diff --git a/driver-mongodb/src/test/java/io/nosqlbench/driver/mongodb/ReadyMongoStatementTest.java b/driver-mongodb/src/test/java/io/nosqlbench/driver/mongodb/ReadyMongoStatementTest.java index 8d4071700..99d462045 100644 --- a/driver-mongodb/src/test/java/io/nosqlbench/driver/mongodb/ReadyMongoStatementTest.java +++ b/driver-mongodb/src/test/java/io/nosqlbench/driver/mongodb/ReadyMongoStatementTest.java @@ -1,28 +1,26 @@ package io.nosqlbench.driver.mongodb; +import io.nosqlbench.engine.api.activityconfig.ParsedStmt; +import io.nosqlbench.engine.api.activityconfig.StatementsLoader; +import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; +import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; +import io.nosqlbench.engine.api.activityimpl.ActivityDef; +import io.nosqlbench.engine.api.templating.StrInterpolator; +import io.nosqlbench.virtdata.core.templates.BindPoint; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bson.conversions.Bson; +import org.junit.Before; +import org.junit.Test; + import java.util.List; import java.util.Objects; import java.util.function.Function; -import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.nosqlbench.engine.api.activityconfig.ParsedStmt; -import io.nosqlbench.engine.api.activityconfig.StatementsLoader; -import io.nosqlbench.engine.api.activityconfig.yaml.StmtDef; -import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; -import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import io.nosqlbench.engine.api.templating.StrInterpolator; -import io.nosqlbench.virtdata.core.templates.BindPoint; -import org.bson.conversions.Bson; - import static org.assertj.core.api.Assertions.assertThat; public class ReadyMongoStatementTest { - private final static Logger logger = LoggerFactory.getLogger(ReadyMongoStatementTest.class); + private final static Logger logger = LogManager.getLogger(ReadyMongoStatementTest.class); private ActivityDef activityDef; private StmtsDocList stmtsDocList; diff --git a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/AsyncStdoutAction.java b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/AsyncStdoutAction.java index 89c9363c2..56c27ef7f 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/AsyncStdoutAction.java +++ b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/AsyncStdoutAction.java @@ -7,14 +7,14 @@ import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.TrackedOp; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.virtdata.core.templates.StringBindings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.function.LongFunction; @SuppressWarnings("Duplicates") public class AsyncStdoutAction extends BaseAsyncAction { - private final static Logger logger = LoggerFactory.getLogger(AsyncStdoutAction.class); + private final static Logger logger = LogManager.getLogger(AsyncStdoutAction.class); private OpSequence sequencer; diff --git a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutAction.java b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutAction.java index 14ff703a6..0212634dc 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutAction.java +++ b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutAction.java @@ -19,20 +19,20 @@ package io.nosqlbench.activitytype.stdout; import com.codahale.metrics.Timer; import io.nosqlbench.engine.api.activityapi.core.SyncAction; -import io.nosqlbench.engine.api.activityapi.planning.OpSequence; +import io.nosqlbench.engine.api.activityapi.planning.OpSource; import io.nosqlbench.virtdata.core.templates.StringBindings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; @SuppressWarnings("Duplicates") public class StdoutAction implements SyncAction { - private static final Logger logger = LoggerFactory.getLogger(StdoutAction.class); - private int slot; - private StdoutActivity activity; - private int maxTries = 10; + private static final Logger logger = LogManager.getLogger(StdoutAction.class); + private final int slot; + private final StdoutActivity activity; + private final int maxTries = 10; private boolean showstmts; - private OpSequence sequencer; + private OpSource opsource; public StdoutAction(int slot, StdoutActivity activity) { this.slot = slot; @@ -41,7 +41,7 @@ public class StdoutAction implements SyncAction { @Override public void init() { - this.sequencer = activity.getOpSequence(); + this.opsource = activity.getOpSequence(); } @Override @@ -49,7 +49,7 @@ public class StdoutAction implements SyncAction { StringBindings stringBindings; String statement = null; try (Timer.Context bindTime = activity.bindTimer.time()) { - stringBindings = sequencer.get(cycleValue); + stringBindings = opsource.get(cycleValue); statement = stringBindings.bind(cycleValue); showstmts = activity.getShowstmts(); if (showstmts) { diff --git a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java index 82aa41aed..a830b6e99 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java +++ b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java @@ -36,8 +36,8 @@ import io.nosqlbench.engine.api.templating.StrInterpolator; import io.nosqlbench.virtdata.core.bindings.BindingsTemplate; import io.nosqlbench.virtdata.core.templates.StringBindings; import io.nosqlbench.virtdata.core.templates.StringBindingsTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.FileNotFoundException; import java.io.PrintWriter; @@ -48,7 +48,7 @@ import java.util.regex.Pattern; @SuppressWarnings("Duplicates") public class StdoutActivity extends SimpleActivity implements ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(StdoutActivity.class); + private final static Logger logger = LogManager.getLogger(StdoutActivity.class); private final Boolean showstmts; private final StmtsDocList stmtsDocList; public Timer bindTimer; diff --git a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivity.java b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivity.java index dfa814968..f65d9c262 100644 --- a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivity.java +++ b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpclient/TCPClientActivity.java @@ -20,8 +20,8 @@ package io.nosqlbench.activitytype.tcpclient; import io.nosqlbench.activitytype.stdout.StdoutActivity; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.util.SSLKsFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.net.SocketFactory; import java.io.IOException; @@ -29,7 +29,7 @@ import java.io.PrintWriter; import java.net.Socket; public class TCPClientActivity extends StdoutActivity { - private final static Logger logger = LoggerFactory.getLogger(TCPClientActivity.class); + private final static Logger logger = LogManager.getLogger(TCPClientActivity.class); public TCPClientActivity(ActivityDef activityDef) { super(activityDef); diff --git a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivity.java b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivity.java index da758c9aa..caf83f0a2 100644 --- a/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivity.java +++ b/driver-tcp/src/main/java/io/nosqlbench/activitytype/tcpserver/TCPServerActivity.java @@ -20,8 +20,8 @@ package io.nosqlbench.activitytype.tcpserver; import io.nosqlbench.activitytype.stdout.StdoutActivity; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.util.SSLKsFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.net.ServerSocketFactory; import javax.net.ssl.SSLServerSocketFactory; @@ -41,11 +41,11 @@ import java.util.concurrent.LinkedBlockingQueue; public class TCPServerActivity extends StdoutActivity { - private final static Logger logger = LoggerFactory.getLogger(TCPServerActivity.class); + private final static Logger logger = LogManager.getLogger(TCPServerActivity.class); private final ServerSocketFactory socketFactory; - private LinkedBlockingQueue queue; + private final LinkedBlockingQueue queue; private ServerSocket listenerSocket; - private List managedShutdown = new ArrayList<>(); + private final List managedShutdown = new ArrayList<>(); private int capacity=10; @@ -118,7 +118,7 @@ public class TCPServerActivity extends StdoutActivity { } - private static interface Shutdown { + private interface Shutdown { void shutdown(); } diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebContext.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebContext.java index ce61fa79e..c67e084f8 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebContext.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebContext.java @@ -1,8 +1,8 @@ package io.nosqlbench.driver.webdriver; import org.openqa.selenium.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Collection; import java.util.HashMap; @@ -10,14 +10,14 @@ import java.util.LinkedList; import java.util.List; public class WebContext { - private final static Logger logger = LoggerFactory.getLogger(WebContext.class); + private final static Logger logger = LogManager.getLogger(WebContext.class); private final WebDriver rootwindow; WebDriver focus; LinkedList elements = new LinkedList<>(); - private LinkedList cookies = new LinkedList<>(); - private HashMap vars = new HashMap<>(); + private final LinkedList cookies = new LinkedList<>(); + private final HashMap vars = new HashMap<>(); private Alert alert; public WebContext(WebDriver initial) { diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverAction.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverAction.java index be85b8b24..39a393f69 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverAction.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverAction.java @@ -5,16 +5,14 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.templating.CommandTemplate; -import io.nosqlbench.nb.api.errors.BasicError; -import org.openqa.selenium.WebDriver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** * Holds the definition and tracking state for a web driver command. */ public class WebDriverAction implements SyncAction, ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(WebDriverAction.class); + private final static Logger logger = LogManager.getLogger(WebDriverAction.class); private final WebDriverActivity activity; private final int slot; diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivity.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivity.java index e780eccc6..0f9a5d787 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivity.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/WebDriverActivity.java @@ -10,7 +10,6 @@ import io.nosqlbench.engine.api.activityapi.planning.SequencePlanner; import io.nosqlbench.engine.api.activityapi.planning.SequencerType; import io.nosqlbench.engine.api.activityconfig.StatementsLoader; import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import io.nosqlbench.engine.api.activityconfig.yaml.StmtDef; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.SimpleActivity; @@ -18,27 +17,29 @@ import io.nosqlbench.engine.api.templating.CommandTemplate; import io.nosqlbench.engine.api.templating.StrInterpolator; import io.nosqlbench.nb.api.content.NBIO; import io.nosqlbench.nb.api.errors.BasicError; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; public class WebDriverActivity extends SimpleActivity { - private final static Logger logger = LoggerFactory.getLogger(WebDriverActivity.class); + private final static Logger logger = LogManager.getLogger(WebDriverActivity.class); // private final StmtsDocList stmtsDocList; private OpSequence opSequence; - private ConcurrentHashMap contexts = new ConcurrentHashMap<>(); + private final ConcurrentHashMap contexts = new ConcurrentHashMap<>(); // private static ThreadLocal TL_WebContext = new ThreadLocal<>(); public WebDriverActivity(ActivityDef activityDef) { diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/AssertElement.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/AssertElement.java index 7a0bb7c97..c0daf5b09 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/AssertElement.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/AssertElement.java @@ -1,16 +1,13 @@ package io.nosqlbench.driver.webdriver.verbs; import io.nosqlbench.driver.webdriver.WebContext; -import io.nosqlbench.nb.api.errors.BasicError; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.openqa.selenium.By; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class AssertElement implements WebDriverVerb { - private final static Logger logger = LoggerFactory.getLogger(AssertElement.class); + private final static Logger logger = LogManager.getLogger(AssertElement.class); private final By by; public AssertElement(By by) { diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElement.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElement.java index 535b2a9a5..0991cad67 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElement.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElement.java @@ -1,15 +1,14 @@ package io.nosqlbench.driver.webdriver.verbs; import io.nosqlbench.driver.webdriver.WebContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class FindElement implements WebDriverVerb { - private final static Logger logger = LoggerFactory.getLogger(FindElement.class); + private final static Logger logger = LogManager.getLogger(FindElement.class); private final By by; diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElements.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElements.java index 1bd842111..8c2015b05 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElements.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/FindElements.java @@ -1,17 +1,16 @@ package io.nosqlbench.driver.webdriver.verbs; import io.nosqlbench.driver.webdriver.WebContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.List; public class FindElements implements WebDriverVerb { - private final static Logger logger = LoggerFactory.getLogger(FindElements.class); + private final static Logger logger = LogManager.getLogger(FindElements.class); private final By by; diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/Get.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/Get.java index 9370aff7a..b5c958d26 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/Get.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/Get.java @@ -1,11 +1,11 @@ package io.nosqlbench.driver.webdriver.verbs; import io.nosqlbench.driver.webdriver.WebContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class Get implements WebDriverVerb { - private final static Logger logger = LoggerFactory.getLogger(Get.class); + private final static Logger logger = LogManager.getLogger(Get.class); private final String target; diff --git a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/WebDriverVerbs.java b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/WebDriverVerbs.java index b03f8df49..7d32e1ce6 100644 --- a/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/WebDriverVerbs.java +++ b/driver-web/src/main/java/io/nosqlbench/driver/webdriver/verbs/WebDriverVerbs.java @@ -3,8 +3,8 @@ package io.nosqlbench.driver.webdriver.verbs; import io.nosqlbench.driver.webdriver.WebContext; import io.nosqlbench.engine.api.templating.CommandTemplate; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.security.InvalidParameterException; import java.util.Map; @@ -19,7 +19,7 @@ import java.util.function.Function; * The JUnit exporter command generator */ public class WebDriverVerbs { - private final static Logger logger = LoggerFactory.getLogger(WebDriverVerbs.class); + private final static Logger logger = LogManager.getLogger(WebDriverVerbs.class); public final static String COMMAND = "command"; public enum Verb { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/BaseAsyncAction.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/BaseAsyncAction.java index 7d6ccc655..fc299a8d8 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/BaseAsyncAction.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/BaseAsyncAction.java @@ -20,8 +20,8 @@ package io.nosqlbench.engine.api.activityapi.core; import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.TrackedOp; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ParameterMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * @@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory; * @param An type of of an Activity, a state holder for a runtime instance of an Activity */ public abstract class BaseAsyncAction implements AsyncAction, Stoppable, ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger("BaseAsyncAction"); + private final static Logger logger = LogManager.getLogger("BaseAsyncAction"); protected final A activity; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/buffers/results_rle/CycleResultsRLEBufferTarget.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/buffers/results_rle/CycleResultsRLEBufferTarget.java index 83ff87acd..c599e21f3 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/buffers/results_rle/CycleResultsRLEBufferTarget.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/buffers/results_rle/CycleResultsRLEBufferTarget.java @@ -21,8 +21,8 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResult import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.ResultReadable; import io.nosqlbench.engine.api.activityapi.cyclelog.inputs.cyclelog.CanFilterResultValue; import io.nosqlbench.engine.api.activityapi.output.Output; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.nio.ByteBuffer; import java.util.function.Predicate; @@ -40,7 +40,7 @@ import java.util.function.Predicate; * will be deemed invalid and will cause an exception to be thrown. */ public class CycleResultsRLEBufferTarget implements Output,CanFilterResultValue { - private final static Logger logger = LoggerFactory.getLogger(CycleResultsRLEBufferTarget.class); + private final static Logger logger = LogManager.getLogger(CycleResultsRLEBufferTarget.class); public final static int BYTES = Long.BYTES + Long.BYTES + Byte.BYTES; @@ -49,8 +49,8 @@ public class CycleResultsRLEBufferTarget implements Output,CanFilterResultValue private long lastResult = Integer.MIN_VALUE; private long runlength = 0L; private boolean flushed = false; - private long count=0L; - private long min=Long.MAX_VALUE; + private final long count=0L; + private final long min=Long.MAX_VALUE; private Predicate filter; /** @@ -147,7 +147,7 @@ public class CycleResultsRLEBufferTarget implements Output,CanFilterResultValue } private static class ResultReadableWrapper implements ResultReadable { - private int result; + private final int result; ResultReadableWrapper(int result) { this.result = result; } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/tristate/EnumReadableMappingFilter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/tristate/EnumReadableMappingFilter.java index 55c0fde5b..6d75c3470 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/tristate/EnumReadableMappingFilter.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/tristate/EnumReadableMappingFilter.java @@ -18,8 +18,8 @@ package io.nosqlbench.engine.api.activityapi.cyclelog.filters.tristate; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.ResultReadable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.regex.Pattern; @@ -31,10 +31,10 @@ import java.util.regex.Pattern; * @param The type of the Enum which implements TristateFilter */ public class EnumReadableMappingFilter & ResultReadable> implements TristateFilter { - private final static Logger logger = LoggerFactory.getLogger(EnumReadableMappingFilter.class); + private final static Logger logger = LogManager.getLogger(EnumReadableMappingFilter.class); private final E[] enumValues; - private ResultMappingArrayFilter arrayFilter = new ResultMappingArrayFilter(); + private final ResultMappingArrayFilter arrayFilter = new ResultMappingArrayFilter(); public EnumReadableMappingFilter(E[] enumValues, Policy defaultPolicy) { this.enumValues = enumValues; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java index 6e4a0e40a..9a6ba5e61 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java @@ -27,8 +27,8 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results_rle.CycleRe import io.nosqlbench.engine.api.activityapi.input.Input; import io.nosqlbench.engine.api.util.SimpleConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.File; import java.io.RandomAccessFile; @@ -38,7 +38,7 @@ import java.util.Iterator; import java.util.function.Predicate; public class CycleLogInput implements Input, AutoCloseable, Iterable, CanFilterResultValue { - private final static Logger logger = LoggerFactory.getLogger(CycleLogInput.class); + private final static Logger logger = LogManager.getLogger(CycleLogInput.class); private final Iterator cycleResultSegmentIterator; private RandomAccessFile raf; private MappedByteBuffer mbb; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/ReorderingConcurrentResultBuffer.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/ReorderingConcurrentResultBuffer.java index 0cfc456c0..064555c05 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/ReorderingConcurrentResultBuffer.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/ReorderingConcurrentResultBuffer.java @@ -23,8 +23,8 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResult import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.ResultReadable; import io.nosqlbench.engine.api.activityapi.cyclelog.inputs.cyclelog.CanFilterResultValue; import io.nosqlbench.engine.api.activityapi.output.Output; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Collections; import java.util.LinkedList; @@ -36,10 +36,10 @@ import java.util.function.Predicate; */ public class ReorderingConcurrentResultBuffer implements Output, CanFilterResultValue { - private final static Logger logger = LoggerFactory.getLogger(ReorderingConcurrentResultBuffer.class); + private final static Logger logger = LogManager.getLogger(ReorderingConcurrentResultBuffer.class); - private LinkedList segments = new LinkedList<>(); - private Output downstream; + private final LinkedList segments = new LinkedList<>(); + private final Output downstream; private final int threshold; private int currentCount; private int segmentCount; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutput.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutput.java index 2f88d00e8..c39b2e884 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutput.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutput.java @@ -26,8 +26,8 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results_rle.CycleSp import io.nosqlbench.engine.api.activityapi.cyclelog.inputs.cyclelog.CanFilterResultValue; import io.nosqlbench.engine.api.activityapi.output.Output; import io.nosqlbench.engine.api.util.SimpleConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.File; import java.io.RandomAccessFile; @@ -51,13 +51,13 @@ import java.util.function.Predicate; public class CycleLogOutput implements Output, CanFilterResultValue { // For use in allocating file data, etc - private final static Logger logger = LoggerFactory.getLogger(CycleLogOutput.class); + private final static Logger logger = LogManager.getLogger(CycleLogOutput.class); private MappedByteBuffer mbb; private RandomAccessFile file; // private FileBufferConfig config; private CycleResultsRLEBufferTarget targetBuffer; - private int extentSizeInSpans; - private File outputFile; + private final int extentSizeInSpans; + private final File outputFile; private Predicate filter; public CycleLogOutput(Activity activity) { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java index edec07937..c71fcdbe6 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/cyclelog/CycleLogOutputType.java @@ -24,8 +24,8 @@ import io.nosqlbench.engine.api.activityapi.output.Output; import io.nosqlbench.engine.api.activityapi.output.OutputDispenser; import io.nosqlbench.engine.api.activityapi.output.OutputType; import io.nosqlbench.nb.annotations.Service; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; @Service(OutputType.class) public class CycleLogOutputType implements OutputType { @@ -41,10 +41,10 @@ public class CycleLogOutputType implements OutputType { } public static class Dispenser implements OutputDispenser { - private final static Logger logger = LoggerFactory.getLogger(OutputDispenser.class); + private final static Logger logger = LogManager.getLogger(OutputDispenser.class); private final Output output; - private Activity activity; + private final Activity activity; public Dispenser(Activity activity) { this.activity = activity; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java index b88c081b1..9846bf278 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingMarkerDispenser.java @@ -21,14 +21,14 @@ import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.activityapi.output.Output; import io.nosqlbench.engine.api.activityapi.output.OutputDispenser; import io.nosqlbench.nb.annotations.Service; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; @Service(OutputDispenser.class) public class LoggingMarkerDispenser implements OutputDispenser { - private final static Logger logger = LoggerFactory.getLogger(LoggingMarkerDispenser.class); - private Activity activity; + private final static Logger logger = LogManager.getLogger(LoggingMarkerDispenser.class); + private final Activity activity; public LoggingMarkerDispenser(Activity activity) { this.activity = activity; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingOutput.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingOutput.java index 892c31d07..499c68747 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingOutput.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/outputs/logger/LoggingOutput.java @@ -21,13 +21,13 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.ResultReada import io.nosqlbench.engine.api.activityapi.cyclelog.inputs.cyclelog.CanFilterResultValue; import io.nosqlbench.engine.api.activityapi.output.Output; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.function.Predicate; public class LoggingOutput implements Output,CanFilterResultValue { - private final static Logger logger = LoggerFactory.getLogger(LoggingOutput.class); + private final static Logger logger = LogManager.getLogger(LoggingOutput.class); private final ActivityDef def; private final long slot; @@ -63,7 +63,7 @@ public class LoggingOutput implements Output,CanFilterResultValue { } private static class ResultReadableWrapper implements ResultReadable { - private int result; + private final int result; public ResultReadableWrapper(int result) { this.result = result; } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/CycleErrorHandlers.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/CycleErrorHandlers.java index 89ae0127c..24c8bebb7 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/CycleErrorHandlers.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/CycleErrorHandlers.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.api.activityapi.errorhandling; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; @@ -27,7 +27,7 @@ import java.util.List; */ public class CycleErrorHandlers { - private final static Logger logger = LoggerFactory.getLogger(CycleErrorHandlers.class); + private final static Logger logger = LogManager.getLogger(CycleErrorHandlers.class); public static CycleErrorHandler log(R result) { return (cycle, error, errMsg) -> { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/HashedErrorHandler.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/HashedErrorHandler.java index 9e1efade8..79d335be1 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/HashedErrorHandler.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/errorhandling/HashedErrorHandler.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.api.activityapi.errorhandling; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -59,15 +59,15 @@ import java.util.stream.Collectors; * @param The result type that will be produced by these error handlers. */ public class HashedErrorHandler implements CycleErrorHandler { - private final static Logger logger = LoggerFactory.getLogger(HashedErrorHandler.class); + private final static Logger logger = LogManager.getLogger(HashedErrorHandler.class); private final CycleErrorHandler DEFAULT_defaultHandler = (cycle, error, errMsg) -> { throw new RuntimeException("no handler defined for type " + error.getClass() + " in cycle " + cycle + ", " + errMsg); }; private Class upperBound = Throwable.class; - private Map>> errorGroups = new ConcurrentHashMap<>(); - private Map, CycleErrorHandler> handlers = new ConcurrentHashMap<>(); - private Set> validClasses = new HashSet<>(); + private final Map>> errorGroups = new ConcurrentHashMap<>(); + private final Map, CycleErrorHandler> handlers = new ConcurrentHashMap<>(); + private final Set> validClasses = new HashSet<>(); private CycleErrorHandler defaultHandler = DEFAULT_defaultHandler; /** diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/SequencePlanner.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/SequencePlanner.java index 21b76095d..cb38258d9 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/SequencePlanner.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/planning/SequencePlanner.java @@ -17,15 +17,15 @@ package io.nosqlbench.engine.api.activityapi.planning; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.List; import java.util.function.ToLongFunction; public class SequencePlanner { - private final static Logger logger = LoggerFactory.getLogger(SequencePlanner.class); + private final static Logger logger = LogManager.getLogger(SequencePlanner.class); private final SequencerType sequencerType; private List elements = new ArrayList<>(); private final List ratios = new ArrayList<>(); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java index 5efd5c1f9..b97cf281c 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java @@ -21,8 +21,8 @@ import com.codahale.metrics.Gauge; import io.nosqlbench.engine.api.activityapi.core.Startable; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.concurrent.atomic.AtomicLong; @@ -78,7 +78,7 @@ import java.util.concurrent.atomic.AtomicLong; */ public class HybridRateLimiter implements Startable, RateLimiter { - private final static Logger logger = LoggerFactory.getLogger(HybridRateLimiter.class); + private final static Logger logger = LogManager.getLogger(HybridRateLimiter.class); private volatile TokenFiller filler; private volatile long starttime; @@ -98,7 +98,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { // diagnostics // TODO Doc rate limiter scenarios, including when you want to reset the waittime, and when you don't - private AtomicLong cumulativeWaitTimeNanos = new AtomicLong(0L); + private final AtomicLong cumulativeWaitTimeNanos = new AtomicLong(0L); protected HybridRateLimiter() { } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java index fdc8bbcb3..19ae2e494 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java @@ -19,11 +19,11 @@ package io.nosqlbench.engine.api.activityapi.ratelimits; import com.codahale.metrics.Gauge; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class RateLimiters { - private final static Logger logger = LoggerFactory.getLogger(RateLimiters.class); + private final static Logger logger = LogManager.getLogger(RateLimiters.class); public static synchronized RateLimiter createOrUpdate(ActivityDef def, String label, RateLimiter extant, RateSpec spec) { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateSpec.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateSpec.java index 91fd487f9..81018543a 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateSpec.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateSpec.java @@ -19,8 +19,8 @@ package io.nosqlbench.engine.api.activityapi.ratelimits; import io.nosqlbench.engine.api.activityimpl.ParameterMap; import io.nosqlbench.engine.api.util.Unit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** *

Rate Limiter Specifications

@@ -101,7 +101,7 @@ import org.slf4j.LoggerFactory; */ public class RateSpec { - private final static Logger logger = LoggerFactory.getLogger(RateSpec.class); + private final static Logger logger = LogManager.getLogger(RateSpec.class); public static final double DEFAULT_RATE_OPS_S = 1.0D; public static final double DEFAULT_BURST_RATIO = 1.1D; @@ -114,7 +114,7 @@ public class RateSpec { public double burstRatio = DEFAULT_BURST_RATIO; public Verb verb = Verb.start; - public static enum Verb { + public enum Verb { /** * Specify that a rate limiter should only be configured without affecting its running state. * If the rate limiter is already running, then the configuration should take effect immediately. @@ -223,8 +223,7 @@ public class RateSpec { RateSpec rateSpec = (RateSpec) o; if (Double.compare(rateSpec.opsPerSec, opsPerSec) != 0) return false; - if (Double.compare(rateSpec.burstRatio, burstRatio) != 0) return false; - return true; + return Double.compare(rateSpec.burstRatio, burstRatio) == 0; } @Override diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java index bc1933ed8..359996db3 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java @@ -20,14 +20,14 @@ package io.nosqlbench.engine.api.activityapi.ratelimits; import com.codahale.metrics.Timer; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.LockSupport; public class TokenFiller implements Runnable { - private final static Logger logger = LoggerFactory.getLogger(TokenFiller.class); + private final static Logger logger = LogManager.getLogger(TokenFiller.class); public final static double MIN_PER_SECOND = 10D; public final static double MAX_PER_SECOND = 1000D; @@ -40,7 +40,7 @@ public class TokenFiller implements Runnable { private RateSpec rateSpec; private Thread thread; private volatile long lastRefillAt; - private Timer timer; + private final Timer timer; /** * A token filler adds tokens to a {@link TokenPool} at some rate. diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java index f011774b1..1a37ab2ae 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.api.activityapi.ratelimits; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import static io.nosqlbench.engine.api.util.Colors.*; @@ -44,7 +44,7 @@ import static io.nosqlbench.engine.api.util.Colors.*; */ public class TokenPool { - private final static Logger logger = LoggerFactory.getLogger(TokenPool.class); + private final static Logger logger = LogManager.getLogger(TokenPool.class); public static final double MIN_CONCURRENT_OPS = 2; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerf.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerf.java index e5f64e208..7d13aaf04 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerf.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerf.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.api.activityapi.sysperf; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import org.yaml.snakeyaml.Yaml; import java.io.File; @@ -31,7 +31,7 @@ import java.nio.file.attribute.FileTime; import java.util.Optional; public class SysPerf { - public final static Logger logger = LoggerFactory.getLogger(SysPerf.class); + public final static Logger logger = LogManager.getLogger(SysPerf.class); private static final Charset CHARSET = StandardCharsets.UTF_8; private static SysPerfData cachedData; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerfBaseliner.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerfBaseliner.java index 224c66364..0cb22adc8 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerfBaseliner.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/sysperf/SysPerfBaseliner.java @@ -21,8 +21,8 @@ import org.openjdk.jmh.results.RunResult; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.nio.file.Files; import java.util.ArrayList; @@ -32,7 +32,7 @@ import java.util.Map; public class SysPerfBaseliner { - private final static Logger logger = LoggerFactory.getLogger(SysPerfBaseliner.class); + private final static Logger logger = LogManager.getLogger(SysPerfBaseliner.class); public static void main(String[] args) { try { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/ParsedStmt.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/ParsedStmt.java index fed3e8a09..34515067f 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/ParsedStmt.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/ParsedStmt.java @@ -20,8 +20,8 @@ package io.nosqlbench.engine.api.activityconfig; import io.nosqlbench.engine.api.activityconfig.yaml.StmtDef; import io.nosqlbench.virtdata.core.templates.BindPoint; import io.nosqlbench.virtdata.core.templates.ParsedTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.List; import java.util.Map; @@ -39,7 +39,7 @@ import java.util.regex.Pattern; public class ParsedStmt { private final static Pattern stmtToken = Pattern.compile("\\?(\\w+[-_\\d\\w]*)|\\{(\\w+[-_\\d\\w.]*)}"); - private final static Logger logger = LoggerFactory.getLogger(ParsedStmt.class); + private final static Logger logger = LogManager.getLogger(ParsedStmt.class); private ParsedTemplate template; private final StmtDef stmtDef; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/StatementsLoader.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/StatementsLoader.java index 54fd79cf3..2f85aa043 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/StatementsLoader.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/StatementsLoader.java @@ -22,15 +22,15 @@ import io.nosqlbench.engine.api.activityconfig.rawyaml.RawStmtsLoader; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; import io.nosqlbench.engine.api.templating.StrInterpolator; import io.nosqlbench.nb.api.content.Content; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Map; import java.util.function.Function; public class StatementsLoader { - private final static Logger logger = LoggerFactory.getLogger(StatementsLoader.class); + private final static Logger logger = LogManager.getLogger(StatementsLoader.class); public enum Loader { original, diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtFields.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtFields.java index 5c2d148cf..556586e08 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtFields.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtFields.java @@ -18,15 +18,15 @@ package io.nosqlbench.engine.api.activityconfig.rawyaml; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; public class RawStmtFields extends Tags { - private final static Logger logger = LoggerFactory.getLogger(RawStmtFields.class); + private final static Logger logger = LogManager.getLogger(RawStmtFields.class); private String name = ""; private String desc = ""; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsLoader.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsLoader.java index 2f11e5f95..87333535e 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsLoader.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawStmtsLoader.java @@ -4,7 +4,7 @@ import io.nosqlbench.engine.api.activityimpl.ActivityInitializationError; import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; +import org.apache.logging.log4j.Logger; import org.yaml.snakeyaml.Yaml; import java.util.*; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ActivityDef.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ActivityDef.java index d7b23bb04..ddcb689ea 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ActivityDef.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ActivityDef.java @@ -19,8 +19,8 @@ package io.nosqlbench.engine.api.activityimpl; import io.nosqlbench.engine.api.util.Unit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.security.InvalidParameterException; import java.util.Optional; @@ -43,7 +43,7 @@ public class ActivityDef { public static final String DEFAULT_ATYPE = "stdout "; public static final String DEFAULT_CYCLES = "0"; public static final int DEFAULT_THREADS = 1; - private final static Logger logger = LoggerFactory.getLogger(ActivityDef.class); + private final static Logger logger = LogManager.getLogger(ActivityDef.class); // an alias with which to control the activity while it is running private static final String FIELD_ALIAS = "alias"; // a file or URL containing the activity: statements, generator bindings, ... @@ -52,11 +52,11 @@ public class ActivityDef { private static final String FIELD_CYCLES = "cycles"; // initial thread concurrency for this activity private static final String FIELD_THREADS = "threads"; - private static String[] field_list = new String[]{ + private static final String[] field_list = new String[]{ FIELD_ALIAS, FIELD_ATYPE, FIELD_CYCLES, FIELD_THREADS }; // parameter map has its own internal atomic map - private ParameterMap parameterMap; + private final ParameterMap parameterMap; public ActivityDef(ParameterMap parameterMap) { this.parameterMap = parameterMap; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/CpuInfo.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/CpuInfo.java index 84b293d3c..56d085753 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/CpuInfo.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/CpuInfo.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.api.activityimpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import oshi.SystemInfo; import oshi.hardware.CentralProcessor; import oshi.hardware.HardwareAbstractionLayer; @@ -27,7 +27,7 @@ import java.util.DoubleSummaryStatistics; import java.util.Optional; public class CpuInfo { - private final static Logger logger = LoggerFactory.getLogger(CpuInfo.class); + private final static Logger logger = LogManager.getLogger(CpuInfo.class); final private static SystemInfo SYSTEM_INFO = new SystemInfo(); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ParameterMap.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ParameterMap.java index 8a542f7f7..d3b000e13 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ParameterMap.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/ParameterMap.java @@ -15,13 +15,13 @@ package io.nosqlbench.engine.api.activityimpl; -import io.nosqlbench.engine.api.activityimpl.motor.ParamsParser; +import io.nosqlbench.nb.api.config.ParamsParser; import io.nosqlbench.engine.api.util.Unit; import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.script.Bindings; import java.util.*; @@ -42,7 +42,7 @@ import java.util.stream.Collectors; * generic type is parameterized for Bindings support.

*/ public class ParameterMap extends ConcurrentHashMap implements Bindings, ProxyObject { - private final static Logger logger = LoggerFactory.getLogger(ParameterMap.class); + private final static Logger logger = LogManager.getLogger(ParameterMap.class); // private final ConcurrentHashMap paramMap = new ConcurrentHashMap<>(10); 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 9eed87e0e..884a7f569 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 @@ -20,8 +20,8 @@ import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.api.templating.CommandTemplate; import io.nosqlbench.engine.api.templating.StrInterpolator; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.InputStream; import java.io.PrintWriter; @@ -35,7 +35,7 @@ import java.util.function.Supplier; * A default implementation of an Activity, suitable for building upon. */ public class SimpleActivity implements Activity, ProgressCapable { - private final static Logger logger = LoggerFactory.getLogger("ACTIVITY"); + private final static Logger logger = LogManager.getLogger("ACTIVITY"); protected ActivityDef activityDef; private final List closeables = new ArrayList<>(); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SlotStateTracker.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SlotStateTracker.java index 81fc08958..9c156411a 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SlotStateTracker.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SlotStateTracker.java @@ -18,8 +18,8 @@ package io.nosqlbench.engine.api.activityimpl; import io.nosqlbench.engine.api.activityapi.core.RunState; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.concurrent.atomic.AtomicReference; @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicReference; */ public class SlotStateTracker { private final AtomicReference slotState = new AtomicReference<>(RunState.Uninitialized); - private final static Logger logger = LoggerFactory.getLogger(SlotStateTracker.class); + private final static Logger logger = LogManager.getLogger(SlotStateTracker.class); private final long slotId; public SlotStateTracker(long slotId) { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreAction.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreAction.java index eea69ceaa..a71dd0037 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreAction.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreAction.java @@ -19,11 +19,11 @@ package io.nosqlbench.engine.api.activityimpl.action; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; public class CoreAction implements SyncAction { - private final static Logger logger = LoggerFactory.getLogger(CoreAction.class); + private final static Logger logger = LogManager.getLogger(CoreAction.class); private final int interval; private final int slot; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreActionDispenser.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreActionDispenser.java index 618f6b036..2286edfda 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreActionDispenser.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/action/CoreActionDispenser.java @@ -19,17 +19,17 @@ package io.nosqlbench.engine.api.activityimpl.action; import io.nosqlbench.engine.api.activityapi.core.Action; import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityapi.core.Activity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * An action dispenser that returns a logging action. */ public class CoreActionDispenser implements ActionDispenser { - private final static Logger logger = LoggerFactory.getLogger(CoreActionDispenser.class); + private final static Logger logger = LogManager.getLogger(CoreActionDispenser.class); - private Activity activity; + private final Activity activity; public CoreActionDispenser(Activity activity) { this.activity = activity; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java index 5385d72c9..219b65641 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java @@ -22,8 +22,8 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegmen import io.nosqlbench.engine.api.activityapi.input.Input; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.util.Unit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.security.InvalidParameterException; import java.util.concurrent.atomic.AtomicLong; @@ -43,7 +43,7 @@ import java.util.concurrent.atomic.AtomicLong; * caller to check the value to determine when the input is deemed "used up."

*/ public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable { - private final static Logger logger = LoggerFactory.getLogger(AtomicInput.class); + private final static Logger logger = LogManager.getLogger(AtomicInput.class); private final AtomicLong cycleValue = new AtomicLong(0L); private final AtomicLong min = new AtomicLong(0L); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/marker/ContiguousOutputChunker.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/marker/ContiguousOutputChunker.java index fd5c95cb1..62cd7c319 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/marker/ContiguousOutputChunker.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/marker/ContiguousOutputChunker.java @@ -22,8 +22,8 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResult import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResultsIntervalSegment; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResultsSegment; import io.nosqlbench.engine.api.activityapi.output.Output; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.ArrayList; import java.util.List; @@ -53,16 +53,16 @@ import java.util.concurrent.locks.ReentrantLock; */ public class ContiguousOutputChunker implements Output { - private final static Logger logger = LoggerFactory.getLogger(ContiguousOutputChunker.class); + private final static Logger logger = LogManager.getLogger(ContiguousOutputChunker.class); private final int extentSize; private final int maxExtents; - private List readers = new ArrayList<>(); - private AtomicLong min; - private AtomicLong nextMin; - private AtomicReference markingExtents = new AtomicReference<>(); - private ReentrantLock lock = new ReentrantLock(false); - private Condition nowMarking = lock.newCondition(); - private Semaphore mutex = new Semaphore(1, false); + private final List readers = new ArrayList<>(); + private final AtomicLong min; + private final AtomicLong nextMin; + private final AtomicReference markingExtents = new AtomicReference<>(); + private final ReentrantLock lock = new ReentrantLock(false); + private final Condition nowMarking = lock.newCondition(); + private final Semaphore mutex = new Semaphore(1, false); public ContiguousOutputChunker(long min, long nextRangeMin, int extentSize, int maxExtents) { this.min = new AtomicLong(min); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java index 27c125faf..73a87d186 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java @@ -31,8 +31,8 @@ import io.nosqlbench.engine.api.activityapi.output.Output; import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.SlotStateTracker; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -52,9 +52,9 @@ import static io.nosqlbench.engine.api.activityapi.core.RunState.*; */ public class CoreMotor implements ActivityDefObserver, Motor, Stoppable { - private static final Logger logger = LoggerFactory.getLogger(CoreMotor.class); + private static final Logger logger = LogManager.getLogger(CoreMotor.class); - private long slotId; + private final long slotId; private Timer inputTimer; @@ -71,11 +71,11 @@ public class CoreMotor implements ActivityDefObserver, Motor, Stoppable { private Input input; private Action action; - private Activity activity; + private final Activity activity; private Output output; - private SlotStateTracker slotStateTracker; - private AtomicReference slotState; + private final SlotStateTracker slotStateTracker; + private final AtomicReference slotState; private int stride = 1; private OpTracker opTracker; @@ -237,7 +237,7 @@ public class CoreMotor implements ActivityDefObserver, Motor, Stoppable { @SuppressWarnings("unchecked") - AsyncAction async = AsyncAction.class.cast(action); + AsyncAction async = (AsyncAction) action; opTracker = new OpTrackerImpl<>(activity, slotId); opTracker.setCycleOpFunction(async.getOpInitFunction()); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/StrideTracker.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/StrideTracker.java index 2b3db2465..f17264c16 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/StrideTracker.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/StrideTracker.java @@ -24,15 +24,15 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.op_output.StrideOut import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResult; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResultsSegment; import io.nosqlbench.engine.api.activityapi.output.Output; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.Iterator; import java.util.List; import java.util.concurrent.TimeUnit; public class StrideTracker extends Buffer> implements OpEvents, CycleResultsSegment { - private final static Logger logger = LoggerFactory.getLogger(StrideTracker.class); + private final static Logger logger = LogManager.getLogger(StrideTracker.class); private final Timer strideServiceTimer; private final Timer strideResponseTimer; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/extensions/ScriptingPluginInfo.java b/engine-api/src/main/java/io/nosqlbench/engine/api/extensions/ScriptingPluginInfo.java index 4fd983bb7..42efd950a 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/extensions/ScriptingPluginInfo.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/extensions/ScriptingPluginInfo.java @@ -18,7 +18,7 @@ package io.nosqlbench.engine.api.extensions; import com.codahale.metrics.MetricRegistry; -import org.slf4j.Logger; +import org.apache.logging.log4j.Logger; import javax.script.ScriptContext; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ActivityMetrics.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ActivityMetrics.java index a6d3f55f8..2ebf5e9c3 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ActivityMetrics.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ActivityMetrics.java @@ -21,8 +21,8 @@ import com.codahale.metrics.*; import io.nosqlbench.engine.api.activityapi.core.MetricRegistryService; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.util.Unit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.script.ScriptContext; import java.io.File; @@ -35,7 +35,7 @@ import java.util.regex.Pattern; public class ActivityMetrics { - private final static Logger logger = LoggerFactory.getLogger(ActivityMetrics.class); + private final static Logger logger = LogManager.getLogger(ActivityMetrics.class); public static final String HDRDIGITS_PARAM = "hdr_digits"; public static final int DEFAULT_HDRDIGITS= 4; @@ -46,7 +46,7 @@ public class ActivityMetrics { public static MetricFilter METRIC_FILTER = (name, metric) -> { return true; }; - private static List metricsCloseables = new ArrayList<>(); + private static final List metricsCloseables = new ArrayList<>(); public static int getHdrDigits() { @@ -305,7 +305,7 @@ public class ActivityMetrics { } } - private static interface MetricProvider { + private interface MetricProvider { Metric getMetric(); } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicHistoListener.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicHistoListener.java index 1c5d0a0ec..35b24f290 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicHistoListener.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicHistoListener.java @@ -1,8 +1,8 @@ package io.nosqlbench.engine.api.metrics; import com.codahale.metrics.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.HashMap; import java.util.Map; @@ -10,15 +10,15 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; public class ClassicHistoListener extends CapabilityHook { - private final static Logger logger = LoggerFactory.getLogger(ClassicHistoListener.class); + private final static Logger logger = LogManager.getLogger(ClassicHistoListener.class); private final MetricRegistry metricsRegistry; - private String sessionName; - private String prefix; - private Pattern pattern; - private String interval; - private TimeUnit nanoseconds; - private Map histos = new HashMap<>(); + private final String sessionName; + private final String prefix; + private final Pattern pattern; + private final String interval; + private final TimeUnit nanoseconds; + private final Map histos = new HashMap<>(); public ClassicHistoListener(MetricRegistry metricRegistry, String sessionName, String prefix, Pattern pattern, String interval, TimeUnit nanoseconds) { this.metricsRegistry = metricRegistry; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicTimerListener.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicTimerListener.java index aca9b186e..e86008d27 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicTimerListener.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/ClassicTimerListener.java @@ -3,8 +3,8 @@ package io.nosqlbench.engine.api.metrics; import com.codahale.metrics.ExponentiallyDecayingReservoir; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.HashMap; import java.util.Map; @@ -12,15 +12,15 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; public class ClassicTimerListener extends CapabilityHook { - private final static Logger logger = LoggerFactory.getLogger(ClassicTimerListener.class); + private final static Logger logger = LogManager.getLogger(ClassicTimerListener.class); private final MetricRegistry metricsRegistry; - private String sessionName; - private String prefix; - private Pattern pattern; - private String interval; - private TimeUnit nanoseconds; - private Map histos = new HashMap<>(); + private final String sessionName; + private final String prefix; + private final Pattern pattern; + private final String interval; + private final TimeUnit nanoseconds; + private final Map histos = new HashMap<>(); public ClassicTimerListener(MetricRegistry metricRegistry, String sessionName, String prefix, Pattern pattern, String interval, TimeUnit nanoseconds) { this.metricsRegistry = metricRegistry; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/DeltaHdrHistogramReservoir.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/DeltaHdrHistogramReservoir.java index 8707dc1f1..8c0f510f1 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/DeltaHdrHistogramReservoir.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/DeltaHdrHistogramReservoir.java @@ -22,8 +22,8 @@ import com.codahale.metrics.Snapshot; import org.HdrHistogram.Histogram; import org.HdrHistogram.HistogramLogWriter; import org.HdrHistogram.Recorder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * A custom wrapping of snapshotting logic on the HdrHistogram. This histogram will always report the last histogram @@ -36,14 +36,14 @@ import org.slf4j.LoggerFactory; * */ public final class DeltaHdrHistogramReservoir implements Reservoir { - private final static Logger logger = LoggerFactory.getLogger(DeltaHdrHistogramReservoir.class); + private final static Logger logger = LogManager.getLogger(DeltaHdrHistogramReservoir.class); private final Recorder recorder; private Histogram lastHistogram; private Histogram intervalHistogram; private long intervalHistogramEndTime = System.currentTimeMillis(); - private String metricName; + private final String metricName; private HistogramLogWriter writer; /** diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoIntervalLogger.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoIntervalLogger.java index a98553ca3..1ac5fe668 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoIntervalLogger.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoIntervalLogger.java @@ -19,8 +19,8 @@ package io.nosqlbench.engine.api.metrics; import org.HdrHistogram.EncodableHistogram; import org.HdrHistogram.HistogramLogWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.File; import java.io.FileNotFoundException; @@ -36,22 +36,22 @@ import java.util.regex.Pattern; * logfile at the configured interval. */ public class HistoIntervalLogger extends CapabilityHook implements Runnable, MetricsCloseable { - private final static Logger logger = LoggerFactory.getLogger(HistoIntervalLogger.class); + private final static Logger logger = LogManager.getLogger(HistoIntervalLogger.class); private final String sessionName; // private final long intervalMillis; - private long intervalLength; + private final long intervalLength; public File getLogfile() { return logfile; } - private File logfile; + private final File logfile; private PrintStream logStream; private HistogramLogWriter writer; - private Pattern pattern; + private final Pattern pattern; - private List targets = new CopyOnWriteArrayList<>(); + private final List targets = new CopyOnWriteArrayList<>(); private PeriodicRunnable executor; private long lastRunTime; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoLogChartGenerator.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoLogChartGenerator.java index 826c9b751..fb96ea7cb 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoLogChartGenerator.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoLogChartGenerator.java @@ -10,8 +10,8 @@ package io.nosqlbench.engine.api.metrics; import com.mitchtalmadge.asciidata.graph.ASCIIGraph; import org.HdrHistogram.HistogramLogReader; import org.HdrHistogram.Histogram; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.File; import java.io.FileNotFoundException; @@ -29,8 +29,8 @@ public class HistoLogChartGenerator { public static final String ANSI_CYAN = "\u001B[36m"; public static final String ANSI_WHITE = "\u001B[37m"; - private static Map> histogramsOverTime = new HashMap<>(); - private static Logger logger = LoggerFactory.getLogger(HistoLogChartGenerator.class); + private static final Map> histogramsOverTime = new HashMap<>(); + private static final Logger logger = LogManager.getLogger(HistoLogChartGenerator.class); public static void generateChartFromHistoLog(HistoIntervalLogger histoIntervalLogger) { File logFile = histoIntervalLogger.getLogfile(); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsCSVWriter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsCSVWriter.java index f1d34ab8e..693c1c754 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsCSVWriter.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsCSVWriter.java @@ -18,8 +18,8 @@ package io.nosqlbench.engine.api.metrics; import org.HdrHistogram.Histogram; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.*; import java.util.Date; @@ -27,7 +27,7 @@ import java.util.Locale; import java.util.concurrent.TimeUnit; public class HistoStatsCSVWriter { - private final static Logger logger = LoggerFactory.getLogger(HistoStatsCSVWriter.class); + private final static Logger logger = LogManager.getLogger(HistoStatsCSVWriter.class); private final static String logFormatVersion = "1.0"; private final File csvfile; // FileWriter writer; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsLogger.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsLogger.java index 860953671..e323b864b 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsLogger.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/HistoStatsLogger.java @@ -19,8 +19,8 @@ package io.nosqlbench.engine.api.metrics; import org.HdrHistogram.EncodableHistogram; import org.HdrHistogram.Histogram; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.File; import java.util.List; @@ -36,17 +36,17 @@ import java.util.regex.Pattern; */ public class HistoStatsLogger extends CapabilityHook implements Runnable, MetricsCloseable { - private final static Logger logger = LoggerFactory.getLogger(HistoStatsLogger.class); + private final static Logger logger = LogManager.getLogger(HistoStatsLogger.class); private final String sessionName; private final TimeUnit timeUnit; // private final long intervalMillis; - private long intervalLength; - private File logfile; + private final long intervalLength; + private final File logfile; private HistoStatsCSVWriter writer; - private Pattern pattern; + private final Pattern pattern; - private List targets = new CopyOnWriteArrayList<>(); + private final List targets = new CopyOnWriteArrayList<>(); private PeriodicRunnable executor; private long lastRunTime=0L; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/PeriodicRunnable.java b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/PeriodicRunnable.java index 23ce5a1da..c7c0b0b4c 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/PeriodicRunnable.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/metrics/PeriodicRunnable.java @@ -17,17 +17,17 @@ package io.nosqlbench.engine.api.metrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; /** * This is a simple and light way to run a periodic task */ public class PeriodicRunnable implements Runnable, AutoCloseable { - private static Logger logger = LoggerFactory.getLogger(PeriodicRunnable.class); + private static final Logger logger = LogManager.getLogger(PeriodicRunnable.class); - private long intervalMillis; - private T action; + private final long intervalMillis; + private final T action; private Thread thread; private volatile boolean running = false; 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 b77e0b3c1..5eaf7b9dd 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 @@ -9,8 +9,8 @@ import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; import io.nosqlbench.nb.api.content.NBPathsAPI; import io.nosqlbench.nb.api.errors.BasicError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.io.IOException; import java.nio.file.FileSystems; @@ -28,7 +28,7 @@ public class NBCLIScenarioParser { public final static String VERBOSE_LOCKED = "==="; public final static String UNLOCKED = "="; - private final static Logger logger = LoggerFactory.getLogger(NBCLIScenarioParser.class); + private final static Logger logger = LogManager.getLogger(NBCLIScenarioParser.class); private static final String SEARCH_IN = "activities"; public static final String WORKLOAD_SCENARIO_STEP = "WORKLOAD_SCENARIO_STEP"; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java b/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java index 7622eab28..4a9572728 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.api.scripting; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.script.*; @@ -28,7 +28,7 @@ import javax.script.*; * @param generic parameter for return types from this evaluator */ public class NashornEvaluator implements Evaluator { - private final static Logger logger = LoggerFactory.getLogger(NashornEvaluator.class); + private final static Logger logger = LogManager.getLogger(NashornEvaluator.class); private static final ScriptEngineManager engineManager = new ScriptEngineManager(); private final ScriptEngine scriptEngine; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/templating/CommandTemplate.java b/engine-api/src/main/java/io/nosqlbench/engine/api/templating/CommandTemplate.java index 9c335f404..d8380b0bd 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/templating/CommandTemplate.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/templating/CommandTemplate.java @@ -1,13 +1,13 @@ package io.nosqlbench.engine.api.templating; import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import io.nosqlbench.engine.api.activityimpl.motor.ParamsParser; +import io.nosqlbench.nb.api.config.ParamsParser; import io.nosqlbench.virtdata.core.bindings.BindingsTemplate; import io.nosqlbench.virtdata.core.templates.ParsedTemplate; import io.nosqlbench.virtdata.core.templates.StringBindings; import io.nosqlbench.virtdata.core.templates.StringBindingsTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.function.Function; @@ -29,7 +29,7 @@ import java.util.function.Function; */ public class CommandTemplate { - private final static Logger logger = LoggerFactory.getLogger(CommandTemplate.class); + private final static Logger logger = LogManager.getLogger(CommandTemplate.class); private final String name; private final Map statics = new HashMap<>(); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SSLKsFactory.java b/engine-api/src/main/java/io/nosqlbench/engine/api/util/SSLKsFactory.java index 7975e62f4..0beb4dcaa 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SSLKsFactory.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/util/SSLKsFactory.java @@ -18,8 +18,8 @@ package io.nosqlbench.engine.api.util; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import javax.net.ServerSocketFactory; import javax.net.SocketFactory; @@ -40,7 +40,7 @@ import java.util.Optional; import java.util.regex.Pattern; public class SSLKsFactory { - private final static Logger logger = LoggerFactory.getLogger(SSLKsFactory.class); + private final static Logger logger = LogManager.getLogger(SSLKsFactory.class); private static final SSLKsFactory instance = new SSLKsFactory(); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java b/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java index 3b8ecafcf..b662ebc3c 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java @@ -18,8 +18,8 @@ package io.nosqlbench.engine.api.util; import io.nosqlbench.nb.spi.Named; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -27,7 +27,7 @@ import java.util.stream.Collectors; public class SimpleServiceLoader { - private static final Logger logger = LoggerFactory.getLogger(SimpleServiceLoader.class); + private static final Logger logger = LogManager.getLogger(SimpleServiceLoader.class); private final Class serviceType; private static SimpleServiceLoader instance; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/util/Unit.java b/engine-api/src/main/java/io/nosqlbench/engine/api/util/Unit.java index 85666b6a3..9769f08af 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/util/Unit.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/util/Unit.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.api.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import java.security.InvalidParameterException; import java.util.Optional; @@ -27,14 +27,14 @@ import java.util.regex.Pattern; public class Unit { - private final static Logger logger = LoggerFactory.getLogger(Unit.class); + private final static Logger logger = LogManager.getLogger(Unit.class); - private static Pattern numberFmtPattern = Pattern.compile(" *(?(?[0-9]+)(?\\.[0-9]+)?(?E[0-9]+)?) *(?[^ ]+?)? *"); - private static Pattern numberExponentPattern = Pattern.compile(" *(?
.*?)?(?([0-9]+)(\\.[0-9]+)?+)\\^(?[0-9]+)(?.*?)?");
+    private static final Pattern numberFmtPattern = Pattern.compile(" *(?(?[0-9]+)(?\\.[0-9]+)?(?E[0-9]+)?) *(?[^ ]+?)? *");
+    private static final Pattern numberExponentPattern = Pattern.compile(" *(?
.*?)?(?([0-9]+)(\\.[0-9]+)?+)\\^(?[0-9]+)(?.*?)?");
 
-    private static long nanoPerSecond = 1000000000;
-    private static long bytesPerGB = 1000000000;
-    private static long BytesPerGiB = 1024 * 1024 * 1024;
+    private static final long nanoPerSecond = 1000000000;
+    private static final long bytesPerGB = 1000000000;
+    private static final long BytesPerGiB = 1024 * 1024 * 1024;
 
     public static Optional msFor(String duration) {
         return durationFor(Duration.MS, duration);
@@ -90,7 +90,7 @@ public class Unit {
             double base= Double.valueOf(e.group("number"));
             double exponent = Double.valueOf(e.group("exponent"));
             double value= Math.pow(base, exponent);
-            spec = e.group("pre")+ String.valueOf(value) + e.group("post");
+            spec = e.group("pre")+ value + e.group("post");
         }
         Matcher m = numberFmtPattern.matcher(spec);
         if (m.matches()) {
@@ -181,7 +181,7 @@ public class Unit {
                     throw new InvalidParameterException("Exponent for powers of two must be 63 or less. It is " + exponent);
                 }
                 long value = 1L << exponent;
-                spec= exponentMatcher.group("pre") + String.valueOf(value) + exponentMatcher.group("post");
+                spec= exponentMatcher.group("pre") + value + exponentMatcher.group("post");
             } else {
                 spec= exponentMatcher.group("pre") + (long) Math.pow(number, exponent) + exponentMatcher.group("post");
             }
@@ -217,7 +217,7 @@ public class Unit {
 
     }
 
-    public static enum Count {
+    public enum Count {
         UNIT("U", "unit", 1.0),
         KILO("K", "kilo", 1000.0),
         MEGA("M", "mega", 1000000.0),
@@ -257,7 +257,7 @@ public class Unit {
         }
     }
 
-    public static enum Bytes {
+    public enum Bytes {
         BYTE("B", "byte", 1),
         KB("KB", "kilobyte", 1000),
         MB("MB", "megabyte", 1000000),
@@ -310,7 +310,7 @@ public class Unit {
         }
     }
 
-    public static enum Duration {
+    public enum Duration {
         SECOND("s", "seconds", nanoPerSecond),
         MS("ms", "milliseconds", 1000000),
         US("µs", "microseconds", 1000),
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/BindingEscapingTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/BindingEscapingTest.java
index e39cd303b..10413036c 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/BindingEscapingTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/BindingEscapingTest.java
@@ -19,15 +19,15 @@ package io.nosqlbench.engine.api.activityconfig.rawyaml;
 
 import io.nosqlbench.virtdata.core.bindings.DataMapper;
 import io.nosqlbench.virtdata.core.bindings.VirtData;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class BindingEscapingTest {
 
-    private final static Logger logger = LoggerFactory.getLogger(BindingEscapingTest.class);
+    private final static Logger logger = LogManager.getLogger(BindingEscapingTest.class);
 
     @Test
     public void testThatEscapesAreNotUnescapedInSingleQuotes() {
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawYamlStatementLoaderTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawYamlStatementLoaderTest.java
index bd6a16908..61fd88c27 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawYamlStatementLoaderTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/RawYamlStatementLoaderTest.java
@@ -17,8 +17,8 @@
 
 package io.nosqlbench.engine.api.activityconfig.rawyaml;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import java.util.List;
@@ -27,7 +27,7 @@ import java.util.Map;
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class RawYamlStatementLoaderTest {
-    private final static Logger logger = LoggerFactory.getLogger(RawYamlStatementLoaderTest.class);
+    private final static Logger logger = LogManager.getLogger(RawYamlStatementLoaderTest.class);
 
     @Test
     public void testLoadPropertiesBlock() {
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtDefTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtDefTest.java
index 5205a15c0..fd9aab188 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtDefTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtDefTest.java
@@ -23,8 +23,8 @@ import io.nosqlbench.engine.api.activityconfig.yaml.StmtsBlock;
 import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDoc;
 import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.List;
 import java.util.Map;
@@ -33,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class StmtDefTest {
 
-    private final static Logger logger = LoggerFactory.getLogger(StmtDefTest.class);
+    private final static Logger logger = LogManager.getLogger(StmtDefTest.class);
 
     @Test
     public void testLayering() {
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtEscapingTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtEscapingTest.java
index fd230ebdf..faf33cb97 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtEscapingTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtEscapingTest.java
@@ -20,8 +20,8 @@ package io.nosqlbench.engine.api.activityconfig.rawyaml;
 import io.nosqlbench.engine.api.activityconfig.StatementsLoader;
 import io.nosqlbench.engine.api.activityconfig.yaml.*;
 import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import java.util.List;
@@ -30,7 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class StmtEscapingTest {
 
-    private final static Logger logger = LoggerFactory.getLogger(StmtEscapingTest.class);
+    private final static Logger logger = LogManager.getLogger(StmtEscapingTest.class);
     private static List defs;
 
     @BeforeClass
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtVariationTests.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtVariationTests.java
index 8da316159..3b510b09a 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtVariationTests.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/rawyaml/StmtVariationTests.java
@@ -17,8 +17,8 @@
 
 package io.nosqlbench.engine.api.activityconfig.rawyaml;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import java.util.List;
@@ -27,7 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class StmtVariationTests {
 
-    private final static Logger logger = LoggerFactory.getLogger(StmtVariationTests.class);
+    private final static Logger logger = LogManager.getLogger(StmtVariationTests.class);
 
     @Test
     public void testListStmtsOnly() {
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/ParsedStmtTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/ParsedStmtTest.java
index 2d77e92cf..9ad188fb3 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/ParsedStmtTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/ParsedStmtTest.java
@@ -20,14 +20,14 @@ package io.nosqlbench.engine.api.activityconfig.yaml;
 import io.nosqlbench.engine.api.activityconfig.StatementsLoader;
 import io.nosqlbench.engine.api.activityconfig.ParsedStmt;
 import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class ParsedStmtTest {
-    private static final Logger logger = LoggerFactory.getLogger(ParsedStmtTest.class);
+    private static final Logger logger = LogManager.getLogger(ParsedStmtTest.class);
     private static StmtsDocList doclist;
 
     @BeforeClass
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtDetailOverrideTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtDetailOverrideTest.java
index 88230ae9d..5e61eaf17 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtDetailOverrideTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtDetailOverrideTest.java
@@ -18,8 +18,8 @@
 package io.nosqlbench.engine.api.activityconfig.yaml;
 
 import io.nosqlbench.engine.api.activityconfig.StatementsLoader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import java.util.List;
@@ -27,7 +27,7 @@ import java.util.List;
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class StmtDetailOverrideTest {
-    private static final Logger logger = LoggerFactory.getLogger(StmtDetailOverrideTest.class);
+    private static final Logger logger = LogManager.getLogger(StmtDetailOverrideTest.class);
 
     @Test
     public void testStmtOverrides() {
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocListTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocListTest.java
index 09c7f359b..4751bfcd9 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocListTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocListTest.java
@@ -20,8 +20,8 @@ package io.nosqlbench.engine.api.activityconfig.yaml;
 import io.nosqlbench.engine.api.activityconfig.StatementsLoader;
 import org.assertj.core.data.MapEntry;
 import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import java.util.LinkedHashMap;
@@ -32,19 +32,19 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class StmtsDocListTest {
 
-    private static final Logger logger = LoggerFactory.getLogger(StmtsDocListTest.class);
+    private static final Logger logger = LogManager.getLogger(StmtsDocListTest.class);
     private static StmtsDocList doclist;
 
-    private LinkedHashMap doc0bindings = new LinkedHashMap() {{
+    private final LinkedHashMap doc0bindings = new LinkedHashMap() {{
         put("b2", "b2d");
         put("b1", "b1d");
     }};
 
-    private LinkedHashMap doc0params = new LinkedHashMap() {{
+    private final LinkedHashMap doc0params = new LinkedHashMap() {{
         put("param1","value1");
     }};
 
-    private LinkedHashMap doc0tags = new LinkedHashMap() {{
+    private final LinkedHashMap doc0tags = new LinkedHashMap() {{
         put("atagname","atagvalue");
     }};
 
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/BasicScriptBuffer.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/BasicScriptBuffer.java
index 1e4e47414..d343b61d0 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/BasicScriptBuffer.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/BasicScriptBuffer.java
@@ -3,8 +3,8 @@ package io.nosqlbench.engine.cli;
 import io.nosqlbench.engine.api.templating.StrInterpolator;
 import io.nosqlbench.nb.api.content.Content;
 import io.nosqlbench.nb.api.content.NBIO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -14,7 +14,7 @@ import java.util.Map;
 
 public class BasicScriptBuffer implements ScriptBuffer {
 
-    private final static Logger logger = LoggerFactory.getLogger(Cmd.class);
+    private final static Logger logger = LogManager.getLogger(Cmd.class);
     private final List commands = new ArrayList<>();
     private final StringBuilder sb = new StringBuilder();
     private final Map scriptParams = new HashMap<>();
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/Cmd.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/Cmd.java
index 2c1a43eda..4538dfebd 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/Cmd.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/Cmd.java
@@ -1,7 +1,7 @@
 package io.nosqlbench.engine.cli;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.security.InvalidParameterException;
 import java.util.*;
@@ -14,7 +14,7 @@ import java.util.function.Function;
  */
 public class Cmd {
 
-    private final static Logger logger = LoggerFactory.getLogger(Cmd.class);
+    private final static Logger logger = LogManager.getLogger(Cmd.class);
 
     public enum CmdType {
         run(),
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 5549ae556..245d0e299 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
@@ -1,6 +1,5 @@
 package io.nosqlbench.engine.cli;
 
-import ch.qos.logback.classic.Level;
 import io.nosqlbench.docsys.core.DocServerApp;
 import io.nosqlbench.engine.api.activityapi.core.ActivityType;
 import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogDumperUtility;
@@ -10,7 +9,9 @@ import io.nosqlbench.engine.api.activityapi.output.OutputType;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
 import io.nosqlbench.engine.core.*;
 import io.nosqlbench.engine.core.annotation.Annotators;
-import io.nosqlbench.engine.core.metrics.GrafanaMetricsAnnotator;
+import io.nosqlbench.engine.core.logging.LoggerConfig;
+import io.nosqlbench.engine.core.logging.SessionLogConfig;
+import io.nosqlbench.engine.core.logging.ScenarioLogger;
 import io.nosqlbench.engine.core.metrics.MetricReporters;
 import io.nosqlbench.engine.core.script.MetricsMapper;
 import io.nosqlbench.engine.core.script.Scenario;
@@ -24,8 +25,10 @@ import io.nosqlbench.nb.api.errors.BasicError;
 import io.nosqlbench.nb.api.logging.NBLogLevel;
 import io.nosqlbench.nb.api.markdown.exporter.MarkdownExporter;
 import io.nosqlbench.virtdata.userlibs.apps.VirtDataMainApp;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import joptsimple.internal.Strings;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.config.ConfigurationFactory;
 
 import java.io.BufferedReader;
 import java.io.IOException;
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 ec047e94f..0d597a14a 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
@@ -1,9 +1,10 @@
 package io.nosqlbench.engine.cli;
 
+import io.nosqlbench.nb.api.Environment;
 import io.nosqlbench.nb.api.errors.BasicError;
 import joptsimple.internal.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -55,7 +56,7 @@ import java.util.stream.Collectors;
  * will cause an error to be thrown.
  */
 public class NBCLIArgsFile {
-    private final static Logger logger = LoggerFactory.getLogger("ARGSFILE");
+    private final static Logger logger = LogManager.getLogger("ARGSFILE");
 
     // Options which may contextualize other CLI options or commands.
     // These must be parsed first
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 f8e5c1308..b94d9e913 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
@@ -1,12 +1,13 @@
 package io.nosqlbench.engine.cli;
 
-import ch.qos.logback.classic.Level;
 import io.nosqlbench.engine.api.metrics.IndicatorMode;
 import io.nosqlbench.engine.api.util.Unit;
 import io.nosqlbench.engine.core.script.Scenario;
+import io.nosqlbench.nb.api.Environment;
+import io.nosqlbench.nb.api.logging.NBLogLevel;
 import io.nosqlbench.nb.api.errors.BasicError;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.io.File;
 import java.io.IOException;
@@ -23,7 +24,7 @@ import java.util.stream.Collectors;
  */
 public class NBCLIOptions {
 
-    private final static Logger logger = LoggerFactory.getLogger("OPTIONS");
+    private final static Logger logger = LogManager.getLogger("OPTIONS");
 
     private final static String NB_STATE_DIR = "--statedir";
     private final static String NB_STATEDIR_PATHS = "$NBSTATEDIR:$PWD/.nosqlbench:$HOME/.nosqlbench";
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/PathCanonicalizer.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/PathCanonicalizer.java
index 6ddb1b090..725bbbf47 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/PathCanonicalizer.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/PathCanonicalizer.java
@@ -2,14 +2,14 @@ package io.nosqlbench.engine.cli;
 
 import io.nosqlbench.nb.api.content.Content;
 import io.nosqlbench.nb.api.content.NBIO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.nio.file.FileSystems;
 import java.util.Optional;
 
 public class PathCanonicalizer {
-    private final static Logger logger = LoggerFactory.getLogger(Cmd.class);
+    private final static Logger logger = LogManager.getLogger(Cmd.class);
 
     private final String[] includes;
 
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java
index daa80c130..6b0a55a88 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java
@@ -18,8 +18,8 @@ import io.nosqlbench.engine.api.activityapi.core.*;
 import io.nosqlbench.engine.api.activityimpl.ActivityDef;
 import io.nosqlbench.engine.api.activityimpl.ParameterMap;
 import io.nosqlbench.engine.api.activityimpl.input.ProgressCapable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.*;
 import java.util.concurrent.ExecutorService;
@@ -46,8 +46,8 @@ import java.util.stream.Collectors;
 
 public class ActivityExecutor implements ActivityController, ParameterMap.Listener, ProgressCapable {
 
-    private static final Logger logger = LoggerFactory.getLogger(ActivityExecutor.class);
-    private static final Logger activitylogger = LoggerFactory.getLogger("ACTIVITY");
+    private static final Logger logger = LogManager.getLogger(ActivityExecutor.class);
+    private static final Logger activitylogger = LogManager.getLogger("ACTIVITY");
 
     private final List> motors = new ArrayList<>();
     private final Activity activity;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityProgressIndicator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityProgressIndicator.java
index b4d325767..85a26fcd3 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityProgressIndicator.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityProgressIndicator.java
@@ -22,8 +22,8 @@ import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
 import io.nosqlbench.engine.api.metrics.IndicatorMode;
 import io.nosqlbench.engine.api.metrics.PeriodicRunnable;
 import io.nosqlbench.engine.api.util.Unit;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.Collection;
 import java.util.HashSet;
@@ -32,7 +32,7 @@ import java.util.Set;
 
 public class ActivityProgressIndicator implements Runnable {
 
-    private final static Logger logger = LoggerFactory.getLogger(ActivityProgressIndicator.class);
+    private final static Logger logger = LogManager.getLogger(ActivityProgressIndicator.class);
     private final String indicatorSpec;
     private final ScenarioController sc;
     private PeriodicRunnable runnable;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/MarkdownDocInfo.java b/engine-core/src/main/java/io/nosqlbench/engine/core/MarkdownDocInfo.java
index 1a714a464..4fa7d545e 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/MarkdownDocInfo.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/MarkdownDocInfo.java
@@ -3,17 +3,13 @@ package io.nosqlbench.engine.core;
 import io.nosqlbench.engine.api.activityapi.core.ActivityType;
 import io.nosqlbench.nb.api.content.Content;
 import io.nosqlbench.nb.api.content.NBIO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.Optional;
 
 public class MarkdownDocInfo {
-    private final static Logger logger = LoggerFactory.getLogger(MarkdownDocInfo.class);
+    private final static Logger logger = LogManager.getLogger(MarkdownDocInfo.class);
 
     public static Optional forHelpTopic(String topic) {
         String help = null;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/PolyglotScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/PolyglotScenarioController.java
index f332f93dc..cd9b0fca4 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/PolyglotScenarioController.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/PolyglotScenarioController.java
@@ -1,17 +1,16 @@
 package io.nosqlbench.engine.core;
 
 import io.nosqlbench.engine.api.activityimpl.ActivityDef;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.graalvm.polyglot.Value;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.helpers.AttributesImpl;
 
 import java.security.InvalidParameterException;
 import java.util.Map;
 
 public class PolyglotScenarioController {
 
-    private static final Logger logger = LoggerFactory.getLogger("SCENARIO/POLYGLOT");
+    private static final Logger logger = LogManager.getLogger("SCENARIO/POLYGLOT");
 
     private final ScenarioController controller;
 
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioController.java
index 337240fb5..9566333a3 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioController.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioController.java
@@ -21,8 +21,8 @@ import io.nosqlbench.engine.api.activityimpl.ParameterMap;
 import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
 import io.nosqlbench.nb.api.errors.BasicError;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.security.InvalidParameterException;
 import java.util.*;
@@ -34,8 +34,8 @@ import java.util.stream.Collectors;
  */
 public class ScenarioController {
 
-    private static final Logger logger = LoggerFactory.getLogger(ScenarioController.class);
-    private static final Logger scenariologger = LoggerFactory.getLogger("SCENARIO");
+    private static final Logger logger = LogManager.getLogger(ScenarioController.class);
+    private static final Logger scenariologger = LogManager.getLogger("SCENARIO");
 
     private final Map activityExecutors = new ConcurrentHashMap<>();
 
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioErrorHandler.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioErrorHandler.java
index f831b0930..b149f4dff 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioErrorHandler.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioErrorHandler.java
@@ -2,8 +2,8 @@ package io.nosqlbench.engine.core;
 
 import io.nosqlbench.nb.api.errors.BasicError;
 import org.graalvm.polyglot.PolyglotException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import javax.script.ScriptException;
 
@@ -26,7 +26,7 @@ import javax.script.ScriptException;
  */
 public class ScenarioErrorHandler {
 
-    private final static Logger logger = LoggerFactory.getLogger(ScenarioErrorHandler.class);
+    private final static Logger logger = LogManager.getLogger(ScenarioErrorHandler.class);
 
     public static String handle(Throwable t, boolean wantsStackTraces) {
         if (t instanceof ScriptException) {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java
index 3f2b58065..61e491e01 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java
@@ -19,17 +19,17 @@
 package io.nosqlbench.engine.core;
 
 import com.codahale.metrics.MetricFilter;
-import com.codahale.metrics.Slf4jReporter;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import io.nosqlbench.engine.core.logging.Log4JMetricsReporter;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
 public class ScenarioResult {
 
-    private final static Logger logger = LoggerFactory.getLogger(ScenarioResult.class);
+    private final static Logger logger = LogManager.getLogger(ScenarioResult.class);
 
     private Exception exception;
     private final String iolog;
@@ -45,7 +45,7 @@ public class ScenarioResult {
 
     public void reportToLog() {
         logger.info("-- BEGIN METRICS DETAIL --");
-        Slf4jReporter reporter = Slf4jReporter.forRegistry(ActivityMetrics.getMetricRegistry())
+        Log4JMetricsReporter reporter = Log4JMetricsReporter.forRegistry(ActivityMetrics.getMetricRegistry())
                 .convertDurationsTo(TimeUnit.MICROSECONDS)
                 .convertRatesTo(TimeUnit.SECONDS)
                 .filter(MetricFilter.ALL)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java
index 85ebacb85..bcaa05a26 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java
@@ -19,15 +19,15 @@ package io.nosqlbench.engine.core;
 
 import io.nosqlbench.engine.core.script.Scenario;
 import io.nosqlbench.engine.core.script.ScenariosExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 public class ScenariosResults {
 
-    private static final Logger logger = LoggerFactory.getLogger(ScenariosResults.class);
+    private static final Logger logger = LogManager.getLogger(ScenariosResults.class);
 
     private final String scenariosExecutorName;
     private final Map scenarioResultMap = new LinkedHashMap<>();
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/Log4JMetricsReporter.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/Log4JMetricsReporter.java
new file mode 100644
index 000000000..d7d7ab6f6
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/Log4JMetricsReporter.java
@@ -0,0 +1,418 @@
+package io.nosqlbench.engine.core.logging;
+
+import com.codahale.metrics.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.Marker;
+
+import java.util.Map.Entry;
+import java.util.SortedMap;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * This is a Log4J targeted metrics logging reporter, derived from
+ * {@link com.codahale.metrics.Slf4jReporter}. This implementation
+ * was built to allow for consolidating internal logging dependencies
+ * to log4j only.
+ */
+public class Log4JMetricsReporter extends ScheduledReporter {
+    /**
+     * Returns a new {@link Builder} for {@link Log4JMetricsReporter}.
+     *
+     * @param registry the registry to report
+     * @return a {@link Builder} instance for a {@link Log4JMetricsReporter}
+     */
+    public static Builder forRegistry(MetricRegistry registry) {
+        return new Builder(registry);
+    }
+
+    public enum LoggingLevel { TRACE, DEBUG, INFO, WARN, ERROR }
+
+    /**
+     * A builder for {@link Log4JMetricsReporter} instances. Defaults to logging to {@code metrics}, not
+     * using a marker, converting rates to events/second, converting durations to milliseconds, and
+     * not filtering metrics.
+     */
+    public static class Builder {
+        private final MetricRegistry registry;
+        private Logger logger;
+        private LoggingLevel loggingLevel;
+        private Marker marker;
+        private String prefix;
+        private TimeUnit rateUnit;
+        private TimeUnit durationUnit;
+        private MetricFilter filter;
+        private ScheduledExecutorService executor;
+        private boolean shutdownExecutorOnStop;
+
+        private Builder(MetricRegistry registry) {
+            this.registry = registry;
+            this.logger = LogManager.getLogger("metrics");
+            this.marker = null;
+            this.prefix = "";
+            this.rateUnit = TimeUnit.SECONDS;
+            this.durationUnit = TimeUnit.MILLISECONDS;
+            this.filter = MetricFilter.ALL;
+            this.loggingLevel = LoggingLevel.INFO;
+            this.executor = null;
+            this.shutdownExecutorOnStop = true;
+        }
+
+        /**
+         * Specifies whether or not, the executor (used for reporting) will be stopped with same time with reporter.
+         * Default value is true.
+         * Setting this parameter to false, has the sense in combining with providing external managed executor via {@link #scheduleOn(ScheduledExecutorService)}.
+         *
+         * @param shutdownExecutorOnStop if true, then executor will be stopped in same time with this reporter
+         * @return {@code this}
+         */
+        public Builder shutdownExecutorOnStop(boolean shutdownExecutorOnStop) {
+            this.shutdownExecutorOnStop = shutdownExecutorOnStop;
+            return this;
+        }
+
+        /**
+         * Specifies the executor to use while scheduling reporting of metrics.
+         * Default value is null.
+         * Null value leads to executor will be auto created on start.
+         *
+         * @param executor the executor to use while scheduling reporting of metrics.
+         * @return {@code this}
+         */
+        public Builder scheduleOn(ScheduledExecutorService executor) {
+            this.executor = executor;
+            return this;
+        }
+
+        /**
+         * Log metrics to the given logger.
+         *
+         * @param logger an SLF4J {@link Logger}
+         * @return {@code this}
+         */
+        public Builder outputTo(Logger logger) {
+            this.logger = logger;
+            return this;
+        }
+
+        /**
+         * Mark all logged metrics with the given marker.
+         *
+         * @param marker an SLF4J {@link Marker}
+         * @return {@code this}
+         */
+        public Builder markWith(Marker marker) {
+            this.marker = marker;
+            return this;
+        }
+
+        /**
+         * Prefix all metric names with the given string.
+         *
+         * @param prefix the prefix for all metric names
+         * @return {@code this}
+         */
+        public Builder prefixedWith(String prefix) {
+            this.prefix = prefix;
+            return this;
+        }
+
+        /**
+         * Convert rates to the given time unit.
+         *
+         * @param rateUnit a unit of time
+         * @return {@code this}
+         */
+        public Builder convertRatesTo(TimeUnit rateUnit) {
+            this.rateUnit = rateUnit;
+            return this;
+        }
+
+        /**
+         * Convert durations to the given time unit.
+         *
+         * @param durationUnit a unit of time
+         * @return {@code this}
+         */
+        public Builder convertDurationsTo(TimeUnit durationUnit) {
+            this.durationUnit = durationUnit;
+            return this;
+        }
+
+        /**
+         * Only report metrics which match the given filter.
+         *
+         * @param filter a {@link MetricFilter}
+         * @return {@code this}
+         */
+        public Builder filter(MetricFilter filter) {
+            this.filter = filter;
+            return this;
+        }
+
+        /**
+         * Use Logging Level when reporting.
+         *
+         * @param loggingLevel a (@link Slf4jReporter.LoggingLevel}
+         * @return {@code this}
+         */
+        public Builder withLoggingLevel(LoggingLevel loggingLevel) {
+            this.loggingLevel = loggingLevel;
+            return this;
+        }
+
+        /**
+         * Builds a {@link Log4JMetricsReporter} with the given properties.
+         *
+         * @return a {@link Log4JMetricsReporter}
+         */
+        public Log4JMetricsReporter build() {
+            LoggerProxy loggerProxy;
+            switch (loggingLevel) {
+                case TRACE:
+                    loggerProxy = new TraceLoggerProxy(logger);
+                    break;
+                case INFO:
+                    loggerProxy = new InfoLoggerProxy(logger);
+                    break;
+                case WARN:
+                    loggerProxy = new WarnLoggerProxy(logger);
+                    break;
+                case ERROR:
+                    loggerProxy = new ErrorLoggerProxy(logger);
+                    break;
+                default:
+                case DEBUG:
+                    loggerProxy = new DebugLoggerProxy(logger);
+                    break;
+            }
+            return new Log4JMetricsReporter(registry, loggerProxy, marker, prefix, rateUnit, durationUnit, filter, executor, shutdownExecutorOnStop);
+        }
+    }
+
+    private final LoggerProxy loggerProxy;
+    private final Marker marker;
+    private final String prefix;
+
+    private Log4JMetricsReporter(MetricRegistry registry,
+                                 LoggerProxy loggerProxy,
+                                 Marker marker,
+                                 String prefix,
+                                 TimeUnit rateUnit,
+                                 TimeUnit durationUnit,
+                                 MetricFilter filter,
+                                 ScheduledExecutorService executor,
+                                 boolean shutdownExecutorOnStop) {
+        super(registry, "logger-reporter", filter, rateUnit, durationUnit, executor, shutdownExecutorOnStop);
+        this.loggerProxy = loggerProxy;
+        this.marker = marker;
+        this.prefix = prefix;
+    }
+
+    @Override
+    @SuppressWarnings("rawtypes")
+    public void report(SortedMap gauges,
+                       SortedMap counters,
+                       SortedMap histograms,
+                       SortedMap meters,
+                       SortedMap timers) {
+        if (loggerProxy.isEnabled(marker)) {
+            for (Entry entry : gauges.entrySet()) {
+                logGauge(entry.getKey(), entry.getValue());
+            }
+
+            for (Entry entry : counters.entrySet()) {
+                logCounter(entry.getKey(), entry.getValue());
+            }
+
+            for (Entry entry : histograms.entrySet()) {
+                logHistogram(entry.getKey(), entry.getValue());
+            }
+
+            for (Entry entry : meters.entrySet()) {
+                logMeter(entry.getKey(), entry.getValue());
+            }
+
+            for (Entry entry : timers.entrySet()) {
+                logTimer(entry.getKey(), entry.getValue());
+            }
+        }
+    }
+
+    private void logTimer(String name, Timer timer) {
+        final Snapshot snapshot = timer.getSnapshot();
+        loggerProxy.log(marker,
+                "type={}, name={}, count={}, min={}, max={}, mean={}, stddev={}, median={}, " +
+                        "p75={}, p95={}, p98={}, p99={}, p999={}, mean_rate={}, m1={}, m5={}, " +
+                        "m15={}, rate_unit={}, duration_unit={}",
+                "TIMER",
+                prefix(name),
+                timer.getCount(),
+                convertDuration(snapshot.getMin()),
+                convertDuration(snapshot.getMax()),
+                convertDuration(snapshot.getMean()),
+                convertDuration(snapshot.getStdDev()),
+                convertDuration(snapshot.getMedian()),
+                convertDuration(snapshot.get75thPercentile()),
+                convertDuration(snapshot.get95thPercentile()),
+                convertDuration(snapshot.get98thPercentile()),
+                convertDuration(snapshot.get99thPercentile()),
+                convertDuration(snapshot.get999thPercentile()),
+                convertRate(timer.getMeanRate()),
+                convertRate(timer.getOneMinuteRate()),
+                convertRate(timer.getFiveMinuteRate()),
+                convertRate(timer.getFifteenMinuteRate()),
+                getRateUnit(),
+                getDurationUnit());
+    }
+
+    private void logMeter(String name, Meter meter) {
+        loggerProxy.log(marker,
+                "type={}, name={}, count={}, mean_rate={}, m1={}, m5={}, m15={}, rate_unit={}",
+                "METER",
+                prefix(name),
+                meter.getCount(),
+                convertRate(meter.getMeanRate()),
+                convertRate(meter.getOneMinuteRate()),
+                convertRate(meter.getFiveMinuteRate()),
+                convertRate(meter.getFifteenMinuteRate()),
+                getRateUnit());
+    }
+
+    private void logHistogram(String name, Histogram histogram) {
+        final Snapshot snapshot = histogram.getSnapshot();
+        loggerProxy.log(marker,
+                "type={}, name={}, count={}, min={}, max={}, mean={}, stddev={}, " +
+                        "median={}, p75={}, p95={}, p98={}, p99={}, p999={}",
+                "HISTOGRAM",
+                prefix(name),
+                histogram.getCount(),
+                snapshot.getMin(),
+                snapshot.getMax(),
+                snapshot.getMean(),
+                snapshot.getStdDev(),
+                snapshot.getMedian(),
+                snapshot.get75thPercentile(),
+                snapshot.get95thPercentile(),
+                snapshot.get98thPercentile(),
+                snapshot.get99thPercentile(),
+                snapshot.get999thPercentile());
+    }
+
+    private void logCounter(String name, Counter counter) {
+        loggerProxy.log(marker, "type={}, name={}, count={}", "COUNTER", prefix(name), counter.getCount());
+    }
+
+    private void logGauge(String name, Gauge gauge) {
+        loggerProxy.log(marker, "type={}, name={}, value={}", "GAUGE", prefix(name), gauge.getValue());
+    }
+
+    @Override
+    protected String getRateUnit() {
+        return "events/" + super.getRateUnit();
+    }
+
+    private String prefix(String... components) {
+        return MetricRegistry.name(prefix, components);
+    }
+
+    /* private class to allow logger configuration */
+    static abstract class LoggerProxy {
+        protected final Logger logger;
+
+        public LoggerProxy(Logger logger) {
+            this.logger = logger;
+        }
+
+        abstract void log(Marker marker, String format, Object... arguments);
+
+        abstract boolean isEnabled(Marker marker);
+    }
+
+    /* private class to allow logger configuration */
+    private static class DebugLoggerProxy extends LoggerProxy {
+        public DebugLoggerProxy(Logger logger) {
+            super(logger);
+        }
+
+        @Override
+        public void log(Marker marker, String format, Object... arguments) {
+            logger.debug(marker, format, arguments);
+        }
+
+        @Override
+        public boolean isEnabled(Marker marker) {
+            return logger.isDebugEnabled(marker);
+        }
+    }
+
+    /* private class to allow logger configuration */
+    private static class TraceLoggerProxy extends LoggerProxy {
+        public TraceLoggerProxy(Logger logger) {
+            super(logger);
+        }
+
+        @Override
+        public void log(Marker marker, String format, Object... arguments) {
+            logger.trace(marker, format, arguments);
+        }
+
+        @Override
+        public boolean isEnabled(Marker marker) {
+            return logger.isTraceEnabled(marker);
+        }
+    }
+
+    /* private class to allow logger configuration */
+    private static class InfoLoggerProxy extends LoggerProxy {
+        public InfoLoggerProxy(Logger logger) {
+            super(logger);
+        }
+
+        @Override
+        public void log(Marker marker, String format, Object... arguments) {
+            logger.info(marker, format, arguments);
+        }
+
+        @Override
+        public boolean isEnabled(Marker marker) {
+            return logger.isInfoEnabled(marker);
+        }
+    }
+
+    /* private class to allow logger configuration */
+    private static class WarnLoggerProxy extends LoggerProxy {
+        public WarnLoggerProxy(Logger logger) {
+            super(logger);
+        }
+
+        @Override
+        public void log(Marker marker, String format, Object... arguments) {
+            logger.warn(marker, format, arguments);
+        }
+
+        @Override
+        public boolean isEnabled(Marker marker) {
+            return logger.isWarnEnabled(marker);
+        }
+    }
+
+    /* private class to allow logger configuration */
+    private static class ErrorLoggerProxy extends LoggerProxy {
+        public ErrorLoggerProxy(Logger logger) {
+            super(logger);
+        }
+
+        @Override
+        public void log(Marker marker, String format, Object... arguments) {
+            logger.error(marker, format, arguments);
+        }
+
+        @Override
+        public boolean isEnabled(Marker marker) {
+            return logger.isErrorEnabled(marker);
+        }
+    }
+
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricMap.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricMap.java
index e5b444c64..69c314050 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricMap.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricMap.java
@@ -3,13 +3,13 @@ package io.nosqlbench.engine.core.metrics;
 import com.codahale.metrics.Metric;
 import org.graalvm.polyglot.Value;
 import org.graalvm.polyglot.proxy.ProxyObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import java.util.*;
 
 public class MetricMap implements ProxyObject {
 
-    private final static Logger logger = LoggerFactory.getLogger(MetricMap.class);
+    private final static Logger logger = LogManager.getLogger(MetricMap.class);
     private final String name;
     private final String parent_name;
     private final HashMap map = new HashMap<>();
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java
index 8574f6edb..1b0a072ec 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java
@@ -23,8 +23,9 @@ import com.codahale.metrics.graphite.GraphiteReporter;
 import io.nosqlbench.engine.api.activityapi.core.Shutdownable;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
 import io.nosqlbench.engine.core.ShutdownManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import io.nosqlbench.engine.core.logging.Log4JMetricsReporter;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.io.File;
 import java.net.InetSocketAddress;
@@ -34,7 +35,7 @@ import java.util.Locale;
 import java.util.concurrent.TimeUnit;
 
 public class MetricReporters implements Shutdownable {
-    private final static Logger logger = LoggerFactory.getLogger(MetricReporters.class);
+    private final static Logger logger = LogManager.getLogger(MetricReporters.class);
     private static final MetricReporters instance = new MetricReporters();
 
     private final List metricRegistries = new ArrayList<>();
@@ -123,13 +124,14 @@ public class MetricReporters implements Shutdownable {
 
         for (PrefixedRegistry prefixedRegistry : metricRegistries) {
 
-            Slf4jReporter loggerReporter = Slf4jReporter.forRegistry(prefixedRegistry.metricRegistry)
+            Log4JMetricsReporter reporter4j = Log4JMetricsReporter.forRegistry(prefixedRegistry.metricRegistry)
                     .convertRatesTo(TimeUnit.SECONDS)
                     .convertDurationsTo(TimeUnit.NANOSECONDS)
                     .filter(ActivityMetrics.METRIC_FILTER)
                     .outputTo(logger)
                     .build();
-            scheduledReporters.add(loggerReporter);
+
+            scheduledReporters.add(reporter4j);
         }
         return this;
     }
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java
index 9b8d2879e..eb361ab8e 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java
@@ -20,19 +20,19 @@ package io.nosqlbench.engine.core.metrics;
 import com.codahale.metrics.*;
 import com.codahale.metrics.Timer;
 import io.nosqlbench.engine.core.script.ReadOnlyBindings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.*;
 import java.util.stream.Collectors;
 
 public class NashornMetricRegistryBindings extends ReadOnlyBindings implements MetricRegistryListener {
 
-    private final static Logger logger = LoggerFactory.getLogger(NashornMetricRegistryBindings.class);
+    private final static Logger logger = LogManager.getLogger(NashornMetricRegistryBindings.class);
 
     private final MetricRegistry registry;
-    private MetricMap metricMap = new MetricMap("ROOT");
-    private boolean failfast = true;
+    private final MetricMap metricMap = new MetricMap("ROOT");
+    private final boolean failfast = true;
 
     public NashornMetricRegistryBindings(MetricRegistry registry) {
         this.registry = registry;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java
index beb4e327f..883f2b88f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java
@@ -17,22 +17,20 @@
 
 package io.nosqlbench.engine.core.metrics;
 
-import com.codahale.metrics.Timer;
 import com.codahale.metrics.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.graalvm.polyglot.Value;
 import org.graalvm.polyglot.proxy.ProxyObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
-import java.util.Set;
 
 /**
  * A view of metrics objects as an object tree.
  */
 public class PolyglotMetricRegistryBindings implements ProxyObject, MetricRegistryListener {
 
-    private final static Logger logger = LoggerFactory.getLogger(PolyglotMetricRegistryBindings.class);
+    private final static Logger logger = LogManager.getLogger(PolyglotMetricRegistryBindings.class);
 
     private final MetricRegistry registry;
     MetricMap metrics = new MetricMap("ROOT",null);
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java
index 30822b3b9..361e67411 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java
@@ -20,8 +20,8 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityType;
 import io.nosqlbench.engine.api.activityimpl.ActivityDef;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
 import io.nosqlbench.engine.core.metrics.NashornMetricRegistryBindings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.lang.reflect.Method;
 import java.util.*;
@@ -34,8 +34,8 @@ import java.util.stream.Collectors;
  * Find the metrics associated with an activity type by instantiating the activity in idle mode.
  */
 public class MetricsMapper {
-    private final static Logger logger = LoggerFactory.getLogger(MetricsMapper.class);
-    private static Set> metricsElements = new HashSet<>() {{
+    private final static Logger logger = LogManager.getLogger(MetricsMapper.class);
+    private static final Set> metricsElements = new HashSet<>() {{
         add(Meter.class);
         add(Counter.class);
         add(Timer.class);
@@ -43,12 +43,12 @@ public class MetricsMapper {
         add(Gauge.class);
         add(Snapshot.class);
     }};
-    private static Predicate isSimpleGetter = method ->
+    private static final Predicate isSimpleGetter = method ->
             method.getName().startsWith("get")
                     && method.getParameterCount() == 0
                     && !method.getName().equals("getClass");
 
-    private static Function getPropertyName = method ->
+    private static final Function getPropertyName = method ->
     {
         String mName = method.getName().substring(3, 4).toLowerCase() + method.getName().substring(4);
         return mName;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
index 3c8a49e1e..046a36019 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
@@ -14,20 +14,33 @@
  */
 package io.nosqlbench.engine.core.script;
 
-import ch.qos.logback.classic.Logger;
 import com.codahale.metrics.MetricRegistry;
 import com.oracle.truffle.js.scriptengine.GraalJSScriptEngine;
-import io.nosqlbench.engine.core.*;
-import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
-import io.nosqlbench.engine.core.metrics.NashornMetricRegistryBindings;
 import io.nosqlbench.engine.api.scripting.ScriptEnvBuffer;
+import io.nosqlbench.engine.core.ActivityProgressIndicator;
+import io.nosqlbench.engine.core.PolyglotScenarioController;
+import io.nosqlbench.engine.core.ScenarioController;
+import io.nosqlbench.engine.core.ScenarioResult;
+import io.nosqlbench.engine.core.annotation.Annotators;
+import io.nosqlbench.engine.core.logging.ScenarioLogger;
+import io.nosqlbench.engine.core.metrics.NashornMetricRegistryBindings;
+import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings;
+import io.nosqlbench.nb.api.Layer;
+import io.nosqlbench.nb.api.annotations.Annotation;
 import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
-import org.graalvm.polyglot.*;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.graalvm.polyglot.Context;
+import org.graalvm.polyglot.EnvironmentAccess;
+import org.graalvm.polyglot.HostAccess;
+import org.graalvm.polyglot.PolyglotAccess;
 
-import javax.script.*;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -46,7 +59,7 @@ import java.util.stream.Collectors;
 
 public class Scenario implements Callable {
 
-    private static final Logger logger = (Logger) LoggerFactory.getLogger("SCENARIO");
+    private static final Logger logger = LogManager.getLogger("SCENARIO");
 
     private State state = State.Scheduled;
 
@@ -202,8 +215,8 @@ public class Scenario implements Callable {
                 continue;
             }
 
-            org.slf4j.Logger extensionLogger =
-                LoggerFactory.getLogger("extensions." + extensionDescriptor.getBaseVariableName());
+            Logger extensionLogger =
+                LogManager.getLogger("extensions." + extensionDescriptor.getBaseVariableName());
             Object extensionObject = extensionDescriptor.getExtensionObject(
                 extensionLogger,
                 metricRegistry,
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java
index 26a8ab152..6a0c2927f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java
@@ -17,18 +17,24 @@
 
 package io.nosqlbench.engine.core.script;
 
+import io.nosqlbench.engine.core.IndexedThreadFactory;
+import io.nosqlbench.engine.core.ScenarioController;
+import io.nosqlbench.engine.core.ScenarioResult;
+import io.nosqlbench.engine.core.ScenariosResults;
+import io.nosqlbench.engine.core.logging.SessionLogConfig;
+import io.nosqlbench.engine.core.logging.ScenarioLogger;
 import io.nosqlbench.nb.api.errors.BasicError;
-import io.nosqlbench.engine.core.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
+import java.nio.file.Path;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.stream.Collectors;
 
 public class ScenariosExecutor {
 
-    private final static Logger logger = LoggerFactory.getLogger(ScenariosExecutor.class);
+    private final static Logger logger = LogManager.getLogger(ScenariosExecutor.class);
     private final LinkedHashMap submitted = new LinkedHashMap<>();
 
     private final ExecutorService executor;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScriptParams.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScriptParams.java
index eae775033..622ff3a78 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScriptParams.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScriptParams.java
@@ -17,20 +17,17 @@
 
 package io.nosqlbench.engine.core.script;
 
-import ch.qos.logback.classic.Logger;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import io.nosqlbench.nb.api.errors.BasicError;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.graalvm.polyglot.Value;
-import org.graalvm.polyglot.proxy.Proxy;
 import org.graalvm.polyglot.proxy.ProxyObject;
-import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Flow;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -39,7 +36,7 @@ import java.util.stream.Collectors;
  */
 public class ScriptParams extends HashMap implements ProxyObject {
 
-    private static final Logger logger = (Logger) LoggerFactory.getLogger(ScriptParams.class);
+    private static final Logger logger = LogManager.getLogger(ScriptParams.class);
     private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
 
     public ScriptParams withOverrides(Object overrides) {
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java
index daa6bed16..f0c2c33ed 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java
@@ -12,8 +12,8 @@ import io.nosqlbench.engine.api.activityimpl.input.CoreInputDispenser;
 import io.nosqlbench.engine.api.activityimpl.input.AtomicInput;
 import io.nosqlbench.engine.api.activityimpl.motor.CoreMotor;
 import io.nosqlbench.engine.api.activityimpl.motor.CoreMotorDispenser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.junit.Test;
 
 import java.util.Optional;
@@ -35,7 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 *   limitations under the License.
 */
 public class ActivityExecutorTest {
-    private static final Logger logger = LoggerFactory.getLogger(ActivityExecutorTest.class);
+    private static final Logger logger = LogManager.getLogger(ActivityExecutorTest.class);
 
     @Test
     public void testRestart() {
@@ -148,7 +148,7 @@ public class ActivityExecutorTest {
     }
 
     private static class DelayedInitActivity extends SimpleActivity {
-        private static Logger logger = LoggerFactory.getLogger(DelayedInitActivity.class);
+        private static final Logger logger = LogManager.getLogger(DelayedInitActivity.class);
 
         public DelayedInitActivity(ActivityDef activityDef) {
             super(activityDef);
diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
index 812b737b4..b18a8855b 100644
--- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
+++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
@@ -12,8 +12,8 @@ import com.github.dockerjava.core.command.LogContainerResultCallback;
 import com.github.dockerjava.core.command.PullImageResultCallback;
 import com.github.dockerjava.okhttp.OkHttpDockerCmdExecFactory;
 import com.sun.security.auth.module.UnixSystem;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -30,7 +30,7 @@ public class DockerHelper {
 
     private final DockerClientConfig config;
     private final DockerClient dockerClient;
-    private final Logger logger = LoggerFactory.getLogger(DockerHelper.class);
+    private final Logger logger = LogManager.getLogger(DockerHelper.class);
 
     public DockerHelper() {
         System.getProperties().setProperty(DOCKER_HOST, DOCKER_HOST_ADDR);
diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
index eac7a6edd..3cf593765 100644
--- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
+++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
@@ -14,8 +14,8 @@ import com.github.dockerjava.core.async.ResultCallbackTemplate;
 import com.github.dockerjava.core.command.LogContainerResultCallback;
 import io.nosqlbench.nb.api.content.Content;
 import io.nosqlbench.nb.api.content.NBIO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.io.*;
 import java.nio.file.Files;
@@ -34,7 +34,7 @@ public class DockerMetricsManager {
 
     String userHome = System.getProperty("user.home");
 
-    private final Logger logger = LoggerFactory.getLogger(DockerMetricsManager.class);
+    private final Logger logger = LogManager.getLogger(DockerMetricsManager.class);
 
     public DockerMetricsManager() {
         dh = new DockerHelper();
diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/RestHelper.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/RestHelper.java
index 2dd3fc03c..323a67818 100644
--- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/RestHelper.java
+++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/RestHelper.java
@@ -1,9 +1,8 @@
 package io.nosqlbench.engine.docker;
 
-import io.nosqlbench.nb.api.content.NBIO;
 import io.nosqlbench.nb.api.errors.BasicError;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.net.URI;
 import java.net.http.HttpClient;
@@ -13,7 +12,7 @@ import java.util.Base64;
 import java.util.function.Supplier;
 
 public class RestHelper {
-    private static Logger logger = LoggerFactory.getLogger(RestHelper.class);
+    private static final Logger logger = LogManager.getLogger(RestHelper.class);
 
     static HttpClient.Builder clientBuilder = HttpClient.newBuilder();
     static HttpClient httpClient = clientBuilder.build();
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetrics.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetrics.java
index 983944c20..d05bffe14 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetrics.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetrics.java
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.csvmetrics;
 import com.codahale.metrics.CsvReporter;
 import com.codahale.metrics.Metric;
 import com.codahale.metrics.MetricRegistry;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.concurrent.TimeUnit;
@@ -90,7 +90,7 @@ public class CSVMetrics {
         return this;
     }
 
-    private MetricInstanceFilter filter = new MetricInstanceFilter();
+    private final MetricInstanceFilter filter = new MetricInstanceFilter();
 
     public CSVMetrics stop() {
         reporter.stop();
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPlugin.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPlugin.java
index 083e2b62f..f6f4bb69e 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPlugin.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPlugin.java
@@ -18,7 +18,7 @@
 package io.nosqlbench.engine.extensions.csvmetrics;
 
 import com.codahale.metrics.MetricRegistry;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 import java.io.IOException;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java
index 90b127d5c..4ea0f8a54 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.csvmetrics;
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
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 231abe85b..76e04dd61 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
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.example;
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java
index e1b82d94f..cada7c61a 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.files;
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingPluginData.java
index f0435ec70..977aa1002 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingPluginData.java
@@ -4,7 +4,7 @@ import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
 import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 import java.util.concurrent.ConcurrentHashMap;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPlugin.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPlugin.java
index 9f620e572..c4b5ba203 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPlugin.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPlugin.java
@@ -19,14 +19,14 @@ package io.nosqlbench.engine.extensions.histologger;
 
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
 public class HdrHistoLogPlugin {
-    private Logger logger;
-    private MetricRegistry metricRegistry;
-    private ScriptContext scriptContext;
+    private final Logger logger;
+    private final MetricRegistry metricRegistry;
+    private final ScriptContext scriptContext;
 
     public HdrHistoLogPlugin(Logger logger, MetricRegistry metricRegistry, ScriptContext scriptContext) {
         this.logger = logger;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java
index 54fd1848b..12358340f 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.histologger;
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPlugin.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPlugin.java
index 25530b804..50bd667f9 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPlugin.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPlugin.java
@@ -19,15 +19,15 @@ package io.nosqlbench.engine.extensions.histostatslogger;
 
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
 public class HistoStatsPlugin {
 
-    private Logger logger;
-    private MetricRegistry metricRegistry;
-    private ScriptContext scriptContext;
+    private final Logger logger;
+    private final MetricRegistry metricRegistry;
+    private final ScriptContext scriptContext;
 
     public HistoStatsPlugin(Logger logger, MetricRegistry metricRegistry, ScriptContext scriptContext) {
         this.logger = logger;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java
index 143243d35..b511736f7 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.histostatslogger;
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java
index bfaf28171..98b4063c8 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java
@@ -2,9 +2,8 @@ package io.nosqlbench.engine.extensions.http;
 
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
-import io.nosqlbench.engine.extensions.optimizers.BobyqaOptimizerPlugin;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java
index 951b0faac..58366bdfc 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java
@@ -24,7 +24,7 @@ import org.apache.commons.math3.optim.*;
 import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;
 import org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction;
 import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 import java.util.Arrays;
@@ -41,7 +41,7 @@ public class BobyqaOptimizerInstance {
     private double initialTrustRegionRadius = Double.MAX_VALUE;
     private double stoppingTrustRegionRadius = 1.0D;
 
-    private MVParams params = new MVParams();
+    private final MVParams params = new MVParams();
 
     private MultivariateFunction objectiveFunctionFromScript;
     private SimpleBounds bounds;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPlugin.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPlugin.java
index 52ff2385b..c8e23ab63 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPlugin.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPlugin.java
@@ -18,7 +18,7 @@
 package io.nosqlbench.engine.extensions.optimizers;
 
 import com.codahale.metrics.MetricRegistry;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java
index 5cdc97fe8..c7e1cb139 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.optimizers;
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java
index 808cc924e..b8a1231a7 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java
@@ -2,7 +2,7 @@ package io.nosqlbench.engine.extensions.optimizers;
 
 import jdk.nashorn.api.scripting.ScriptObjectMirror;
 import org.apache.commons.math3.analysis.MultivariateFunction;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import java.security.InvalidParameterException;
 import java.util.HashMap;
@@ -11,7 +11,7 @@ import java.util.Map;
 public class MultivariateArrayScript implements MultivariateFunction {
     private final ScriptObjectMirror script;
     private final MVParams params;
-    private Logger logger;
+    private final Logger logger;
 
     public MultivariateArrayScript(Logger logger, MVParams params, ScriptObjectMirror script) {
         this.logger = logger;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java
index a5d4d3f58..59bc90855 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java
@@ -2,7 +2,7 @@ package io.nosqlbench.engine.extensions.optimizers;
 
 import jdk.nashorn.api.scripting.ScriptObjectMirror;
 import org.apache.commons.math3.analysis.MultivariateFunction;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import java.security.InvalidParameterException;
 import java.util.Arrays;
@@ -10,7 +10,7 @@ import java.util.Arrays;
 public class MultivariateDynamicScript implements MultivariateFunction {
     private final ScriptObjectMirror script;
     private final int varcount;
-    private Logger logger;
+    private final Logger logger;
 
     public MultivariateDynamicScript(Logger logger, int varcount, ScriptObjectMirror script) {
         this.logger = logger;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java
index 2a0cd70a0..a4d2940c5 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java
@@ -2,7 +2,7 @@ package io.nosqlbench.engine.extensions.optimizers;
 
 import jdk.nashorn.api.scripting.ScriptObjectMirror;
 import org.apache.commons.math3.analysis.MultivariateFunction;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import java.security.InvalidParameterException;
 import java.util.HashMap;
@@ -11,7 +11,7 @@ import java.util.Map;
 public class NashornMultivariateObjectScript implements MultivariateFunction {
     private final ScriptObjectMirror script;
     private final MVParams params;
-    private Logger logger;
+    private final Logger logger;
 
     public NashornMultivariateObjectScript(Logger logger, MVParams params, ScriptObjectMirror script) {
         this.logger = logger;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/PolyglotMultivariateObjectScript.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/PolyglotMultivariateObjectScript.java
index c4d9be30d..03532c39e 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/PolyglotMultivariateObjectScript.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/PolyglotMultivariateObjectScript.java
@@ -2,7 +2,7 @@ package io.nosqlbench.engine.extensions.optimizers;
 
 import org.apache.commons.math3.analysis.MultivariateFunction;
 import org.graalvm.polyglot.proxy.ProxyObject;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import java.security.InvalidParameterException;
 import java.util.HashMap;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java
index 5918f541a..2f9785dba 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java
@@ -19,14 +19,14 @@ package io.nosqlbench.engine.extensions.scriptingmetrics;
 
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
 public class ScriptingMetrics {
-    private Logger logger;
-    private MetricRegistry metricRegistry;
-    private ScriptContext scriptContext;
+    private final Logger logger;
+    private final MetricRegistry metricRegistry;
+    private final ScriptContext scriptContext;
 
     public ScriptingMetrics(Logger logger, MetricRegistry metricRegistry, ScriptContext scriptContext) {
 
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java
index 1547a5caf..5596ed36b 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java
@@ -20,7 +20,7 @@ package io.nosqlbench.engine.extensions.scriptingmetrics;
 import com.codahale.metrics.MetricRegistry;
 import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo;
 import io.nosqlbench.nb.annotations.Service;
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import javax.script.ScriptContext;
 
diff --git a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java
index 276f3b494..d28f7fdae 100644
--- a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java
+++ b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java
@@ -5,8 +5,9 @@ import io.nosqlbench.engine.cli.BasicScriptBuffer;
 import io.nosqlbench.engine.cli.Cmd;
 import io.nosqlbench.engine.cli.NBCLICommandParser;
 import io.nosqlbench.engine.cli.ScriptBuffer;
-import io.nosqlbench.engine.core.ScenarioLogger;
 import io.nosqlbench.engine.core.ScenarioResult;
+import io.nosqlbench.engine.core.logging.SessionLogConfig;
+import io.nosqlbench.engine.core.logging.ScenarioLogger;
 import io.nosqlbench.engine.core.script.Scenario;
 import io.nosqlbench.engine.core.script.ScenariosExecutor;
 import io.nosqlbench.engine.rest.services.WorkSpace;
@@ -45,7 +46,7 @@ public class ScenarioExecutorEndpoint implements WebServiceObject {
     public synchronized Response cancelScenario(@PathParam("scenario") String scenario) {
         try {
             executor.deleteScenario(scenario);
-            return Response.ok("canceled '" + scenario +"' and removed it").build();
+            return Response.ok("canceled '" + scenario + "' and removed it").build();
         } catch (Exception e) {
             return Response.serverError().entity(e.getMessage()).build();
         }
@@ -57,8 +58,8 @@ public class ScenarioExecutorEndpoint implements WebServiceObject {
     @Produces(MediaType.APPLICATION_JSON)
     public synchronized Response stopScenario(@PathParam("scenario") String scenario) {
         try {
-            executor.stopScenario(scenario,false);
-            return Response.ok("stopped '" + scenario +"' without removing it").build();
+            executor.stopScenario(scenario, false);
+            return Response.ok("stopped '" + scenario + "' without removing it").build();
         } catch (Exception e) {
             return Response.serverError().entity(e.getMessage()).build();
         }
@@ -77,9 +78,9 @@ public class ScenarioExecutorEndpoint implements WebServiceObject {
             rq.setScenarioName("scenario" + System.currentTimeMillis());
         }
         org.joda.time.format.DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmssSSS");
-        name=name.replaceAll("EPOCHMS", String.valueOf(System.currentTimeMillis()));
-        name=name.replaceAll("DATESTAMP", dtf.print(new DateTime()));
-        name=name.replaceAll("[:/ ]","");
+        name = name.replaceAll("EPOCHMS", String.valueOf(System.currentTimeMillis()));
+        name = name.replaceAll("DATESTAMP", dtf.print(new DateTime()));
+        name = name.replaceAll("[:/ ]", "");
         rq.setScenarioName(name);
 
         WorkSpace workspace = new WorkspaceFinder(config).getWorkspace(rq.getWorkspace());
@@ -103,24 +104,25 @@ public class ScenarioExecutorEndpoint implements WebServiceObject {
         buffer.add(cmdList.toArray(new Cmd[0]));
 
         Scenario scenario = new Scenario(
-            rq.getScenarioName(),
-            "",
-            Scenario.Engine.Graalvm,
-            "disabled",
-            false,
-            true,
-            false
+                rq.getScenarioName(),
+                "",
+                Scenario.Engine.Graalvm,
+                "disabled",
+                false,
+                true,
+                false
         );
 
         scenario.addScriptText(buffer.getParsedScript());
 
-        ScenarioLogger logger = new ScenarioLogger(scenario)
-            .setLogDir(workspace.getWorkspacePath().resolve("logs").toString());
+        ScenarioLogger logger = new SessionLogConfig(scenario.getScenarioName())
+                .setLogDir(workspace.getWorkspacePath().resolve("logs"))
+                .start();
 
         executor.execute(scenario, logger);
 
         return Response.created(UriBuilder.fromResource(ScenarioExecutorEndpoint.class).path(
-            "scenario/" + rq.getScenarioName()).build()).entity("started").build();
+                "scenario/" + rq.getScenarioName()).build()).entity("started").build();
 
     }
 
diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml
index 7d44e8a69..e3711bf9e 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -110,19 +110,13 @@
             
                 org.apache.logging.log4j
                 log4j-api
-                ${log4j.version}
+              2.13.3
             
 
             
                 org.apache.logging.log4j
                 log4j-core
-                ${log4j.version}
-            
-
-            
-                ch.qos.logback
-                logback-classic
-                ${logback.version}
+              2.13.3
             
 
             
@@ -161,11 +155,11 @@
             ${commons.text.version}
           
 
-            
-                org.slf4j
-                slf4j-api
-                ${slf4j.version}
-            
+          
+          
+          
+          
+          
 
           
             org.openjdk.jmh
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java
index 07a562c2e..ff7891f8e 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java
@@ -1,6 +1,6 @@
 package io.nosqlbench.nb.api.config;
 
-import org.slf4j.Logger;
+import org.apache.logging.log4j.Logger;
 
 import java.util.*;
 import java.util.function.BiConsumer;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/content/PathFinder.java b/nb-api/src/main/java/io/nosqlbench/nb/api/content/PathFinder.java
index 4c5eb4b16..fc478809b 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/content/PathFinder.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/content/PathFinder.java
@@ -1,8 +1,8 @@
 package io.nosqlbench.nb.api.content;
 
 import io.nosqlbench.nb.api.errors.BasicError;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -20,7 +20,7 @@ import java.util.stream.Collectors;
  */
 public class PathFinder {
 
-    private final static Logger logger = LoggerFactory.getLogger(PathFinder.class);
+    private final static Logger logger = LogManager.getLogger(PathFinder.class);
 
     /**
      * Find exactly zero or one matching Paths, and return an {@link Optional} of {@link Path}.
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/content/ResolverForURL.java b/nb-api/src/main/java/io/nosqlbench/nb/api/content/ResolverForURL.java
index f533bec0f..53f609848 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/content/ResolverForURL.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/content/ResolverForURL.java
@@ -1,22 +1,20 @@
 package io.nosqlbench.nb.api.content;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URL;
 import java.nio.file.Path;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
 public class ResolverForURL implements ContentResolver {
 
     public static final ContentResolver INSTANCE = new ResolverForURL();
-    private final static Logger logger = LoggerFactory.getLogger(ResolverForURL.class);
+    private final static Logger logger = LogManager.getLogger(ResolverForURL.class);
 
     @Override
     public List> resolve(URI uri) {
diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java
index 37e822d81..dddc9c0a3 100644
--- a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java
+++ b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java
@@ -17,9 +17,10 @@
 
 package io.nosqlbench.engine.core.script;
 
-import io.nosqlbench.engine.core.ScenarioLogger;
 import io.nosqlbench.engine.core.ScenarioResult;
 import io.nosqlbench.engine.core.ScenariosResults;
+import io.nosqlbench.engine.core.logging.SessionLogConfig;
+import io.nosqlbench.engine.core.logging.ScenarioLogger;
 import org.apache.commons.compress.utils.IOUtils;
 import org.assertj.core.data.Offset;
 import org.junit.BeforeClass;
diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/NBCliIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/NBCliIntegrationTests.java
index 47743eb8d..13476189f 100644
--- a/nb/src/test/java/io/nosqlbench/engine/core/script/NBCliIntegrationTests.java
+++ b/nb/src/test/java/io/nosqlbench/engine/core/script/NBCliIntegrationTests.java
@@ -20,8 +20,8 @@ package io.nosqlbench.engine.core.script;
 import io.nosqlbench.cli.testing.ProcessInvoker;
 import io.nosqlbench.cli.testing.ProcessResult;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.Optional;
 
@@ -30,7 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 public class NBCliIntegrationTests {
 
     private final static String JARNAME = "target/nb.jar";
-    private Logger logger = LoggerFactory.getLogger(NBCliIntegrationTests.class);
+    private final Logger logger = LogManager.getLogger(NBCliIntegrationTests.class);
     private final String java = Optional.ofNullable(System.getenv(
         "JAVA_HOME")).map(v -> v+"/bin/java").orElse("java");
 
diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java
index 49c3e2542..5d210b544 100644
--- a/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java
+++ b/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java
@@ -17,9 +17,10 @@
 
 package io.nosqlbench.engine.core.script;
 
-import io.nosqlbench.engine.core.ScenarioLogger;
 import io.nosqlbench.engine.core.ScenarioResult;
 import io.nosqlbench.engine.core.ScenariosResults;
+import io.nosqlbench.engine.core.logging.SessionLogConfig;
+import io.nosqlbench.engine.core.logging.ScenarioLogger;
 import org.apache.commons.compress.utils.IOUtils;
 import org.assertj.core.data.Offset;
 import org.junit.BeforeClass;
@@ -28,6 +29,7 @@ import org.junit.Test;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -62,7 +64,10 @@ public class ScriptIntegrationTests {
         }
         s.addScriptText(script);
 //        s.addScriptText("load('classpath:scripts/sync/" + scriptname + ".js');");
-        ScenarioLogger scenarioLogger = new ScenarioLogger(s).setMaxLogs(0).setLogDir("logs/test").start();
+        ScenarioLogger scenarioLogger = new SessionLogConfig(scenarioName)
+                .setMaxLogs(0)
+                .setLogDir(Path.of("logs/test"))
+                .start();
         e.execute(s, scenarioLogger);
         ScenariosResults scenariosResults = e.awaitAllResults();
         ScenarioResult scenarioResult = scenariosResults.getOne();

From c2cec2357ce787ec9c682046aa688786f960f6a3 Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 16 Nov 2020 17:30:30 -0600
Subject: [PATCH 036/164] allow configurable delimiter in params parser

---
 .../nb/api/config}/ParamsParser.java          | 23 +++++++++++--------
 .../activityimpl/motor/ParamsParserTest.java  |  1 +
 2 files changed, 14 insertions(+), 10 deletions(-)
 rename {engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor => nb-api/src/main/java/io/nosqlbench/nb/api/config}/ParamsParser.java (93%)
 rename {engine-api => nb-api}/src/test/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParserTest.java (99%)

diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParser.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ParamsParser.java
similarity index 93%
rename from engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParser.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/config/ParamsParser.java
index 06fb16af4..6c9402ae0 100644
--- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParser.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ParamsParser.java
@@ -15,11 +15,10 @@
  * /
  */
 
-package io.nosqlbench.engine.api.activityimpl.motor;
+package io.nosqlbench.nb.api.config;
 
-import io.nosqlbench.nb.api.config.Synonyms;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.*;
 
@@ -74,9 +73,13 @@ import java.util.*;
  *
  */
 public class ParamsParser {
-    private final static Logger logger = LoggerFactory.getLogger(ParamsParser.class);
+    private final static Logger logger = LogManager.getLogger(ParamsParser.class);
 
 
+    public static Map parse(String input, boolean canonicalize) {
+        return parse(input, "=:", canonicalize);
+    }
+
     /**
      * Parse a string input as a loose-form param=value list, and be reasonable about formatting
      * conventions that most users would follow in the absence of detailed rules.
@@ -86,7 +89,7 @@ public class ParamsParser {
      * @param canonicalize Whether or not to replace synonyms with modern forms and to warn when old forms are used
      * @return A map of extracted keys and values
      */
-    public static Map parse(String input, boolean canonicalize) {
+    public static Map parse(String input, String assignmentCharacters, boolean canonicalize) {
 
         ParseState s = ParseState.expectingName;
 
@@ -131,13 +134,13 @@ public class ParamsParser {
                         isEscaped = true;
                     } else if (c == ' ') {
                         String partial = parms.get(lastVarname);
-                        if (partial==null) {
+                        if (partial == null) {
                             throw new RuntimeException("space continuation while reading name or value, but no prior " +
-                                "for " + lastVarname + " exists");
+                                    "for " + lastVarname + " exists");
                         }
-                        parms.put(lastVarname,partial+" "+varname);
+                        parms.put(lastVarname, partial + " " + varname);
                         varname.setLength(0);
-                    } else if (c != '=') {
+                    } else if (assignmentCharacters.indexOf(c) == -1) {
                         varname.append(c);
                     } else {
                         s = ParseState.expectingVal;
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParserTest.java b/nb-api/src/test/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParserTest.java
similarity index 99%
rename from engine-api/src/test/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParserTest.java
rename to nb-api/src/test/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParserTest.java
index 6f1803a93..45a4ab40a 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParserTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/engine/api/activityimpl/motor/ParamsParserTest.java
@@ -17,6 +17,7 @@
 
 package io.nosqlbench.engine.api.activityimpl.motor;
 
+import io.nosqlbench.nb.api.config.ParamsParser;
 import org.junit.Test;
 
 import java.util.Map;

From 317ffab49c2d1b0defb0170b1874defc1a990483 Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 16 Nov 2020 17:35:04 -0600
Subject: [PATCH 037/164] api for annotations

---
 devdocs/sketches/annotations.md               |  76 ++++++++---
 .../java/io/nosqlbench/engine/cli/NBCLI.java  |  20 ++-
 .../engine/core/annotation/Annotators.java    | 128 +++++++++++++-----
 .../engine/core/metrics/OnError.java          |  15 ++
 .../engine/core/script/Scenario.java          |  13 +-
 .../main/java/io/nosqlbench/nb/api/Layer.java |  38 ++++++
 .../nb/api/annotation/Annotator.java          |  43 ------
 .../nb/api/annotations/Annotation.java        |  76 +++++++++++
 .../nb/api/annotations/AnnotationBuilder.java |  77 +++++++++++
 .../nb/api/annotations/Annotator.java         |  21 +++
 .../nb/api/annotations/BuilderFacets.java     |  58 ++++++++
 .../nb/api/annotations/MutableAnnotation.java | 121 +++++++++++++++++
 .../annotations/AnnotationBuilderTest.java    |  45 ++++++
 13 files changed, 624 insertions(+), 107 deletions(-)
 create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/metrics/OnError.java
 create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java
 delete mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/annotation/Annotator.java
 create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java
 create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java
 create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java
 create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java
 create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java
 create mode 100644 nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java

diff --git a/devdocs/sketches/annotations.md b/devdocs/sketches/annotations.md
index fbc8008a9..6dacbf3c9 100644
--- a/devdocs/sketches/annotations.md
+++ b/devdocs/sketches/annotations.md
@@ -4,7 +4,7 @@ NOTE: Here, annotations are notes that are stored in a metrics system for
 review, not _Java Annotations_.
 
 The annotations support in nosqlbench is meant to allow for automatic
- annotation of important timestamps and qualifying details for a
+ grafanaAnnotation of important timestamps and qualifying details for a
   nosqlbench scenario.
 
 # Annotation Semantics
@@ -18,38 +18,72 @@ Annotations always have at least one timestamp, and up to two
 . Annotations with one timestamp mark an instant where an event
  is known to have occurred.
 
-When instrumenting an event for annotation, both positive and negative
+When instrumenting an event for grafanaAnnotation, both positive and negative
  outcomes must be instrumented. That is, if a user is expecting an
-  annotation marker for when an activity was started, they should
-   instead see an error annotation if there indeed was an error. The
+  grafanaAnnotation marker for when an activity was started, they should
+   instead see an error grafanaAnnotation if there indeed was an error. The
     successful outcome of starting an activity is a different event
      than the failure of it, but they both speak to the outcome of
       trying to start an activity.
 
-# NoSQLBench Event Taxonomy
+# NoSQLBench Annotation Level
 
+Each annotation comes from a particular level of execution with
+ NoSQLBench. Starting from the top, each layer is nested within
+ the last. The conceptual view of this would appear as:
+
+              +--------+
+              |   op   |
+            +------------+ 
+            |   motor    |
+          +-----------------+ 
+          |    activity     |
+        +---------------------+ 
+        |     scripting       |
+      +-------------------------+   +---------------+
+      |       scenario          |   |  application  |
+    +-------------------------------------------------+
+    |               CLI ( Command Line Interface )    |
+    +-------------------------------------------------+
+    
+    
+That is, every op happens within a thread motor, every thread motor
+happens within an activity, and so on. 
+ 
 - cli
-  - cli.render
-  - cli.execution
-  - cli.error
+  - cli.render - When the CLI renders a scenario script
+  - cli.execution - When the CLI executes a scenario
+  - cli.error - When there is an error at the CLI level
 - scenario
-  - scenario.start
-  - scenario.stop
-  - scenario.error
+  - scenario.params - When a scenario is configured with parameters
+  - scenario.start - When a scenario is started
+  - scenario.stop - When a scenario is stopped
+  - scenario.error - When a scenario throws an error
+- scripting
+  - extensions - When an extension service object is created
 - activity
-  - activity.start
-  - activity.stop
-  - activity.param
-  - activity.error
-- thread
-  - thread.state
-  - thread.error
-- user
-  - note
-- extension
+  - activity.params - When params are initially set or changed
+  - activity.start - Immediately before an activity is started
+  - activity.stop - When an activity is stopped
+  - activity.error - When an activity throws an error
+- motor
+  - thread.state - When a motor thread changes state 
+  - thread.error - When a motor thread throws an error
+- op
+  -- There are no op-level events at this time
+- application
+  -- There are no application-level events at this time
 
 ## tags
 
+These standard tags should be added to every annotation emitted by
+ NoSQLBench:
+ 
+**appname**: "nosqlbench"
+**layer**: one of the core layers as above
+**event**: The name of the event within the layer as shown above
+
+
 type
 : 
 layer
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 245d0e299..2024aa140 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
@@ -18,7 +18,8 @@ import io.nosqlbench.engine.core.script.Scenario;
 import io.nosqlbench.engine.core.script.ScenariosExecutor;
 import io.nosqlbench.engine.core.script.ScriptParams;
 import io.nosqlbench.engine.docker.DockerMetricsManager;
-import io.nosqlbench.nb.api.annotation.Annotator;
+import io.nosqlbench.nb.api.annotations.Annotation;
+import io.nosqlbench.nb.api.Layer;
 import io.nosqlbench.nb.api.content.Content;
 import io.nosqlbench.nb.api.content.NBIO;
 import io.nosqlbench.nb.api.errors.BasicError;
@@ -89,6 +90,8 @@ public class NBCLI {
         boolean dockerMetrics = globalOptions.wantsDockerMetrics();
         String dockerMetricsAt = globalOptions.wantsDockerMetricsAt();
         String reportGraphiteTo = globalOptions.wantsReportGraphiteTo();
+        String annotatorsConfig = globalOptions.getAnnotatorsConfig();
+
         int mOpts = (dockerMetrics ? 1 : 0) + (dockerMetricsAt != null ? 1 : 0) + (reportGraphiteTo != null ? 1 : 0);
         if (mOpts > 1 && (reportGraphiteTo == null || annotatorsConfig == null)) {
             throw new BasicError("You have multiple conflicting options which attempt to set\n" +
@@ -249,6 +252,16 @@ public class NBCLI {
             System.exit(0);
         }
 
+        Annotators.init(annotatorsConfig);
+        Annotators.recordAnnotation(
+                Annotation.newBuilder()
+                        .session(sessionName)
+                        .now()
+                        .layer(Layer.CLI)
+                        .detail("cli", Strings.join(args, "\n"))
+                        .build()
+        );
+
         if (reportGraphiteTo != null || options.wantsReportCsvTo() != null) {
             MetricReporters reporters = MetricReporters.getInstance();
             reporters.addRegistry("workloads", ActivityMetrics.getMetricRegistry());
@@ -262,11 +275,6 @@ public class NBCLI {
             reporters.start(10, options.getReportInterval());
         }
 
-        Annotators.recordAnnotation(sessionName,
-                Map.of("event", "command-line", "args", String.join(" ", args)),
-                Map.of()
-        );
-
         if (options.wantsEnableChart()) {
             logger.info("Charting enabled");
             if (options.getHistoLoggerConfigs().size() == 0) {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java
index d0af040ae..dbe55a2d1 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java
@@ -1,60 +1,118 @@
 package io.nosqlbench.engine.core.annotation;
 
-import io.nosqlbench.nb.api.annotation.Annotator;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import io.nosqlbench.nb.annotations.Service;
+import io.nosqlbench.nb.api.annotations.Annotation;
+import io.nosqlbench.nb.api.annotations.Annotator;
+import io.nosqlbench.nb.api.config.ConfigAware;
+import io.nosqlbench.nb.api.config.ConfigLoader;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import java.util.*;
 
+/**
+ * Singleton-scoped annotator interface for the local process.
+ * This uses SPI to find the annotators and some config scaffolding
+ * to make configuring them easier.
+ * Any number of annotators is allowed of any supporting interface.
+ * Each instance of a config is used to initialize a single annotator,
+ * and annotations are distributed to each of them in turn.
+ */
 public class Annotators {
+    private final static Logger logger = LogManager.getLogger("ANNOTATORS");
+    private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
 
     private static List annotators;
-    private static Set names;
 
     /**
-     * Initialize the active annotators.
+     * Initialize the active annotators. This method must be called before any others.
      *
-     * @param annotatorsConfig A comma-separated set of annotator configs, each with optional
-     *                         configuration metadata in name{config} form.
+     * @param annotatorsConfig A (possibly empty) set of annotator configurations, in any form
+     *                         supported by {@link ConfigLoader}
      */
     public synchronized static void init(String annotatorsConfig) {
-        if (annotatorsConfig == null || annotatorsConfig.isEmpty()) {
-            Annotators.names = Set.of();
-        } else {
+
+        ConfigLoader loader = new ConfigLoader();
+        annotators = new ArrayList<>();
+
+        LinkedHashMap> providers = getProviders();
+
+        List configs = loader.load(annotatorsConfig, Map.class);
+
+        if (configs != null) {
+
+            for (Map cmap : configs) {
+                Object typeObj = cmap.remove("type");
+                String typename = typeObj.toString();
+                ServiceLoader.Provider annotatorProvider = providers.get(typename);
+                if (annotatorProvider == null) {
+                    throw new RuntimeException("Annotation provider with selector '" + typename + "' was not found.");
+                }
+                Annotator annotator = annotatorProvider.get();
+
+                if (annotator instanceof ConfigAware) {
+                    ConfigAware configAware = (ConfigAware) annotator;
+                    configAware.applyConfig(cmap);
+                }
+
+                annotators.add(annotator);
+            }
 
         }
-        Annotators.names = names;
+
+        logger.debug("Initialized " + Annotators.annotators.size() + " annotators, since the configuration is empty.");
+
     }
 
-    public synchronized static List getAnnotators() {
-        if (names == null) {
-            throw new RuntimeException("Annotators.init(...) must be called first.");
+    private static List getAnnotators() {
+        if (annotators != null) {
+            return annotators;
         }
-        if (annotators == null) {
-            annotators = new ArrayList<>();
-            ServiceLoader loader = ServiceLoader.load(Annotator.class);
-            loader.stream()
-                    .map(sp -> sp.get())
-                    .filter(an -> names.contains("all") || Annotators.names.contains(an.getName()))
-                    .forEach(an -> {
-                        annotators.add(an);
-                    });
-        }
-        return annotators;
+        logger.debug("Annotations are bypassed as no annotators were configured.");
+        return List.of();
     }
 
-    public static synchronized void recordAnnotation(
-            String sessionName,
-            long startEpochMillis,
-            long endEpochMillis,
-            Map target,
-            Map details) {
-        getAnnotators().forEach(a -> a.recordAnnotation(sessionName, startEpochMillis, endEpochMillis, target, details));
+    private synchronized static LinkedHashMap> getProviders() {
+        ServiceLoader loader = ServiceLoader.load(Annotator.class);
+
+        LinkedHashMap> providers;
+        providers = new LinkedHashMap<>();
+
+        loader.stream().forEach(provider -> {
+            Class type = provider.type();
+            if (!type.isAnnotationPresent(Service.class)) {
+                throw new RuntimeException(
+                        "Annotator services must be annotated with distinct selectors\n" +
+                                "such as @Service(Annotator.class,selector=\"myimpl42\")"
+                );
+            }
+            Service service = type.getAnnotation(Service.class);
+            providers.put(service.selector(), provider);
+        });
+
+        return providers;
     }
 
-    public static synchronized void recordAnnotation(
-            String sessionName,
-            Map target,
-            Map details) {
-        recordAnnotation(sessionName, 0L, 0L, target, details);
+    public static synchronized void recordAnnotation(Annotation annotation) {
+        getAnnotators().forEach(a -> a.recordAnnotation(annotation));
     }
 
+//    public static synchronized void recordAnnotation(
+//            String sessionName,
+//            long startEpochMillis,
+//            long endEpochMillis,
+//            Map target,
+//            Map details) {
+//        getAnnotators().forEach(a -> a.recordAnnotation(sessionName, startEpochMillis, endEpochMillis, target, details));
+//    }
+
+//    public static synchronized void recordAnnotation(
+//            String sessionName,
+//            Map target,
+//            Map details) {
+//        recordAnnotation(sessionName, 0L, 0L, target, details);
+//    }
+
 }
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/OnError.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/OnError.java
new file mode 100644
index 000000000..4f36af5ba
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/OnError.java
@@ -0,0 +1,15 @@
+package io.nosqlbench.engine.core.metrics;
+
+public enum OnError {
+    Warn,
+    Throw;
+
+    public static OnError valueOfName(String name) {
+        for (OnError value : OnError.values()) {
+            if (value.toString().toLowerCase().equals(name.toLowerCase())) {
+                return value;
+            }
+        }
+        throw new RuntimeException("No matching OnError enum value for '" + name + "'");
+    }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
index 046a36019..5df384fc9 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
@@ -231,9 +231,18 @@ public class Scenario implements Callable {
     }
 
     public void run() {
-        state=State.Running;
+        state = State.Running;
 
-        startedAtMillis=System.currentTimeMillis();
+        startedAtMillis = System.currentTimeMillis();
+        Annotators.recordAnnotation(
+                Annotation.newBuilder()
+                        .session(this.scenarioName)
+                        .now()
+                        .layer(Layer.Scenario)
+                        .label("scenario", getScenarioName())
+                        .detail("engine", this.engine.toString())
+                        .build()
+        );
         init();
         logger.debug("Running control script for " + getScenarioName() + ".");
         for (String script : scripts) {
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java b/nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java
new file mode 100644
index 000000000..459358995
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java
@@ -0,0 +1,38 @@
+package io.nosqlbench.nb.api;
+
+public enum Layer {
+
+    /**
+     * Events which describe command line arguments, such as parsing,
+     * named scenario mapping, or critical errors
+     */
+    CLI,
+
+    /**
+     * Events which describe scenario execution, such as parameters,
+     * lifecycle events, and critical errors
+     */
+    Scenario,
+
+    /**
+     * Events which describe scripting details, such as extensions,
+     * sending programmatic annotations, or critical errors
+     */
+    Script,
+
+    /**
+     * Events which are associated with a particular activity instance,
+     * such as parameters, starting and stopping, and critical errors
+     */
+    Activity,
+
+    /**
+     * Events which are associated with a particular activity thread
+     */
+    Motor,
+
+    /**
+     * Events which are associated with a particular operation or op template
+     */
+    Operation
+}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotation/Annotator.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotation/Annotator.java
deleted file mode 100644
index ad5ba272c..000000000
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotation/Annotator.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package io.nosqlbench.nb.api.annotation;
-
-import io.nosqlbench.nb.spi.Named;
-
-import java.util.Map;
-
-/**
- * An implementation of this type is responsible for taking annotation details and
- * logging them in a useful place.
- */
-public interface Annotator extends Named {
-
-    /**
-     * Submit an annotation to some type of annotation store or logging or eventing mechanism.
-     * Implementations of this service are responsible for mapping the scenarioName, target,
-     * and details into the native schema of the target annotation or logging system in whichever
-     * way would be the least surprising for a user.
-     *
-     * The target is the nominative data which identifies the identity of the annotation. This
-     * must include enough information to allow the annotation to be homed and located within
-     * a target system such that is is visible where it should be seen. This includes all
-     * metadata which may be used to filter or locate the annotation, including timestamps.
-     *
-     * The details contain payload information to be displayed within the body of the annotation.
-     *
-     * @param sessionName      The name of the scenario
-     * @param startEpochMillis The epoch millisecond instant of the annotation, set this to 0 to have it
-     *                         automatically set to the current system time.
-     * @param endEpochMillis   The epoch millisecond instant at the end of the interval. If this is
-     *                         equal to the start instant, then this is an annotation for a point in time.
-     *                         This will be the default behavior if this value is 0.
-     * @param target           The target of the annotation, fields which are required to associate the
-     *                         annotation with the correct instance of a dashboard, metrics, etc
-     * @param details          A map of details
-     */
-    void recordAnnotation(
-            String sessionName,
-            long startEpochMillis,
-            long endEpochMillis,
-            Map target,
-            Map details);
-
-}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java
new file mode 100644
index 000000000..3d2febfff
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java
@@ -0,0 +1,76 @@
+package io.nosqlbench.nb.api.annotations;
+
+import io.nosqlbench.nb.api.Layer;
+
+import java.util.Map;
+
+/**
+ * This is a general purpose representation of an event that describes
+ * a significant workflow detail to users running tests. It can be
+ * an event that describes an instant, or it can describe an interval
+ * in time (being associated with the interval of time between two
+ * canonical events.)
+ *
+ * This view of an annotation event captures the semantics of what
+ * any reportable annotation should look like from the perspective of
+ * NoSQLBench. It is up to the downstream consumers to map these
+ * to concrete fields or identifiers as appropriate.
+ */
+public interface Annotation {
+    /**
+     * @return The named session that the annotation is associated with
+     */
+    String getSession();
+
+    /**
+     * If this is the same as {@link #getEnd()}, then the annotation is
+     * for an instant in time.
+     *
+     * @return The beginning of the interval of time that the annotation describes
+     */
+    long getStart();
+
+    /**
+     * If this is the same as {@link #getStart()}, then the annotation
+     * is for an instant in time.
+     *
+     * @return The end of the interval of time that the annotation describes
+     */
+    long getEnd();
+
+    /**
+     * Annotations must be associated with a processing layer in NoSQLBench.
+     * For more details on layers, see {@link Layer}
+     *
+     * @return
+     */
+    Layer getLayer();
+
+    /**
+     * The labels which identify what this annotation pertains to. The following labels
+     * should be provided for every annotation, when available:
+     * 
    + *
  • appname: "nosqlbench"
  • + *
  • alias: The name of the activity alias, if available
  • + *
  • workload: The name of the workload file, if named scenarios are used
  • + *
  • scenario: The name of the named scenario, if named scenarios are used
  • + *
  • step: The name of the named scenario step, if named scenario are used
  • + *
  • usermode: "named_scenario" or "adhoc_activity"
  • + *
+ * + * @return The labels map + */ + Map getLabels(); + + /** + * The details are an ordered map of all the content that you would want the user to see. + * + * @return The details map + */ + Map getDetails(); + + static BuilderFacets.WantsSession newBuilder() { + return new AnnotationBuilder(); + } + +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java new file mode 100644 index 000000000..4bc83d516 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java @@ -0,0 +1,77 @@ +package io.nosqlbench.nb.api.annotations; + +import io.nosqlbench.nb.api.Layer; + +import java.util.LinkedHashMap; + +public class AnnotationBuilder implements BuilderFacets.All { + private String session; + private long start; + private long end; + private final LinkedHashMap labels = new LinkedHashMap<>(); + private final LinkedHashMap details = new LinkedHashMap<>(); + private Layer layer; + + @Override + public AnnotationBuilder layer(Layer layer) { + this.layer = layer; + this.label("layer", layer.toString()); + return this; + } + + @Override + public AnnotationBuilder interval(long start, long end) { + start(start); + end(end); + return this; + } + + @Override + public AnnotationBuilder now() { + start(System.currentTimeMillis()); + end(this.start); + return this; + } + + private AnnotationBuilder start(long start) { + this.start = start; + return this; + } + + private AnnotationBuilder end(long end) { + this.end = end; + return this; + } + + @Override + public AnnotationBuilder at(long at) { + this.start(at); + this.end(at); + return this; + } + + @Override + public AnnotationBuilder label(String name, String value) { + this.labels.put(name, value); + return this; + } + + @Override + public BuilderFacets.WantsMoreDetailsOrBuild detail(String name, String value) { + this.details.put(name, value); + return this; + } + + @Override + public Annotation build() { + return new MutableAnnotation(session, layer, start, end, labels, details).asReadOnly(); + + } + + @Override + public BuilderFacets.WantsInterval session(String session) { + this.session = session; + return this; + } + +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java new file mode 100644 index 000000000..fde190951 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java @@ -0,0 +1,21 @@ +package io.nosqlbench.nb.api.annotations; + +import io.nosqlbench.nb.spi.Named; + +/** + * An implementation of this type is responsible for taking annotation details and + * logging them in a useful place. + */ +public interface Annotator extends Named { + + /** + * Submit an annotation to some type of annotation store, logging or eventing mechanism. + * Implementations of this service are responsible for mapping the scenario and labels + * into appropriate key data, and the details in to a native payload. The least surprising + * and most obvious mapping should be used in each case. + * + * For details on constructing a useful annotation to submit to this service, see {@link Annotation#newBuilder()} + */ + void recordAnnotation(Annotation annotation); + +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java new file mode 100644 index 000000000..ebee085b0 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java @@ -0,0 +1,58 @@ +package io.nosqlbench.nb.api.annotations; + +import io.nosqlbench.nb.api.Layer; + +public interface BuilderFacets { + + interface All extends + WantsSession, WantsInterval, WantsLayer, WantsLabels, WantsMoreDetailsOrBuild, WantsMoreLabelsOrDetails { + } + + interface WantsSession { + /** + * The session is the global name of a NoSQLBench process which run a scenario. It is required. + */ + WantsInterval session(String session); + } + + interface WantsInterval { + + /** + * Specify the instant of the annotated event. + * + * @param epochMillis + */ + WantsLayer at(long epochMillis); + + /** + * An interval annotation spans the time between two instants. + */ + WantsLayer interval(long startMillis, long endMillis); + + /** + * Use the current UTC time as the annotation instant. + */ + WantsLayer now(); + } + + interface WantsLayer { + WantsMoreLabelsOrDetails layer(Layer layer); + } + + interface WantsLabels { + WantsMoreLabelsOrDetails label(String name, String value); + } + + interface WantsMoreLabelsOrDetails { + WantsMoreLabelsOrDetails label(String name, String value); + + WantsMoreDetailsOrBuild detail(String name, String value); + } + + interface WantsMoreDetailsOrBuild { + WantsMoreDetailsOrBuild detail(String name, String value); + + Annotation build(); + } + +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java new file mode 100644 index 000000000..eea57e7f9 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java @@ -0,0 +1,121 @@ +package io.nosqlbench.nb.api.annotations; + +import io.nosqlbench.nb.api.Layer; + +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Map; + +public class MutableAnnotation implements Annotation { + + private String session = "SESSION_UNNAMED"; + private Layer layer; + private long start = 0L; + private long end = 0L; + private Map labels = new LinkedHashMap<>(); + private Map details = new LinkedHashMap<>(); + + public MutableAnnotation(String session, Layer layer, long start, long end, LinkedHashMap labels, + LinkedHashMap details) { + this.session = session; + this.layer = layer; + this.start = start; + this.end = end; + this.details = details; + this.labels = labels; + } + + public void setSession(String sessionName) { + this.session = sessionName; + } + + public void setStart(long intervalStart) { + this.start = intervalStart; + } + + public void setEnd(long intervalEnd) { + this.end = intervalEnd; + } + + public void setLabels(Map labels) { + this.labels = labels; + } + + public void setLayer(Layer layer) { + this.layer = layer; + this.labels.put("layer", layer.toString()); + } + + public void setDetails(Map details) { + this.details = details; + } + + @Override + public String getSession() { + return session; + } + + @Override + public long getStart() { + return start; + } + + @Override + public long getEnd() { + return end; + } + + @Override + public Layer getLayer() { + return this.layer; + } + + @Override + public Map getLabels() { + return labels; + } + + @Override + public Map getDetails() { + return details; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("session: ").append(getSession()).append("\n"); + + sb.append("[").append(new Date(getStart())); + if (getStart() != getEnd()) { + sb.append(" - ").append(new Date(getEnd())); + } + sb.append("]\n"); + sb.append("details:\n"); + formatMap(sb, getDetails()); + sb.append("labels:\n"); + formatMap(sb, getLabels()); + return sb.toString(); + } + + private void formatMap(StringBuilder sb, Map details) { + details.forEach((k, v) -> { + sb.append(" ").append(k).append(": "); + if (v.contains("\n")) { + sb.append("\n"); + + String[] lines = v.split("\n+"); + for (String line : lines) { + sb.append(" " + line + "\n"); + } +// Arrays.stream(lines).sequential().map(s -> " "+s+"\n").forEach(sb::append); + } else { + sb.append(v).append("\n"); + } + }); + } + + + public Annotation asReadOnly() { + return this; + } +} diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java new file mode 100644 index 000000000..adfa377ef --- /dev/null +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java @@ -0,0 +1,45 @@ +package io.nosqlbench.nb.api.annotations; + +import io.nosqlbench.nb.api.Layer; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class AnnotationBuilderTest { + + private static final long time = 1600000000000L; + + @Test + public void testBasicAnnotation() { + + Annotation an1 = Annotation.newBuilder() + .session("test-session") + .at(time) + .layer(Layer.Scenario) + .label("labelka", "labelvb") + .label("labelkc", "labelvd") + .detail("detailk1", "detailv1") + .detail("detailk2", "detailv21\ndetailv22") + .detail("detailk3", "v1\nv2\nv3\n") + .build(); + + String represented = an1.toString(); + assertThat(represented).isEqualTo("session: test-session\n" + + "[Sun Sep 13 07:26:40 CDT 2020]\n" + + "details:\n" + + " detailk1: detailv1\n" + + " detailk2: \n" + + " detailv21\n" + + " detailv22\n" + + " detailk3: \n" + + " v1\n" + + " v2\n" + + " v3\n" + + "labels:\n" + + " layer: Scenario\n" + + " labelka: labelvb\n" + + " labelkc: labelvd\n"); + + } + +} \ No newline at end of file From 6c0632fb8d7f80b373779f54b1e49fdd7219efbe Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:35:16 -0600 Subject: [PATCH 038/164] grafana annotator module --- .../engine/clients/grafana/GrafanaClient.java | 132 +++++------- .../clients/grafana/GrafanaClientConfig.java | 159 ++++++++++++++ .../clients/grafana/transfer/Annotations.java | 2 +- ...Annotation.java => GrafanaAnnotation.java} | 16 +- .../clients/grafana/GrafanaClientTest.java | 18 +- .../core/metrics/GrafanaKeyFileReader.java | 37 ++++ .../core/metrics/GrafanaMetricsAnnotator.java | 196 +++++++++++++----- 7 files changed, 409 insertions(+), 151 deletions(-) create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java rename engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/{Annotation.java => GrafanaAnnotation.java} (90%) create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaKeyFileReader.java diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java index f70a3fd82..597977f81 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java @@ -2,75 +2,32 @@ package io.nosqlbench.engine.clients.grafana; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import io.nosqlbench.engine.clients.grafana.transfer.Annotation; +import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation; import io.nosqlbench.engine.clients.grafana.transfer.Annotations; +import io.nosqlbench.engine.clients.grafana.transfer.ApiTokenRequest; -import java.net.Authenticator; -import java.net.PasswordAuthentication; -import java.net.URI; -import java.net.URISyntaxException; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; -import java.util.Base64; /** * @see
Grafana Annotations API Docs */ public class GrafanaClient { - private final URI baseuri; private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); - Authenticator auth = null; - private String username; - private String password; + private final GrafanaClientConfig config; - public GrafanaClient(String baseurl) { - this.baseuri = initURI(baseurl); + public GrafanaClient(GrafanaClientConfig config) { + this.config = config; } - public void basicAuth(String username, String password) { - this.username = username; - this.password = password; - this.auth = new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password.toCharArray()); - } - }; + public GrafanaClient(String baseuri) { + this(new GrafanaClientConfig().setBaseUri(baseuri)); } - private URI initURI(String baseurl) { - try { - URI uri = new URI(baseurl); - String userinfo = uri.getRawUserInfo(); - if (userinfo != null) { - String[] unpw = userinfo.split(":"); - this.username = unpw[0]; - this.password = unpw[1]; - uri = new URI(baseurl.replace(userinfo + "@", "")); - } - return uri; - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - } - - private HttpClient getClient() { - HttpClient.Builder cb = HttpClient.newBuilder(); - if (this.auth != null) { - cb.authenticator(auth); - } - HttpClient client = cb.build(); - return client; - } - - private URI makeUri(String pathAndQuery) { - try { - return new URI(this.baseuri.toString() + pathAndQuery); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } + public GrafanaClientConfig getConfig() { + return config; } /** @@ -147,12 +104,11 @@ public class GrafanaClient { public Annotations findAnnotations(By... by) { String query = By.fields(by); - HttpRequest.Builder rqb = HttpRequest.newBuilder(makeUri("api/annotations?" + query)); - rqb = addAuth(rqb); + HttpRequest.Builder rqb = config.newRequest("api/annotations?" + query); rqb.setHeader("Content-Type", "application/json"); HttpRequest request = rqb.build(); - HttpClient client = getClient(); + HttpClient client = config.newClient(); HttpResponse response = null; try { @@ -196,14 +152,12 @@ public class GrafanaClient { * * @return */ - public Annotation createAnnotation(Annotation annotation) { - HttpClient client = getClient(); - HttpRequest.Builder rqb = HttpRequest.newBuilder(makeUri("api/annotations")); - rqb = addAuth(rqb); + public GrafanaAnnotation createAnnotation(GrafanaAnnotation grafanaAnnotation) { + HttpClient client = config.newClient(); + HttpRequest.Builder rqb = config.newRequest("api/annotations"); rqb.setHeader("Content-Type", "application/json"); - String rqBody = gson.toJson(annotation); + String rqBody = gson.toJson(grafanaAnnotation); rqb = rqb.POST(HttpRequest.BodyPublishers.ofString(rqBody)); - addAuth(rqb); HttpResponse response = null; try { @@ -218,22 +172,11 @@ public class GrafanaClient { } if (response.statusCode() < 200 || response.statusCode() >= 300) { throw new RuntimeException("Creating annotation failed with status code " + response.statusCode() + " at " + - "baseurl " + baseuri + ": " + response.body()); + "baseuri " + config.getBaseUri() + ": " + response.body()); } String body = response.body(); - Annotation savedAnnotation = gson.fromJson(body, Annotation.class); - return savedAnnotation; - } - - private HttpRequest.Builder addAuth(HttpRequest.Builder rqb) { - if (this.username != null && this.password != null) { - rqb = rqb.setHeader("Authorization", encodeBasicAuth(username, password)); - } - return rqb; - } - - private static String encodeBasicAuth(String username, String password) { - return "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes()); + GrafanaAnnotation savedGrafanaAnnotation = gson.fromJson(body, GrafanaAnnotation.class); + return savedGrafanaAnnotation; } /** @@ -265,8 +208,8 @@ public class GrafanaClient { * * @return */ - public Annotation createGraphiteAnnotation() { - return null; + public GrafanaAnnotation createGraphiteAnnotation() { + throw new RuntimeException("unimplemented"); } /** @@ -299,7 +242,7 @@ public class GrafanaClient { * }
*/ public void updateAnnotation() { - + throw new RuntimeException("unimplemented"); } /** @@ -332,7 +275,7 @@ public class GrafanaClient { * }
*/ public void patchAnnotation() { - + throw new RuntimeException("unimplemented"); } /** @@ -356,7 +299,36 @@ public class GrafanaClient { * @param id */ public void deleteAnnotation(long id) { - + throw new RuntimeException("unimplemented"); } + public ApiToken createApiToken(String name, String role, long ttl) { + ApiTokenRequest r = new ApiTokenRequest(name, role, ttl); + ApiToken token = postToGrafana(r, ApiToken.class, "gen api token"); + return token; + } + + private T postToGrafana(Object request, Class clazz, String desc) { + HttpRequest rq = config.newJsonPOST("api/auth/keys", request); + HttpClient client = config.newClient(); + + HttpResponse response = null; + try { + response = client.send(rq, HttpResponse.BodyHandlers.ofString()); + } catch (Exception e) { + if (e.getMessage().contains("WWW-Authenticate header missing")) { + throw new RuntimeException("Java HttpClient was not authorized, and it saw no WWW-Authenticate header" + + " in the response, so this is probably Grafana telling you that the auth scheme failed. Normally " + + "this error would be thrown by Java HttpClient:" + e.getMessage()); + } + throw new RuntimeException(e); + } + if (response.statusCode() < 200 || response.statusCode() >= 300) { + throw new RuntimeException("Request to grafana failed with status code " + response.statusCode() + "\n" + + " while trying to '" + desc + "'\n at baseuri " + config.getBaseUri() + ": " + response.body()); + } + String body = response.body(); + T result = gson.fromJson(body, clazz); + return result; + } } diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java new file mode 100644 index 000000000..1c8893bb4 --- /dev/null +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java @@ -0,0 +1,159 @@ +package io.nosqlbench.engine.clients.grafana; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.net.Authenticator; +import java.net.PasswordAuthentication; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.time.Duration; +import java.util.*; +import java.util.function.Supplier; + +public class GrafanaClientConfig { + + private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + @JsonProperty("baseuri") + private URI baseUrl; + + @JsonProperty("timeoutms") + private int timeoutms; + + private final List authenticators = new ArrayList<>(); + // private LinkedHashMap headers = new LinkedHashMap<>(); + private final List>> headerSources = new ArrayList<>(); + + public GrafanaClientConfig() { + } + + public void basicAuth(String username, String pw) { + Objects.requireNonNull(username); + String authPw = pw != null ? pw : ""; + + Authenticator basicAuth = new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, authPw.toCharArray()); + } + }; + + addAuthenticator(basicAuth); + addHeader("Authorization", encodeBasicAuth(username, authPw)); + } + + + public GrafanaClientConfig addAuthenticator(Authenticator authenticator) { + authenticators.add(authenticator); + return this; + } + + public GrafanaClientConfig addHeader(String headername, String... headervals) { + String headerVal = String.join(";", Arrays.asList(headervals)); + addHeaderSource(() -> Map.of(headername, headerVal)); + return this; + } + + /** + * Add a dynamic header source to be used for every new request. + * Each source provides a map of new headers. If key or value of any + * entry is null or empty, that entry is skipped. Otherwise, they are + * computed and added to every request anew. + * + * @param headerSource A source of new headers + * @return this GrafanaClientConfig, for method chaining + */ + public GrafanaClientConfig addHeaderSource(Supplier> headerSource) { + this.headerSources.add(headerSource); + return this; + } + + public LinkedHashMap getHeaders() { + LinkedHashMap headers = new LinkedHashMap<>(); + this.headerSources.forEach(hs -> { + Map entries = hs.get(); + entries.forEach((k, v) -> { + if (k != null && v != null && !k.isEmpty() && !v.isEmpty()) { + headers.put(k, v); + } + }); + }); + return headers; + } + + public HttpClient newClient() { + HttpClient.Builder cb = HttpClient.newBuilder(); + cb.connectTimeout(Duration.ofMillis(timeoutms)); + for (Authenticator authenticator : authenticators) { + cb.authenticator(authenticator); + } + HttpClient client = cb.build(); + return client; + } + + private URI makeUri(String pathAndQuery) { + try { + return new URI(getBaseUri().toString() + pathAndQuery); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + + public HttpRequest.Builder newRequest(String path) { + URI requestUri = makeUri(path); + HttpRequest.Builder rqb = HttpRequest.newBuilder(requestUri); + rqb.timeout(Duration.ofMillis(timeoutms)); + getHeaders().forEach(rqb::setHeader); + return rqb; + } + + public GrafanaClientConfig setBaseUri(String baseuri) { + try { + URI uri = new URI(baseuri); + String userinfo = uri.getRawUserInfo(); + if (userinfo != null) { + String[] unpw = userinfo.split(":"); + basicAuth(unpw[0], unpw.length == 2 ? unpw[1] : ""); + uri = new URI(baseuri.replace(userinfo + "@", "")); + } + this.baseUrl = uri; + + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + return this; + } + + private static String encodeBasicAuth(String username, String password) { + return "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes()); + } + + public static GrafanaClientConfig fromJson(CharSequence json) { + GrafanaClientConfig grafanaClientConfig = gson.fromJson(json.toString(), GrafanaClientConfig.class); + return grafanaClientConfig; + } + + public URI getBaseUri() { + return baseUrl; + } + + public HttpRequest newJsonPOST(String pathAndParams, Object rq) { + HttpRequest.Builder rqb = newRequest(pathAndParams); + String body = gson.toJson(rq); + rqb = rqb.POST(HttpRequest.BodyPublishers.ofString(body)); + rqb = rqb.setHeader("Content-Type", "application/json"); + return rqb.build(); + } + + public int getTimeoutms() { + return timeoutms; + } + + public void setTimeoutms(int timeoutms) { + this.timeoutms = timeoutms; + } +} diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java index 02bcc093d..af4b74492 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java @@ -2,5 +2,5 @@ package io.nosqlbench.engine.clients.grafana.transfer; import java.util.ArrayList; -public class Annotations extends ArrayList { +public class Annotations extends ArrayList { } diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotation.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java similarity index 90% rename from engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotation.java rename to engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java index 125a1acf6..b492a3a76 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotation.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java @@ -1,10 +1,8 @@ package io.nosqlbench.engine.clients.grafana.transfer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; -public class Annotation { +public class GrafanaAnnotation { private Integer id; private Integer alertId; @@ -19,7 +17,7 @@ public class Annotation { private String text; private String metric; private String type; - private List tags = new ArrayList(); + private Map tags = new LinkedHashMap<>(); private Object data; public Integer getId() { @@ -126,18 +124,14 @@ public class Annotation { this.type = type; } - public List getTags() { + public Map getTags() { return tags; } - public void setTags(List tags) { + public void setTags(Map tags) { this.tags = tags; } - public void setTags(String tags) { - this.tags = Arrays.asList(tags.split("\\\\s,\\\\s")); - } - public Object getData() { return data; } diff --git a/engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java b/engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java index 09681fa0e..361b0a3ab 100644 --- a/engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java +++ b/engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java @@ -1,6 +1,6 @@ package io.nosqlbench.engine.clients.grafana; -import io.nosqlbench.engine.clients.grafana.transfer.Annotation; +import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation; import io.nosqlbench.engine.clients.grafana.transfer.Annotations; import org.junit.Ignore; import org.junit.Test; @@ -12,11 +12,11 @@ public class GrafanaClientTest { @Ignore public void testCreateAnnotation() { GrafanaClient client = new GrafanaClient(testurl); - client.basicAuth("admin", "admin"); - Annotation a = new Annotation(); + client.getConfig().basicAuth("admin", "admin"); + GrafanaAnnotation a = new GrafanaAnnotation(); a.setDashboardId(2); a.setText("testingAnnotation"); - Annotation created = client.createAnnotation(a); + GrafanaAnnotation created = client.createAnnotation(a); System.out.println(created); } @@ -24,9 +24,17 @@ public class GrafanaClientTest { @Ignore public void testFindAnnotations() { GrafanaClient client = new GrafanaClient(testurl); - client.basicAuth("admin", "admin"); + client.getConfig().basicAuth("admin", "admin"); Annotations annotations = client.findAnnotations(By.id(1)); System.out.println(annotations); + } + @Test + @Ignore + public void testGetApiToken() { + GrafanaClient client = new GrafanaClient(testurl); + client.getConfig().basicAuth("admin", "admin"); + ApiToken token = client.createApiToken("nosqlbench", "Admin", Long.MAX_VALUE); + System.out.println(token); } } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaKeyFileReader.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaKeyFileReader.java new file mode 100644 index 000000000..1c3dc1eba --- /dev/null +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaKeyFileReader.java @@ -0,0 +1,37 @@ +package io.nosqlbench.engine.core.metrics; + +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.function.Supplier; + +public class GrafanaKeyFileReader implements Supplier { + private final static Logger logger = LogManager.getLogger("ANNOTATORS"); + + private final Path keyfilePath; + + public GrafanaKeyFileReader(String sourcePath) { + this.keyfilePath = Path.of(sourcePath); + } + + + @Override + public String get() { + if (!Files.exists(keyfilePath)) { + logger.warn("apikeyfile does not exist at '" + keyfilePath.toString()); + return null; + } else { + try { + String apikey = Files.readString(keyfilePath, StandardCharsets.UTF_8); + return apikey; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + +} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaMetricsAnnotator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaMetricsAnnotator.java index 8e558b794..00471adee 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaMetricsAnnotator.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaMetricsAnnotator.java @@ -1,86 +1,97 @@ package io.nosqlbench.engine.core.metrics; import io.nosqlbench.engine.clients.grafana.GrafanaClient; -import io.nosqlbench.engine.clients.grafana.transfer.Annotation; -import io.nosqlbench.nb.api.annotation.Annotator; -import io.nosqlbench.nb.api.config.ConfigAware; -import io.nosqlbench.nb.api.config.ConfigModel; -import io.nosqlbench.nb.api.config.MutableConfigModel; +import io.nosqlbench.engine.clients.grafana.GrafanaClientConfig; +import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation; +import io.nosqlbench.nb.annotations.Service; +import io.nosqlbench.nb.api.annotations.Annotation; +import io.nosqlbench.nb.api.annotations.Annotator; +import io.nosqlbench.nb.api.config.*; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; +import java.util.function.Function; +import java.util.function.Supplier; +@Service(value = Annotator.class, selector = "grafana") public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { - private final GrafanaClient client; + private final static Logger logger = LogManager.getLogger("ANNOTATORS"); + private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS"); + private OnError onError = OnError.Warn; - public GrafanaMetricsAnnotator(String grafanaBaseUrl) { - this.client = new GrafanaClient(grafanaBaseUrl); + private GrafanaClient client; + private Map tags = new LinkedHashMap<>(); + + public GrafanaMetricsAnnotator() { } - @Override - public void recordAnnotation(String sessionName, long startEpochMillis, long endEpochMillis, Map target, Map details) { + public void recordAnnotation(Annotation annotation) { + try { + GrafanaAnnotation ga = new GrafanaAnnotation(); - Annotation annotation = new Annotation(); + ga.setTime(annotation.getStart()); + ga.setTimeEnd(annotation.getEnd()); - // Target + annotation.getLabels().forEach((k, v) -> { + ga.getTags().put(k, v); + }); + ga.getTags().put("layer", annotation.getLayer().toString()); - Optional.ofNullable(target.get("type")) - .ifPresent(annotation::setType); + Map labels = annotation.getLabels(); - long startAt = startEpochMillis > 0 ? startEpochMillis : System.currentTimeMillis(); - annotation.setTime(startAt); - annotation.setTimeEnd(endEpochMillis > 0 ? endEpochMillis : startAt); + Optional.ofNullable(labels.get("alertId")) + .map(Integer::parseInt).ifPresent(ga::setAlertId); - String eTime = target.get("timeEnd"); - annotation.setTimeEnd((eTime != null) ? Long.valueOf(eTime) : null); + ga.setData(annotation.toString()); - Optional.ofNullable(target.get("id")).map(Integer::valueOf) - .ifPresent(annotation::setId); + annotation.getSession(); - Optional.ofNullable(target.get("alertId")).map(Integer::valueOf) - .ifPresent(annotation::setAlertId); - Optional.ofNullable(target.get("dashboardId")).map(Integer::valueOf) - .ifPresent(annotation::setDashboardId); + // Target + Optional.ofNullable(labels.get("type")) + .ifPresent(ga::setType); - Optional.ofNullable(target.get("panelId")).map(Integer::valueOf) - .ifPresent(annotation::setPanelId); + Optional.ofNullable(labels.get("id")).map(Integer::valueOf) + .ifPresent(ga::setId); - Optional.ofNullable(target.get("userId")).map(Integer::valueOf) - .ifPresent(annotation::setUserId); + Optional.ofNullable(labels.get("alertId")).map(Integer::valueOf) + .ifPresent(ga::setAlertId); - Optional.ofNullable(target.get("userName")) - .ifPresent(annotation::setUserName); + Optional.ofNullable(labels.get("dashboardId")).map(Integer::valueOf) + .ifPresent(ga::setDashboardId); - Optional.ofNullable(target.get("tags")) - .ifPresent(annotation::setTags); + Optional.ofNullable(labels.get("panelId")).map(Integer::valueOf) + .ifPresent(ga::setPanelId); - Optional.ofNullable(details.get("metric")) - .ifPresent(annotation::setMetric); + Optional.ofNullable(labels.get("userId")).map(Integer::valueOf) + .ifPresent(ga::setUserId); - // Details + Optional.ofNullable(labels.get("userName")) + .ifPresent(ga::setUserName); - StringBuilder sb = new StringBuilder(); - if (details.containsKey("text")) { - annotation.setText(details.get("text")); - } else { - for (String dkey : details.keySet()) { - sb.append(sb).append(": ").append(details.get(dkey)).append("\n"); + Optional.ofNullable(labels.get("metric")) + .ifPresent(ga::setMetric); + + // Details + + annotationsLog.info("ANNOTATION:" + ga.toString()); + GrafanaAnnotation created = this.client.createAnnotation(ga); + + } catch (Exception e) { + switch (onError) { + case Warn: + logger.warn("Error while reporting annotation: " + e.getMessage(), e); + break; + case Throw: + throw e; } - annotation.setText(details.toString()); } - Optional.ofNullable(details.get("data")) - .ifPresent(annotation::setData); - - Optional.ofNullable(details.get("prevState")) - .ifPresent(annotation::setPrevState); - Optional.ofNullable(details.get("newState")) - .ifPresent(annotation::setNewState); - - Annotation created = this.client.createAnnotation(annotation); } @Override @@ -89,14 +100,91 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { } @Override - public void applyConfig(Map element) { + public void applyConfig(Map providedConfig) { ConfigModel configModel = getConfigModel(); + ConfigReader cfg = configModel.apply(providedConfig); + GrafanaClientConfig gc = new GrafanaClientConfig(); + gc.setBaseUri(cfg.param("baseurl", String.class)); + if (cfg.containsKey("tags")) { + this.tags = ParamsParser.parse(cfg.param("tags", String.class), false); + } + + if (cfg.containsKey("apikeyfile")) { + String apikeyfile = cfg.paramEnv("apikeyfile", String.class); + AuthWrapper authHeaderSupplier = new AuthWrapper( + "Authorization", + new GrafanaKeyFileReader(apikeyfile), + s -> "Bearer " + s + ";" + ); + gc.addHeaderSource(authHeaderSupplier); + } + + if (cfg.containsKey("apikey")) { + gc.addHeaderSource(() -> Map.of("Authorization", "Bearer " + cfg.param("apikey", String.class))); + } + + if (cfg.containsKey("username")) { + if (cfg.containsKey("password")) { + gc.basicAuth( + cfg.param("username", String.class), + cfg.param("password", String.class) + ); + } else { + gc.basicAuth(cfg.param("username", String.class), ""); + } + } + + this.onError = OnError.valueOfName(cfg.get("onerror").toString()); + + this.client = new GrafanaClient(gc); } @Override public ConfigModel getConfigModel() { - return new MutableConfigModel().add("baseurl", String.class).asReadOnly(); + return new MutableConfigModel(this) + .required("baseurl", String.class, + "The base url of the grafana node, like http://localhost:3000/") + .defaultto("apikeyfile", "$NBSTATEDIR/grafana_key", + "The file that contains the api key, supersedes apikey") + .optional("apikey", String.class, + "The api key to use, supersedes basic username and password") + .optional("username", String.class, + "The username to use for basic auth") + .optional("password", String.class, + "The password to use for basic auth") + .defaultto("tags", "source:nosqlbench", + "The tags that identify the annotations, in k:v,... form") +// .defaultto("onerror", OnError.Warn) + .defaultto("onerror", "warn", + "What to do when an error occurs while posting an annotation") + .defaultto("timeoutms", 5000, + "connect and transport timeout for the HTTP client") + .asReadOnly(); + } + + + public static class AuthWrapper implements Supplier> { + + private final Function valueMapper; + private final String headerName; + private final Supplier valueSupplier; + + public AuthWrapper(String headerName, Supplier valueSupplier, Function valueMapper) { + this.headerName = headerName; + this.valueSupplier = valueSupplier; + this.valueMapper = valueMapper; + } + + @Override + public Map get() { + String value = valueSupplier.get(); + if (value != null) { + value = valueMapper.apply(value); + return Map.of(headerName, value); + } + return Map.of(); + } } } From ae419a26d02d7ed0829ec19ec27544fe3d9a03a8 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:35:21 -0600 Subject: [PATCH 039/164] logging annotator module --- .../engine/core/metrics/LoggingAnnotator.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java new file mode 100644 index 000000000..4926b64c9 --- /dev/null +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java @@ -0,0 +1,60 @@ +package io.nosqlbench.engine.core.metrics; + +import io.nosqlbench.nb.annotations.Service; +import io.nosqlbench.nb.api.annotations.Annotation; +import io.nosqlbench.nb.api.annotations.Annotator; +import io.nosqlbench.nb.api.config.ConfigAware; +import io.nosqlbench.nb.api.config.ConfigModel; +import io.nosqlbench.nb.api.config.ConfigReader; +import io.nosqlbench.nb.api.config.MutableConfigModel; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.LinkedHashMap; +import java.util.Map; + +@Service(value = Annotator.class, selector = "log") +public class LoggingAnnotator implements Annotator, ConfigAware { + + private final static Logger logger = LogManager.getLogger("ANNOTATORS"); + private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS"); + private Level level; + + private final Map tags = new LinkedHashMap<>(); + + public LoggingAnnotator() { + } + + @Override + public void recordAnnotation(Annotation annotation) { + annotationsLog.log(level, annotation.toString()); + } + + /** + * @return The annotated selector of this implementation, + * ensuring that selector and name stay the same + */ + @Override + public String getName() { + String selector = LoggingAnnotator.class.getAnnotation(Service.class).selector(); + return selector; + } + + @Override + public void applyConfig(Map providedConfig) { + ConfigModel configModel = getConfigModel(); + ConfigReader cfg = configModel.apply(providedConfig); + String levelName = cfg.param("level", String.class); + this.level = Level.valueOf(levelName); + } + + @Override + public ConfigModel getConfigModel() { + return new MutableConfigModel(this) + .defaultto("level", "INFO", + "The logging level to use for this annotator") + .asReadOnly(); + } + +} From 0ef26c82137744ce9d991af8923a3644e1e29a97 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Nov 2020 18:08:32 -0600 Subject: [PATCH 040/164] update logger deps for dsegraph --- .../com/datastax/ebdrivers/dsegraph/GraphAction.java | 6 +++--- .../com/datastax/ebdrivers/dsegraph/GraphActivity.java | 9 +++------ .../dsegraph/errorhandling/GraphErrorHandler.java | 6 +++--- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphAction.java b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphAction.java index 576493501..2dff734d6 100644 --- a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphAction.java +++ b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphAction.java @@ -11,15 +11,15 @@ import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver; import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.List; @SuppressWarnings("Duplicates") public class GraphAction implements SyncAction, ActivityDefObserver { - private static final Logger logger = LoggerFactory.getLogger(GraphAction.class); + private static final Logger logger = LogManager.getLogger(GraphAction.class); List readyGraphStmts; private final int slot; private final GraphActivity activity; diff --git a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java index efff5f613..51150cd6f 100644 --- a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java +++ b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java @@ -17,7 +17,6 @@ import io.nosqlbench.engine.api.activityapi.planning.SequencerType; import io.nosqlbench.engine.api.activityconfig.ParsedStmt; import io.nosqlbench.engine.api.activityconfig.StatementsLoader; import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import io.nosqlbench.engine.api.activityconfig.yaml.StmtDef; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ParameterMap; @@ -27,8 +26,8 @@ import io.nosqlbench.engine.api.metrics.ExceptionMeterMetrics; import io.nosqlbench.engine.api.scripting.NashornEvaluator; import io.nosqlbench.engine.api.templating.StrInterpolator; import io.nosqlbench.engine.api.util.TagFilter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.IOException; import java.nio.file.Files; @@ -37,12 +36,10 @@ import java.nio.file.Paths; import java.util.Arrays; import java.util.List; import java.util.Optional; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; @SuppressWarnings("Duplicates") public class GraphActivity extends SimpleActivity implements ActivityDefObserver { - private final static Logger logger = LoggerFactory.getLogger(GraphActivity.class); + private final static Logger logger = LogManager.getLogger(GraphActivity.class); public Timer bindTimer; public Timer executeTimer; diff --git a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/errorhandling/GraphErrorHandler.java b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/errorhandling/GraphErrorHandler.java index 971f62fd4..671946e93 100644 --- a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/errorhandling/GraphErrorHandler.java +++ b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/errorhandling/GraphErrorHandler.java @@ -3,14 +3,14 @@ package com.datastax.ebdrivers.dsegraph.errorhandling; import com.datastax.driver.core.exceptions.*; import com.datastax.driver.dse.graph.GraphStatement; import io.nosqlbench.engine.api.metrics.ExceptionMeterMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.concurrent.ExecutionException; @SuppressWarnings("Duplicates") public class GraphErrorHandler { - private final static Logger logger = LoggerFactory.getLogger(GraphErrorHandler.class); + private final static Logger logger = LogManager.getLogger(GraphErrorHandler.class); private final ErrorResponse realErrorResponse; // private final ErrorResponse unappliedResponse; From 2215fc94edd73c804bf7f3479894e19a0250be73 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Nov 2020 18:08:35 -0600 Subject: [PATCH 041/164] typos, alignment, cruft --- .../java/io/nosqlbench/engine/core/metrics/MetricReporters.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java index 1b0a072ec..42528db07 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java @@ -116,7 +116,7 @@ public class MetricReporters implements Shutdownable { } public MetricReporters addLogger() { - logger.debug("Adding slf4j reporter for metrics"); + logger.debug("Adding log4j reporter for metrics"); if (metricRegistries.isEmpty()) { throw new RuntimeException("There are no metric registries."); From b7c246426cc3e9cf03f9d1a837ca787fcb4ff4d8 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Nov 2020 18:08:39 -0600 Subject: [PATCH 042/164] centralize log4j2 and slf4j stub config --- driver-dsegraph-shaded/pom.xml | 6 - mvn-defaults/pom.xml | 1503 ++++++++++++++++---------------- nb-api/pom.xml | 159 ++-- virtdata-lang/pom.xml | 9 - 4 files changed, 832 insertions(+), 845 deletions(-) diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 4b34c86fd..da730fc19 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -97,12 +97,6 @@ - - org.slf4j - slf4j-api - 1.7.25 - - diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 454fc0bd0..97a3d13c5 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -1,770 +1,779 @@ - - 4.0.0 + + 4.0.0 - io.nosqlbench - mvn-defaults - 3.12.156-SNAPSHOT - pom + io.nosqlbench + mvn-defaults + 3.12.156-SNAPSHOT + pom - - UTF-8 - UTF-8 - nosqlbench + + UTF-8 + UTF-8 + nosqlbench - 11 + 11 - - 4.8 - 1.2.0 - 1.14 - 1.20 - 1.8 - 3.9 - 3.6.1 - 1.8 - 3.2.1 - 1.9.0 - 0.61.6 - 3.0.0-RC1 - 2.1.10 - 2.9.8 - 1.11.1 - 1.1.1 - 2.1 - 2.4.0-b180830.0359 - 2.3.0.1 - 2.4.0-b180830.0438 - 2.29 - 2.27 - 9.4.25.v20191220 - 1.22 - 2.9.9 - 5.3.2 + + 4.8 + 1.2.0 + 1.14 + 1.20 + 1.8 + 3.9 + 3.6.1 + 1.8 + 3.2.1 + 1.9.0 + 0.61.6 + 3.0.0-RC1 + 2.1.10 + 2.9.8 + 1.11.1 + 1.1.1 + 2.1 + 2.4.0-b180830.0359 + 2.3.0.1 + 2.4.0-b180830.0438 + 2.29 + 2.27 + 9.4.25.v20191220 + 1.22 + 2.9.9 + 5.3.2 - 1.4.1 - 1.1.0 - 4.0.7 - 2.4.10.Final - - 4.1.47.Final - - 1.0.0 - - 1.23 - 1.1.2.6 + 1.4.1 + 1.1.0 + 4.0.7 + 2.4.10.Final + + 4.1.47.Final + + 1.0.0 + + 1.23 + 1.1.2.6 - - 3.1.0 - 3.8.1 - 3.0.0-M1 - 3.0.0-M3 - 1.6.0 - 3.0.0-M4 - 1.6 - 3.0.0-M1 - 3.1.1 - 3.1.1 - 1.6.8 - 2.5.3 - 3.1.0 - 3.0.1 - 3.0.0-M4 - 20.1.0 - + + 3.1.0 + 3.8.1 + 3.0.0-M1 + 3.0.0-M3 + 1.6.0 + 3.0.0-M4 + 1.6 + 3.0.0-M1 + 3.1.1 + 3.1.1 + 1.6.8 + 2.5.3 + 3.1.0 + 3.0.1 + 3.0.0-M4 + 20.1.0 + - ${project.artifactId} - http://nosqlbench.io/ - - nosqlbench is the core of a programmable workload simulation runtime. - This module acts as the parent pom for nosqlbench Maven modules. - + ${project.artifactId} + http://nosqlbench.io/ + + nosqlbench is the core of a programmable workload simulation runtime. + This module acts as the parent pom for nosqlbench Maven modules. + - - - The Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - + + + The Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + - - GitHub - https://github.com/nosqlbench/nosqlbench/issues - + + GitHub + https://github.com/nosqlbench/nosqlbench/issues + - - scm:git:https://github.com/nosqlbench/nosqlbench.git - - HEAD - - - - - - - org.junit.jupiter - 5.6.2 - junit-jupiter - test - - - - org.apache.logging.log4j - log4j-api - 2.13.3 - - - - org.apache.logging.log4j - log4j-core - 2.13.3 - - - - javax.activation - activation - ${javax.activation.version} - - - - org.mpierce.metrics.reservoir - hdrhistogram-metrics-reservoir - ${metrics.reservoir.version} - - - - org.hdrhistogram - HdrHistogram - ${hdrhistogram.version} - - - - io.dropwizard.metrics - metrics-graphite - ${metrics.version} - - - - io.dropwizard.metrics - metrics-core - ${metrics.version} - - - - org.apache.commons - commons-text - ${commons.text.version} - - - - - - - - - - org.openjdk.jmh - jmh-core - ${jmh.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - - - - org.yaml - snakeyaml - ${snakeyaml.version} - - - com.mitchtalmadge - ascii-data - ${ascii.data.version} - - - - com.datastax.dse - dse-java-driver-core - ${dse.driver.version} - - - com.datastax.dse - dse-java-driver-extras - ${dse.driver.version} - - - com.datastax.dse - dse-java-driver-mapping - ${dse.driver.version} - - - - - org.lz4 - lz4-java - ${lz4.version} - - - - - org.xerial.snappy - snappy-java - ${snappy.version} - - - - io.netty - netty-handler - ${netty.version} - - - - io.netty - netty-transport-native-epoll - ${netty.version} - linux-x86_64 - - - - io.netty - netty-transport-native-kqueue - 4.1.47.Final - linux-x86_64 - - - - com.github.docker-java - docker-java-api - ${docker.java.version} - - - - com.github.docker-java - docker-java-core - ${docker.java.version} - - - - com.github.docker-java - docker-java-transport-okhttp - ${docker.java.version} - - - - com.github.docker-java - docker-java - ${docker.java.version} - - - - com.github.oshi - oshi-core - 5.2.2 - - - - com.vladsch.flexmark - flexmark-ext-yaml-front-matter - ${flexmark.version} - - - com.vladsch.flexmark - flexmark-html2md-converter - ${flexmark.version} - - - - com.google.code.gson - gson - 2.8.5 - - - - com.elega9t - number-to-words - ${number.to.words.version} - - - - org.greenrobot - essentials - ${greenrobot.version} - - - - org.apache.commons - commons-lang3 - ${commons.lang.version} - - - - com.squareup - javapoet - ${javapoet.version} - - - - joda-time - joda-time - ${joda.time.version} - - - - org.apache.commons - commons-math3 - ${commons.math3.version} - - - - org.apache.commons - commons-csv - ${commons.csv.version} - - - commons-codec - commons-codec - ${commons.codec.version} - - - org.mvel - mvel2 - ${mvel2.version} - - - - org.antlr - antlr4-runtime - ${antlr4.version} - - - - org.eclipse.jetty - jetty-server - ${jetty.version} - - - org.eclipse.jetty - jetty-servlets - ${jetty.version} - - - org.eclipse.jetty - jetty-servlet - ${jetty.version} - - - org.eclipse.jetty - jetty-rewrite - ${jetty.version} - - - org.glassfish.jersey.core - jersey-server - ${jersey.version} - - - org.glassfish.jersey.core - jersey-common - ${jersey.version} - - - org.glassfish.jersey.containers - jersey-container-jetty-servlet - ${jersey.version} - - - org.glassfish.jersey.inject - jersey-hk2 - ${jersey.version} - - - - org.apache.commons - commons-compress - ${commons.compress.version} - - - - javax.ws.rs - javax.ws.rs-api - ${javax.ws.rs.version} - - - - org.glassfish.jersey.media - jersey-media-json-jackson - ${jersey.media.version} - - - - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - ${jackson.jaxrs.version} - - - - javax.xml.bind - jaxb-api - ${jaxb.api.version} - - - - com.sun.xml.bind - jaxb-core - ${jaxb.core.version} - - - - com.sun.xml.bind - jaxb-impl - ${jaxb.impl.version} - - - - - org.graalvm.sdk - graal-sdk - ${graalvm.version} - - - org.graalvm.js - js - ${graalvm.version} - runtime - - - org.graalvm.js - js-scriptengine - ${graalvm.version} - - - org.graalvm.tools - profiler - ${graalvm.version} - runtime - - - org.graalvm.tools - chromeinspector - ${graalvm.version} - runtime - - - - + + scm:git:https://github.com/nosqlbench/nosqlbench.git + + HEAD + + - - org.assertj - assertj-core - 3.15.0 - test - + + org.junit.jupiter + 5.6.2 + junit-jupiter + test + - - org.junit.platform - junit-platform-launcher - 1.6.2 - test - - - org.junit.jupiter - junit-jupiter - 5.6.2 - - - org.junit.jupiter - junit-jupiter-engine - 5.6.2 - test - - - org.junit.vintage - junit-vintage-engine - 5.6.2 - test - + + + javax.activation + activation + ${javax.activation.version} + + + + org.mpierce.metrics.reservoir + hdrhistogram-metrics-reservoir + ${metrics.reservoir.version} + + + + org.hdrhistogram + HdrHistogram + ${hdrhistogram.version} + + + + io.dropwizard.metrics + metrics-graphite + ${metrics.version} + + + + io.dropwizard.metrics + metrics-core + ${metrics.version} + + + + org.apache.commons + commons-text + ${commons.text.version} + + + + + + + + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + org.yaml + snakeyaml + ${snakeyaml.version} + + + com.mitchtalmadge + ascii-data + ${ascii.data.version} + + + + com.datastax.dse + dse-java-driver-core + ${dse.driver.version} + + + com.datastax.dse + dse-java-driver-extras + ${dse.driver.version} + + + com.datastax.dse + dse-java-driver-mapping + ${dse.driver.version} + + + + + org.lz4 + lz4-java + ${lz4.version} + + + + + org.xerial.snappy + snappy-java + ${snappy.version} + + + + io.netty + netty-handler + ${netty.version} + + + + io.netty + netty-transport-native-epoll + ${netty.version} + linux-x86_64 + + + + io.netty + netty-transport-native-kqueue + 4.1.47.Final + linux-x86_64 + + + + com.github.docker-java + docker-java-api + ${docker.java.version} + + + + com.github.docker-java + docker-java-core + ${docker.java.version} + + + + com.github.docker-java + docker-java-transport-okhttp + ${docker.java.version} + + + + com.github.docker-java + docker-java + ${docker.java.version} + + + + com.github.oshi + oshi-core + 5.2.2 + + + + com.vladsch.flexmark + flexmark-ext-yaml-front-matter + ${flexmark.version} + + + com.vladsch.flexmark + flexmark-html2md-converter + ${flexmark.version} + + + + com.google.code.gson + gson + 2.8.5 + + + + com.elega9t + number-to-words + ${number.to.words.version} + + + + org.greenrobot + essentials + ${greenrobot.version} + + + + org.apache.commons + commons-lang3 + ${commons.lang.version} + + + + com.squareup + javapoet + ${javapoet.version} + + + + joda-time + joda-time + ${joda.time.version} + + + + org.apache.commons + commons-math3 + ${commons.math3.version} + + + + org.apache.commons + commons-csv + ${commons.csv.version} + + + commons-codec + commons-codec + ${commons.codec.version} + + + org.mvel + mvel2 + ${mvel2.version} + + + + org.antlr + antlr4-runtime + ${antlr4.version} + + + + org.eclipse.jetty + jetty-server + ${jetty.version} + + + org.eclipse.jetty + jetty-servlets + ${jetty.version} + + + org.eclipse.jetty + jetty-servlet + ${jetty.version} + + + org.eclipse.jetty + jetty-rewrite + ${jetty.version} + + + org.glassfish.jersey.core + jersey-server + ${jersey.version} + + + org.glassfish.jersey.core + jersey-common + ${jersey.version} + + + org.glassfish.jersey.containers + jersey-container-jetty-servlet + ${jersey.version} + + + org.glassfish.jersey.inject + jersey-hk2 + ${jersey.version} + + + + org.apache.commons + commons-compress + ${commons.compress.version} + + + + javax.ws.rs + javax.ws.rs-api + ${javax.ws.rs.version} + + + + org.glassfish.jersey.media + jersey-media-json-jackson + ${jersey.media.version} + + + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + ${jackson.jaxrs.version} + + + + javax.xml.bind + jaxb-api + ${jaxb.api.version} + + + + com.sun.xml.bind + jaxb-core + ${jaxb.core.version} + + + + com.sun.xml.bind + jaxb-impl + ${jaxb.impl.version} + + + + + org.graalvm.sdk + graal-sdk + ${graalvm.version} + + + org.graalvm.js + js + ${graalvm.version} + runtime + + + org.graalvm.js + js-scriptengine + ${graalvm.version} + + + org.graalvm.tools + profiler + ${graalvm.version} + runtime + + + org.graalvm.tools + chromeinspector + ${graalvm.version} + runtime + + - + + + + org.apache.logging.log4j + log4j-api + 2.14.0 + + + + org.apache.logging.log4j + log4j-core + 2.14.0 + + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.14.0 + + + + org.assertj + assertj-core + 3.15.0 + test + + + + org.junit.platform + junit-platform-launcher + 1.6.2 + test + + + org.junit.jupiter + junit-jupiter + 5.6.2 + + + org.junit.jupiter + junit-jupiter-engine + 5.6.2 + test + + + org.junit.vintage + junit-vintage-engine + 5.6.2 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + true + + 11 + 11 + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + **/*Integrated*Test*.java + **/*IntegrationTest.java + **/*IntegrationTests.java + + + **/*Test*.java + + false + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + + run-tests + integration-test + + integration-test + verify + + + + + + always + + **/*Integrated*Test*.java + **/*IntegrationTest.java + **/*IntegrationTests.java + + + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + ${javadoc.name} + ${javadoc.name} + false + false + false + false + + -Xdoclint:none + -Xdoclint:none + none + + + + attach-javadoc + + jar + + + + + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + verify + + jar-no-fork + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + true + + ossrh + https://oss.sonatype.org/ + true + + + + + org.apache.maven.plugins + maven-gpg-plugin + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + + org.apache.maven.plugins + maven-release-plugin + ${release.plugin.version} + + + org.apache.maven.plugins + maven-gpg-plugin + ${gpg.plugin.version} + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.apache.maven.plugins + maven-surefire-plugin + ${surefire.plugin.version} + + + org.apache.maven.plugins + maven-failsafe-plugin + ${failsafe.plugin.version} + + + org.apache.maven.plugins + maven-javadoc-plugin + ${javadoc.plugin.version} + + + org.apache.maven.plugins + maven-source-plugin + ${source.plugin.version} + + + org.sonatype.plugins + nexus-staging-maven-plugin + ${nexus.staging.plugin.version} + + + org.antlr + antlr4-maven-plugin + 4.8 + + + org.codehaus.mojo + exec-maven-plugin + ${exec.plugin.version} + + + org.apache.maven.plugins + maven-enforcer-plugin + ${enforcer.plugin.version} + + + org.apache.maven.plugins + maven-clean-plugin + ${clean.plugin.version} + + + + org.apache.maven.plugins + maven-resources-plugin + ${resources.plugin.version} + + + org.apache.maven.plugins + maven-jar-plugin + ${jar.plugin.version} + + + org.apache.maven.plugins + maven-install-plugin + ${install.plugin.version} + + + org.apache.maven.plugins + maven-deploy-plugin + ${deploy.plugin.version} + + + + + + + + + + Jonathan Shook + jshook@gmail.com + nosqlbench.io + http://nosqlbench.io/ + + + Sebastián Estévez + estevezsebastian@gmail.com + nosqlbench.io + http://nosqlbench.io/ + + + + + + ossrh-snapshot + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh-staging + https://oss.sonatype.org/service/local/staging/deploy/maven2 + + + + + + + release + - - org.apache.maven.plugins - maven-compiler-plugin + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + - true - - 11 - 11 - - - - - + + --pinentry-mode + loopback + - - - - org.apache.maven.plugins - maven-surefire-plugin - - - - **/*Integrated*Test*.java - **/*IntegrationTest.java - **/*IntegrationTests.java - - - **/*Test*.java - - false - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - run-tests - integration-test - - integration-test - verify - - - - - - always - - **/*Integrated*Test*.java - **/*IntegrationTest.java - **/*IntegrationTests.java - - - - - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - ${javadoc.name} - ${javadoc.name} - false - false - false - false - - -Xdoclint:none - -Xdoclint:none - none - - - - attach-javadoc - - jar - - - - - - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - verify - - jar-no-fork - - - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - true - - ossrh - https://oss.sonatype.org/ - true - - - - - org.apache.maven.plugins - maven-gpg-plugin - + +
+ + + - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.3.0 - - - - org.apache.maven.plugins - maven-release-plugin - ${release.plugin.version} - - - org.apache.maven.plugins - maven-gpg-plugin - ${gpg.plugin.version} - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - org.apache.maven.plugins - maven-surefire-plugin - ${surefire.plugin.version} - - - org.apache.maven.plugins - maven-failsafe-plugin - ${failsafe.plugin.version} - - - org.apache.maven.plugins - maven-javadoc-plugin - ${javadoc.plugin.version} - - - org.apache.maven.plugins - maven-source-plugin - ${source.plugin.version} - - - org.sonatype.plugins - nexus-staging-maven-plugin - ${nexus.staging.plugin.version} - - - org.antlr - antlr4-maven-plugin - 4.8 - - - org.codehaus.mojo - exec-maven-plugin - ${exec.plugin.version} - - - org.apache.maven.plugins - maven-enforcer-plugin - ${enforcer.plugin.version} - - - org.apache.maven.plugins - maven-clean-plugin - ${clean.plugin.version} - - - - org.apache.maven.plugins - maven-resources-plugin - ${resources.plugin.version} - - - org.apache.maven.plugins - maven-jar-plugin - ${jar.plugin.version} - - - org.apache.maven.plugins - maven-install-plugin - ${install.plugin.version} - - - org.apache.maven.plugins - maven-deploy-plugin - ${deploy.plugin.version} - - - - - - - - - - Jonathan Shook - jshook@gmail.com - nosqlbench.io - http://nosqlbench.io/ - - - Sebastián Estévez - estevezsebastian@gmail.com - nosqlbench.io - http://nosqlbench.io/ - - - - - - ossrh-snapshot - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh-staging - https://oss.sonatype.org/service/local/staging/deploy/maven2 - - - - - - - release - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - --pinentry-mode - loopback - - - - - - - - - - + diff --git a/nb-api/pom.xml b/nb-api/pom.xml index a606f48b1..b1ff56ebb 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -1,100 +1,93 @@ - - 4.0.0 + + 4.0.0 - - mvn-defaults - io.nosqlbench - 3.12.156-SNAPSHOT - ../mvn-defaults - + + mvn-defaults + io.nosqlbench + 3.12.156-SNAPSHOT + ../mvn-defaults + - nb-api - jar - ${project.artifactId} - - The top level API module for NoSQLBench. This module should have no internal - module dependencies other than the mvn-default module. - All modules within NoSQLBench can safely depend on this module with circular - dependencies. This module provides cross-cutting code infrastracture, such as - path utilities and ways of describing services used between modules. - It is also the transitive aggregation point for system-wide library dependencies - for logging and testing or similar needs. - + nb-api + jar + ${project.artifactId} + + The top level API module for NoSQLBench. This module should have no internal + module dependencies other than the mvn-default module. + All modules within NoSQLBench can safely depend on this module with circular + dependencies. This module provides cross-cutting code infrastracture, such as + path utilities and ways of describing services used between modules. + It is also the transitive aggregation point for system-wide library dependencies + for logging and testing or similar needs. + - + - - + + - - - io.nosqlbench - nb-annotations - 3.12.156-SNAPSHOT - + + + io.nosqlbench + nb-annotations + 3.12.156-SNAPSHOT + - - com.vladsch.flexmark - flexmark-ext-yaml-front-matter - - - com.vladsch.flexmark - flexmark-html2md-converter - + + com.vladsch.flexmark + flexmark-ext-yaml-front-matter + - - org.apache.logging.log4j - log4j-api - + + com.vladsch.flexmark + flexmark-html2md-converter + - - org.apache.logging.log4j - log4j-core - + + net.sf.jopt-simple + jopt-simple + 5.0.3 + - - net.sf.jopt-simple - jopt-simple - 5.0.3 - + + com.google.code.gson + gson + - - com.google.code.gson - gson - + - + + org.openjdk.jmh + jmh-core + + + org.openjdk.jmh + jmh-generator-annprocess + - - org.openjdk.jmh - jmh-core - - - org.openjdk.jmh - jmh-generator-annprocess - + + + org.apache.commons + commons-csv + - - - org.apache.commons - commons-csv - + - - - - - - src/main/resources - - docs-for-testing-only/** - - - ** - - - - + + + + src/main/resources + + docs-for-testing-only/** + + + ** + + + + diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index d883e3ac0..f397d8bda 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -20,15 +20,6 @@ antlr4-runtime
- - org.apache.logging.log4j - log4j-api - - - org.apache.logging.log4j - log4j-core - -
From 453070810e4ce5e2608d8308cbabfdef3b8486b1 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 17 Nov 2020 18:08:43 -0600 Subject: [PATCH 043/164] backfill missing default --- .../io/nosqlbench/engine/core/logging/SessionLogConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java index d34221691..cc2cfc53f 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java @@ -29,7 +29,7 @@ public class SessionLogConfig implements ScenarioLogger { private String consolePattern = DEFAULT_CONSOLE_PATTERN; // private final Scenario scenario; private Path loggerDir = Path.of("logs"); - private NBLogLevel logLevel; + private NBLogLevel logLevel = NBLogLevel.INFO; private int maxLogfiles = 100; private Map logLevelOverrides = new LinkedHashMap<>(); From d0592454e87ddb334be0727531f255ab00b33bdc Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Nov 2020 16:31:48 -0600 Subject: [PATCH 044/164] typos, alignment, cruft --- driver-cqld4/pom.xml | 28 +++++----------------------- nb/pom.xml | 2 +- 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/driver-cqld4/pom.xml b/driver-cqld4/pom.xml index f6b1252f5..af7c64ddf 100644 --- a/driver-cqld4/pom.xml +++ b/driver-cqld4/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.155-SNAPSHOT + 3.12.156-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.155-SNAPSHOT + 3.12.156-SNAPSHOT io.nosqlbench drivers-api - 3.12.155-SNAPSHOT + 3.12.156-SNAPSHOT @@ -45,25 +45,6 @@ 4.7.2
- - - - - - - - - - - - - - - - - - - @@ -76,10 +57,11 @@ org.xerial.snappy snappy-java + io.nosqlbench virtdata-lib-basics - 3.12.155-SNAPSHOT + 3.12.156-SNAPSHOT compile diff --git a/nb/pom.xml b/nb/pom.xml index b2cf78674..4fd7acc83 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -246,7 +246,7 @@ io.nosqlbench driver-cqld4 - 3.12.155-SNAPSHOT + 3.12.156-SNAPSHOT From 146686e0b5ad702b3be7c5fe15b862eb45d41b94 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Nov 2020 16:31:53 -0600 Subject: [PATCH 045/164] simplify custom logging configuration --- .../java/io/nosqlbench/engine/cli/NBCLI.java | 67 ++-- .../nosqlbench/engine/cli/NBCLIArgsFile.java | 42 ++- .../nosqlbench/engine/cli/NBCLIOptions.java | 123 ++++---- .../engine/core/logging/LoggerConfig.java | 286 +++++++++++++----- .../engine/core/logging/ScenarioLogger.java | 27 -- .../engine/core/logging/SessionLogConfig.java | 204 ------------- .../PolyglotMetricRegistryBindings.java | 6 +- .../engine/core/script/Scenario.java | 17 +- .../engine/core/script/ScenariosExecutor.java | 14 +- .../resources/ScenarioExecutorEndpoint.java | 8 +- .../io/nosqlbench/nb/api/Environment.java | 14 +- .../script/AsyncScriptIntegrationTests.java | 9 +- .../core/script/ScriptIntegrationTests.java | 9 +- 13 files changed, 368 insertions(+), 458 deletions(-) delete mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java delete mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java 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 2024aa140..84ca8c070 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 @@ -10,8 +10,6 @@ import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.core.*; import io.nosqlbench.engine.core.annotation.Annotators; import io.nosqlbench.engine.core.logging.LoggerConfig; -import io.nosqlbench.engine.core.logging.SessionLogConfig; -import io.nosqlbench.engine.core.logging.ScenarioLogger; import io.nosqlbench.engine.core.metrics.MetricReporters; import io.nosqlbench.engine.core.script.MetricsMapper; import io.nosqlbench.engine.core.script.Scenario; @@ -45,8 +43,12 @@ import java.util.stream.Collectors; public class NBCLI { private static Logger logger; + private static LoggerConfig loggerConfig; - private static final String CHART_HDR_LOG_NAME = "hdrdata-for-chart.log"; + static { + loggerConfig = new LoggerConfig(); + LoggerConfig.setConfigurationFactory(loggerConfig); + } private final String commandName; @@ -74,13 +76,30 @@ public class NBCLI { // Initial logging config covers only command line parsing // We don't want anything to go to console here unless it is a real problem // as some integrations will depend on a stable and parsable program output - LoggerConfig loggerConfig = new LoggerConfig(NBLogLevel.ERROR, NBLogLevel.ERROR); +// new LoggerConfig() +// .setConsoleLevel(NBLogLevel.INFO.ERROR) +// .setLogfileLevel(NBLogLevel.ERROR) +// .activate(); +// logger = LogManager.getLogger("NBCLI"); - ConfigurationFactory.setConfigurationFactory(loggerConfig); - logger = LogManager.getLogger("NBCLI"); + loggerConfig.setConsoleLevel(NBLogLevel.ERROR); NBCLIOptions globalOptions = new NBCLIOptions(args, NBCLIOptions.Mode.ParseGlobalsOnly); + loggerConfig + .setConsoleLevel(globalOptions.getConsoleLogLevel()) + .setConsolePattern(globalOptions.getConsoleLoggingPattern()) + .setLogfileLevel(globalOptions.getScenarioLogLevel()) + .getLoggerLevelOverrides(globalOptions.getLogLevelOverrides()) + .setMaxLogs(globalOptions.getLogsMax()) + .setLogsDirectory(globalOptions.getLogsDirectory()) + .activate(); + ConfigurationFactory.setConfigurationFactory(loggerConfig); + + logger = LogManager.getLogger("NBCLI"); + loggerConfig.purgeOldFiles(LogManager.getLogger("SCENARIO")); + logger.info("Configured scenario log at " + loggerConfig.getLogfileLocation()); + // Global only processing if (args.length == 0) { System.out.println(loadHelpFile("commandline.md")); @@ -139,14 +158,10 @@ public class NBCLI { } NBCLIOptions options = new NBCLIOptions(args); - NBIO.addGlobalIncludes(options.wantsIncludes()); - String sessionName = new SessionNamer().format(options.getSessionName()); + logger = LogManager.getLogger("NBCLI"); - SessionLogConfig sessionLogConfig = new SessionLogConfig(sessionName); - sessionLogConfig.setConsolePattern(options.getConsoleLoggingPattern()); - sessionLogConfig.setLevel(options.wantsConsoleLogLevel()); - sessionLogConfig.start(); + NBIO.addGlobalIncludes(options.wantsIncludes()); ActivityMetrics.setHdrDigits(options.getHdrDigits()); @@ -280,27 +295,27 @@ public class NBCLI { if (options.getHistoLoggerConfigs().size() == 0) { logger.info("Adding default histologger configs"); String pattern = ".*"; - String file = CHART_HDR_LOG_NAME; + String file = options.getChartHdrFileName(); String interval = "1s"; options.setHistoLoggerConfigs(pattern, file, interval); } } for ( - NBCLIOptions.LoggerConfig histoLogger : options.getHistoLoggerConfigs()) { + NBCLIOptions.LoggerConfigData histoLogger : options.getHistoLoggerConfigs()) { ActivityMetrics.addHistoLogger(sessionName, histoLogger.pattern, histoLogger.file, histoLogger.interval); } for ( - NBCLIOptions.LoggerConfig statsLogger : options.getStatsLoggerConfigs()) { + NBCLIOptions.LoggerConfigData statsLogger : options.getStatsLoggerConfigs()) { ActivityMetrics.addStatsLogger(sessionName, statsLogger.pattern, statsLogger.file, statsLogger.interval); } for ( - NBCLIOptions.LoggerConfig classicConfigs : options.getClassicHistoConfigs()) { + NBCLIOptions.LoggerConfigData classicConfigs : options.getClassicHistoConfigs()) { ActivityMetrics.addClassicHistos(sessionName, classicConfigs.pattern, classicConfigs.file, classicConfigs.interval); } // intentionally not shown for warn-only - logger.info("console logging level is " + options.wantsConsoleLogLevel()); + logger.info("console logging level is " + options.getConsoleLogLevel()); ScenariosExecutor executor = new ScenariosExecutor("executor-" + sessionName, 1); @@ -331,13 +346,6 @@ public class NBCLI { } - NBLogLevel consoleLogLevel = options.wantsConsoleLogLevel(); - NBLogLevel scenarioLogLevel = options.getScenarioLogLevel(); - if (scenarioLogLevel.isGreaterOrEqualTo(consoleLogLevel)) { - logger.info("raising scenario logging level to accommodate console logging level"); - } - NBLogLevel maxLevel = NBLogLevel.max(consoleLogLevel, scenarioLogLevel); - // Execute Scenario! if (options.getCommands().size() == 0) { logger.info("No commands provided. Exiting before scenario."); @@ -349,16 +357,7 @@ public class NBCLI { scriptParams.putAll(buffer.getCombinedParams()); scenario.addScenarioScriptParams(scriptParams); - Path scenarioLogPath = SessionLogConfig.composeSessionLogName(options.getLogsDirectory(), scenario.getScenarioName()); - logger.info("Configuring scenario log at " + scenarioLogPath.toString()); - ScenarioLogger sl = new SessionLogConfig(scenario.getScenarioName()) - .setLogDir(options.getLogsDirectory()) - .setMaxLogs(options.getLogsMax()) - .setLevel(maxLevel) - .setLogLevelOverrides(options.getLogLevelOverrides()) - .start(); - - executor.execute(scenario, sl); + executor.execute(scenario); while (true) { Optional pendingResult = executor.getPendingResult(scenario.getScenarioName()); 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 0d597a14a..89eb8bb5f 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 @@ -4,7 +4,6 @@ import io.nosqlbench.nb.api.Environment; import io.nosqlbench.nb.api.errors.BasicError; import joptsimple.internal.Strings; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import java.io.IOException; import java.nio.file.Files; @@ -56,7 +55,8 @@ import java.util.stream.Collectors; * will cause an error to be thrown. */ public class NBCLIArgsFile { - private final static Logger logger = LogManager.getLogger("ARGSFILE"); + private Logger logger; +// = LogManager.getLogger("ARGSFILE"); // Options which may contextualize other CLI options or commands. // These must be parsed first @@ -176,10 +176,14 @@ public class NBCLIArgsFile { LinkedHashSet extant = readArgsFile(this.argsPath, Selection.IgnoreIfMissing); LinkedHashSet mergedPins = mergePins(this.argsToPin, this.argsToUnpin, extant); if (extant.equals(mergedPins)) { - logger.info("Pinning resulted in no changes to argsfile '" + this.argsPath.toString() + "'"); + if (logger != null) { + logger.info("Pinning resulted in no changes to argsfile '" + this.argsPath.toString() + "'"); + } } else { - logger.info("Writing updated argsfile '" + this.argsPath.toString() + "' with " + - (this.argsToPin.size() + this.argsToUnpin.size()) + " changes"); + if (logger != null) { + logger.info("Writing updated argsfile '" + this.argsPath.toString() + "' with " + + (this.argsToPin.size() + this.argsToUnpin.size()) + " changes"); + } writeArgsFile(mergedPins); } @@ -212,19 +216,27 @@ public class NBCLIArgsFile { for (String toAdd : toPin) { if (merged.contains(toAdd)) { - logger.warn("Requested to pin argument again: '" + toAdd + "', ignoring"); + if (logger != null) { + logger.warn("Requested to pin argument again: '" + toAdd + "', ignoring"); + } } else { - logger.info("Pinning option '" + toAdd + "' to '" + this.argsPath.toString() + "'"); + if (logger != null) { + logger.info("Pinning option '" + toAdd + "' to '" + this.argsPath.toString() + "'"); + } merged.add(toAdd); } } for (String toDel : toUnpin) { if (merged.contains(toDel)) { - logger.info("Unpinning '" + toDel + "' from '" + this.argsPath.toString() + "'"); + if (logger != null) { + logger.info("Unpinning '" + toDel + "' from '" + this.argsPath.toString() + "'"); + } merged.remove(toDel); } else { - logger.warn("Requested to unpin argument '" + toDel + "' which was not found in " + argsPath.toString()); + if (logger != null) { + logger.warn("Requested to unpin argument '" + toDel + "' which was not found in " + argsPath.toString()); + } } } @@ -244,7 +256,9 @@ public class NBCLIArgsFile { .map(p -> { String q = Environment.INSTANCE.interpolate(p).orElse(p); if (!q.equals(p)) { - logger.info("argsfile: '" + argsPath.toString() + "': loaded option '" + p + "' as '" + q + "'"); + if (logger != null) { + logger.info("argsfile: '" + argsPath.toString() + "': loaded option '" + p + "' as '" + q + "'"); + } } return q; }) @@ -360,7 +374,9 @@ public class NBCLIArgsFile { case ErrorIfMissing: throw new RuntimeException("A required argsfile was specified, but it does not exist: '" + argspath + "'"); case WarnIfMissing: - logger.warn("An argsfile was specified, but it does not exist: '" + argspath + "'"); + if (logger != null) { + logger.warn("An argsfile was specified, but it does not exist: '" + argspath + "'"); + } case IgnoreIfMissing: } return false; @@ -390,7 +406,9 @@ public class NBCLIArgsFile { } this.argsPath = selected; - logger.debug("argsfile path is now '" + this.argsPath.toString() + "'"); + if (logger != null) { + logger.debug("argsfile path is now '" + this.argsPath.toString() + "'"); + } } /** 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 b94d9e913..75e8c59fc 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 @@ -24,7 +24,8 @@ import java.util.stream.Collectors; */ public class NBCLIOptions { - private final static Logger logger = LogManager.getLogger("OPTIONS"); +// private final static Logger logger = LogManager.getLogger("OPTIONS"); + private final static String NB_STATE_DIR = "--statedir"; private final static String NB_STATEDIR_PATHS = "$NBSTATEDIR:$PWD/.nosqlbench:$HOME/.nosqlbench"; @@ -41,6 +42,8 @@ public class NBCLIOptions { private static final String ANNOTATORS_CONFIG = "--annotators"; private static final String DEFAULT_ANNOTATORS = "all"; + private final static String DEFAULT_CHART_HDR_LOG_NAME = "hdrdata-for-chart.log"; + // Discovery private static final String HELP = "--help"; private static final String LIST_METRICS = "--list-metrics"; @@ -144,11 +147,17 @@ public class NBCLIOptions { private String statedirs = NB_STATEDIR_PATHS; private Path statepath; private List statePathAccesses = new ArrayList<>(); + private String hdrForChartFileName = DEFAULT_CHART_HDR_LOG_NAME; public String getAnnotatorsConfig() { return annotatorsConfig; } + + public String getChartHdrFileName() { + return hdrForChartFileName; + } + public enum Mode { ParseGlobalsOnly, ParseAllOptions @@ -243,6 +252,18 @@ public class NBCLIOptions { } arglist = argsfile.process(arglist); break; + case DASH_V_INFO: + consoleLevel = NBLogLevel.INFO; + arglist.removeFirst(); + break; + case DASH_VV_DEBUG: + consoleLevel = NBLogLevel.DEBUG; + arglist.removeFirst(); + break; + case DASH_VVV_TRACE: + consoleLevel = NBLogLevel.TRACE; + arglist.removeFirst(); + break; case ANNOTATE_EVENTS: arglist.removeFirst(); String toAnnotate = readWordOrThrow(arglist, "annotated events"); @@ -284,6 +305,31 @@ public class NBCLIOptions { arglist.removeFirst(); dockerMetrics = true; break; + case SESSION_NAME: + arglist.removeFirst(); + sessionName = readWordOrThrow(arglist, "a session name"); + break; + case LOGS_DIR: + arglist.removeFirst(); + logsDirectory = readWordOrThrow(arglist, "a log directory"); + break; + case LOGS_MAX: + arglist.removeFirst(); + logsMax = Integer.parseInt(readWordOrThrow(arglist, "max logfiles to keep")); + break; + case LOGS_LEVEL: + arglist.removeFirst(); + String loglevel = readWordOrThrow(arglist, "a log level"); + this.logsLevel = NBLogLevel.valueOfName(loglevel); + break; + case LOG_LEVEL_OVERRIDE: + arglist.removeFirst(); + logLevelsOverrides = parseLogLevelOverrides(readWordOrThrow(arglist, "log levels in name:LEVEL,... format")); + break; + case WITH_LOGGING_PATTERN: + arglist.removeFirst(); + consoleLoggingPattern = readWordOrThrow(arglist, "logging pattern"); + break; default: nonincludes.addLast(arglist.removeFirst()); } @@ -313,7 +359,7 @@ public class NBCLIOptions { selected = path; break; } else { - logger.warn("possible state dir path is not a directory: '" + path.toString() + "'"); + System.err.println("ERROR: possible state dir path is not a directory: '" + path.toString() + "'"); } } } @@ -378,31 +424,10 @@ public class NBCLIOptions { Cmd cmd = Cmd.parseArg(arglist, canonicalizer); wantsMetricsForActivity = cmd.getArg("driver"); break; - case SESSION_NAME: - arglist.removeFirst(); - sessionName = readWordOrThrow(arglist, "a session name"); - break; - case LOGS_DIR: - arglist.removeFirst(); - logsDirectory = readWordOrThrow(arglist, "a log directory"); - break; case HDR_DIGITS: arglist.removeFirst(); hdr_digits = Integer.parseInt(readWordOrThrow(arglist, "significant digits")); break; - case LOGS_MAX: - arglist.removeFirst(); - logsMax = Integer.parseInt(readWordOrThrow(arglist, "max logfiles to keep")); - break; - case LOGS_LEVEL: - arglist.removeFirst(); - String loglevel = readWordOrThrow(arglist, "a log level"); - this.logsLevel = NBLogLevel.valueOfName(loglevel); - break; - case LOG_LEVEL_OVERRIDE: - arglist.removeFirst(); - logLevelsOverrides = parseLogLevelOverrides(readWordOrThrow(arglist, "log levels in name:LEVEL,... format")); - break; case PROGRESS: arglist.removeFirst(); progressSpec = readWordOrThrow(arglist, "a progress indicator, like 'log:1m' or 'screen:10s', or just 'log' or 'screen'"); @@ -417,7 +442,6 @@ public class NBCLIOptions { arglist.removeFirst(); if (arglist.peekFirst() == null) { wantsBasicHelp = true; - logger.info("getting basic help"); } else { wantsActivityHelp = true; wantsActivityHelpFor = readWordOrThrow(arglist, "topic"); @@ -467,22 +491,6 @@ public class NBCLIOptions { arglist.removeFirst(); wantsMarkerTypes = true; break; - case DASH_V_INFO: - consoleLevel = NBLogLevel.INFO; - arglist.removeFirst(); - break; - case DASH_VV_DEBUG: - consoleLevel = NBLogLevel.DEBUG; - arglist.removeFirst(); - break; - case DASH_VVV_TRACE: - consoleLevel = NBLogLevel.TRACE; - arglist.removeFirst(); - break; - case WITH_LOGGING_PATTERN: - arglist.removeFirst(); - consoleLoggingPattern = readWordOrThrow(arglist, "logging pattern"); - break; case LIST_SCENARIOS: arglist.removeFirst(); wantsScenariosList = true; @@ -532,20 +540,23 @@ public class NBCLIOptions { return graaljs_compat; } - public List getHistoLoggerConfigs() { - List configs = histoLoggerConfigs.stream().map(LoggerConfig::new).collect(Collectors.toList()); + public List getHistoLoggerConfigs() { + List configs = + histoLoggerConfigs.stream().map(LoggerConfigData::new).collect(Collectors.toList()); checkLoggerConfigs(configs, LOG_HISTOGRAMS); return configs; } - public List getStatsLoggerConfigs() { - List configs = statsLoggerConfigs.stream().map(LoggerConfig::new).collect(Collectors.toList()); + public List getStatsLoggerConfigs() { + List configs = + statsLoggerConfigs.stream().map(LoggerConfigData::new).collect(Collectors.toList()); checkLoggerConfigs(configs, LOG_HISTOSTATS); return configs; } - public List getClassicHistoConfigs() { - List configs = classicHistoConfigs.stream().map(LoggerConfig::new).collect(Collectors.toList()); + public List getClassicHistoConfigs() { + List configs = + classicHistoConfigs.stream().map(LoggerConfigData::new).collect(Collectors.toList()); checkLoggerConfigs(configs, CLASSIC_HISTOGRAMS); return configs; } @@ -622,7 +633,7 @@ public class NBCLIOptions { return sessionName; } - public NBLogLevel wantsConsoleLogLevel() { + public NBLogLevel getConsoleLogLevel() { return consoleLevel; } @@ -646,11 +657,12 @@ public class NBCLIOptions { public String getProgressSpec() { ProgressSpec spec = parseProgressSpec(this.progressSpec);// sanity check if (spec.indicatorMode == IndicatorMode.console) { - if (NBLogLevel.INFO.isGreaterOrEqualTo(wantsConsoleLogLevel())) { - logger.warn("Console is already logging info or more, so progress data on console is suppressed."); + if (NBLogLevel.INFO.isGreaterOrEqualTo(getConsoleLogLevel())) { + System.err.println("Console is already logging info or more, so progress data on console is " + + "suppressed."); spec.indicatorMode = IndicatorMode.logonly; } else if (this.getCommands().stream().anyMatch(cmd -> cmd.getCmdType().equals(Cmd.CmdType.script))) { - logger.info("Command line includes script calls, so progress data on console is " + + System.err.println("Command line includes script calls, so progress data on console is " + "suppressed."); spec.indicatorMode = IndicatorMode.logonly; } @@ -658,11 +670,12 @@ public class NBCLIOptions { return spec.toString(); } - private void checkLoggerConfigs(List configs, String configName) { + private void checkLoggerConfigs(List configs, String configName) { Set files = new HashSet<>(); - configs.stream().map(LoggerConfig::getFilename).forEach(s -> { + configs.stream().map(LoggerConfigData::getFilename).forEach(s -> { if (files.contains(s)) { - logger.warn(s + " is included in " + configName + " more than once. It will only be included " + + System.err.println(s + " is included in " + configName + " more than once. It will only be " + + "included " + "in the first matching config. Reorder your options if you need to control this."); } files.add(s); @@ -754,12 +767,12 @@ public class NBCLIOptions { return docker_grafana_tag; } - public static class LoggerConfig { + public static class LoggerConfigData { public String file; public String pattern = ".*"; public String interval = "30 seconds"; - public LoggerConfig(String histoLoggerSpec) { + public LoggerConfigData(String histoLoggerSpec) { String[] words = histoLoggerSpec.split(":"); switch (words.length) { case 3: diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java index 6427ecdb2..882325897 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java @@ -2,136 +2,187 @@ package io.nosqlbench.engine.core.logging; import io.nosqlbench.nb.api.logging.NBLogLevel; import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.Filter; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.appender.ConsoleAppender; import org.apache.logging.log4j.core.appender.RollingFileAppender; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.ConfigurationFactory; import org.apache.logging.log4j.core.config.ConfigurationSource; -import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder; -import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder; -import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder; -import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder; +import org.apache.logging.log4j.core.config.builder.api.*; import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.stream.Collectors; //@Plugin(name = "CustomConfigurationFactory", category = ConfigurationFactory.CATEGORY) //@Order(50) // Can't use plugin injection, since we need a tailored instance before logging public class LoggerConfig extends ConfigurationFactory { - private static final String LOG_PATTERN = "%d{DEFAULT}{GMT} [%t] %-5level: %msg%n"; - private static final String CONSOLE_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable"; - public static final Level ROOT_LOG_LEVEL = Level.ALL; - private final NBLogLevel consoleLevel; - private final NBLogLevel fileLevel; + /** + * ArgsFile + * Environment + * NBCLIOptions + */ + private static final String DEFAULT_CONSOLE_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable"; + private String consolePattern = DEFAULT_CONSOLE_PATTERN; + private NBLogLevel consoleLevel = NBLogLevel.DEBUG; - public LoggerConfig(NBLogLevel consoleLevel, NBLogLevel fileLevel) { - this.consoleLevel = consoleLevel; - this.fileLevel = fileLevel; + private static final String DEFAULT_LOGFILE_PATTERN = "%d{DEFAULT}{GMT} [%t] %-5level: %msg%n"; + private final String logfilePattern = DEFAULT_LOGFILE_PATTERN; + private NBLogLevel fileLevel = NBLogLevel.DEBUG; + + public static final Level ROOT_LOG_LEVEL = Level.ALL; + private Map logLevelOverrides = new LinkedHashMap<>(); + private Path loggerDir = Path.of("logs"); + private String sessionName; + private int maxLogfiles = 100; + private String logfileLocation; + + + public LoggerConfig() { } + public LoggerConfig setConsoleLevel(NBLogLevel level) { + this.consoleLevel = level; + return this; + } + + public LoggerConfig setLogfileLevel(NBLogLevel level) { + this.fileLevel = level; + return this; + } + + /** + * Ensure that what is shown in the logfile includes at a minimum, + * everything that is shown on console, but allow it to show more + * if configured to do so. + */ + private NBLogLevel getEffectiveFileLevel() { + if (fileLevel.isGreaterOrEqualTo(consoleLevel)) { + return fileLevel; + } else { + return consoleLevel; + } + } + + public LoggerConfig setMaxLogs(int maxLogfiles) { + this.maxLogfiles = maxLogfiles; + return this; + } + + Configuration createConfiguration(final String name, ConfigurationBuilder builder) { Level internalLoggingStatusThreshold = Level.ERROR; Level builderThresholdLevel = Level.INFO; // Level rootLoggingLevel = Level.INFO; + RootLoggerComponentBuilder rootBuilder = builder.newRootLogger(ROOT_LOG_LEVEL); + builder.setConfigurationName(name); builder.setStatusLevel(internalLoggingStatusThreshold); -// builder.add( -// builder.newFilter( -// "ThresholdFilter", -// Filter.Result.ACCEPT, -// Filter.Result.NEUTRAL -// ).addAttribute("level", builderThresholdLevel) -// ); + builder.add( + builder.newFilter( + "ThresholdFilter", + Filter.Result.ACCEPT, + Filter.Result.NEUTRAL + ).addAttribute("level", builderThresholdLevel) + ); // CONSOLE appender AppenderComponentBuilder appenderBuilder = - builder.newAppender("Stdout", "CONSOLE") + builder.newAppender("console", "CONSOLE") .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT); appenderBuilder.add(builder.newLayout("PatternLayout") - .addAttribute("pattern", CONSOLE_PATTERN)); + .addAttribute("pattern", consolePattern)); // appenderBuilder.add( // builder.newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL) -// .addAttribute("marker", "FLOW") -// ); +// .addAttribute("marker", "FLOW")); + builder.add(appenderBuilder); // Log4J internal logging builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG) - .add(builder.newAppenderRef("Stdout")) + .add(builder.newAppenderRef("console")) .addAttribute("additivity", false)); + if (sessionName != null) { - // LOGFILE appender + if (!Files.exists(loggerDir)) { + try { + Files.createDirectories(loggerDir); + } catch (Exception e) { + throw new RuntimeException("Unable to create logger directory:" + loggerDir); + } + } - LayoutComponentBuilder logfileLayout = builder.newLayout("PatternLayout") - .addAttribute("pattern", LOG_PATTERN); + // LOGFILE appender + LayoutComponentBuilder logfileLayout = builder.newLayout("PatternLayout") + .addAttribute("pattern", logfilePattern); - ComponentBuilder triggeringPolicy = builder.newComponent("Policies") - .addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule", "0 0 0 * * ?")) - .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "100M")); + String filebase = getSessionName().replaceAll("\\s", "_"); + String logfilePath = loggerDir.resolve(filebase + ".log").toString(); + this.logfileLocation = logfilePath; + String archivePath = loggerDir.resolve(filebase + "-TIMESTAMP.log.gz").toString() + .replaceAll("TIMESTAMP", "%d{MM-dd-yy}"); - AppenderComponentBuilder logsAppenderBuilder = - builder.newAppender("LOGS_APPENDER", RollingFileAppender.PLUGIN_NAME) - .addAttribute("fileName", "logs/irengine.log") - .addAttribute("filePattern", "logs/irengine-%d{MM-dd-yy}.log.gz") - .addAttribute("append", true) - .add(logfileLayout) - .addComponent(triggeringPolicy); - builder.add(logsAppenderBuilder); + ComponentBuilder triggeringPolicy = builder.newComponent("Policies") + .addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule", "0 0 0 * * ?")) + .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "100M")); -// LoggerComponentBuilder payloadBuilder = -// builder.newLogger(PAYLOADS, Level.TRACE) -// .addAttribute("additivity", false); -// -// -// if (consoleConfig.isPaylaodsEnabled()) { -// payloadBuilder = payloadBuilder.add(builder.newAppenderRef("Stdout").addAttribute("level", -// consoleConfig.getLogLevel())); -// } -// if (fileConfig.isPaylaodsEnabled()) { -// payloadBuilder = payloadBuilder.add(builder.newAppenderRef("LOGS_APPENDER").addAttribute("level", -// fileConfig.getLogLevel())); -// } -// builder.add(payloadBuilder); + AppenderComponentBuilder logsAppenderBuilder = + builder.newAppender("SCENARIO_APPENDER", RollingFileAppender.PLUGIN_NAME) + .addAttribute("fileName", logfilePath) + .addAttribute("filePattern", archivePath) + .addAttribute("append", false) + .add(logfileLayout) + .addComponent(triggeringPolicy); + builder.add(logsAppenderBuilder); + rootBuilder.add( + builder.newAppenderRef("SCENARIO_APPENDER") + .addAttribute("level", Level.valueOf(getEffectiveFileLevel().toString())) + ); + } -// LoggerComponentBuilder stacktracesBuilder = -// builder.newLogger(STACKTRACES, Level.TRACE) -// .addAttribute("additivity", false); -// if (consoleConfig.isStackTracesEnabled()) { -// stacktracesBuilder = payloadBuilder.add(builder.newAppenderRef("Stdout").addAttribute("level", -// consoleConfig.getLogLevel())); -// } -// if (fileConfig.isStackTracesEnabled()) { -// stacktracesBuilder = payloadBuilder.add(builder.newAppenderRef("LOGS_APPENDER").addAttribute("level", -// fileConfig.getLogLevel())); -// } -// builder.add(stacktracesBuilder); - - // ROOT logging and appender - builder.add( - builder.newRootLogger(ROOT_LOG_LEVEL) - .add( - builder.newAppenderRef("Stdout") - .addAttribute("level", Level.valueOf(consoleLevel.toString())) - ) - .add( - builder.newAppenderRef("LOGS_APPENDER") - .addAttribute("level", Level.valueOf(fileLevel.toString())) + rootBuilder.add( + builder.newAppenderRef("console") + .addAttribute("level", + Level.valueOf(consoleLevel.toString()) ) ); + builder.add(rootBuilder); - return builder.build(); + if (logLevelOverrides != null) { + logLevelOverrides.forEach((k, v) -> { + Level olevel = Level.valueOf(v); + builder.add(builder.newLogger(k, olevel) + .add(builder.newAppenderRef("console")) + .add(builder.newAppenderRef("SCENARIO_APPENDER")) + .addAttribute("additivity", true)); + }); + } + + BuiltConfiguration builtConfig = builder.build(); + return builtConfig; + } + + private String getSessionName() { + return sessionName; } @Override @@ -149,4 +200,87 @@ public class LoggerConfig extends ConfigurationFactory { protected String[] getSupportedTypes() { return new String[]{"*"}; } + + public void activate() { + ConfigurationFactory.setConfigurationFactory(this); + } + + public LoggerConfig setConsolePattern(String consoleLoggingPattern) { + this.consolePattern = consoleLoggingPattern; + return this; + } + + public LoggerConfig getLoggerLevelOverrides(Map logLevelOverrides) { + this.logLevelOverrides = logLevelOverrides; + return this; + } + + public Map getLogLevelOverrides() { + return logLevelOverrides; + } + + public LoggerConfig setSessionName(String sessionName) { + this.sessionName = sessionName; + return this; + } + + public LoggerConfig purgeOldFiles(Logger logger) { + if (maxLogfiles == 0) { + logger.debug("Not purging old files, since maxLogFiles is 0."); + return this; + } + + + File[] files = loggerDir.toFile().listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.getPath().endsWith(".log") || pathname.getPath().endsWith(".log.gz"); + } + }); + + if (files == null) { + return this; + } + + List filesList = Arrays.asList(files); + int remove = filesList.size() - maxLogfiles; + if (remove <= 0) { + return this; + } + + List toDelete = filesList.stream() + .sorted(fileTimeComparator) + .limit(remove) + .collect(Collectors.toList()); + + for (File file : toDelete) { + logger.info("removing extra logfile: " + file.getPath()); + if (!file.delete()) { + logger.warn("unable to delete: " + file); + try { + Files.delete(file.toPath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + return this; + } + + private static final Comparator fileTimeComparator = new Comparator() { + @Override + public int compare(File o1, File o2) { + return Long.compare(o1.lastModified(), o2.lastModified()); + } + }; + + + public String getLogfileLocation() { + return logfileLocation; + } + + public LoggerConfig setLogsDirectory(Path logsDirectory) { + this.loggerDir = logsDirectory; + return this; + } } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java deleted file mode 100644 index 3cc0b6a9a..000000000 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/ScenarioLogger.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.nosqlbench.engine.core.logging; - -import io.nosqlbench.nb.api.logging.NBLogLevel; -import org.apache.logging.log4j.Logger; - -import java.nio.file.Path; -import java.util.Map; - -public interface ScenarioLogger { - - ScenarioLogger setLogDir(Path logDir); - - Path getLogDir(); - - ScenarioLogger setMaxLogs(int maxLogfiles); - - void purgeOldFiles(Logger logger); - - ScenarioLogger setLevel(NBLogLevel levelname); - - NBLogLevel getLevel(); - - ScenarioLogger start(); - - ScenarioLogger setLogLevelOverrides(Map logLevelOverrides); - -} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java deleted file mode 100644 index cc2cfc53f..000000000 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/SessionLogConfig.java +++ /dev/null @@ -1,204 +0,0 @@ -package io.nosqlbench.engine.core.logging; - -import io.nosqlbench.nb.api.logging.NBLogLevel; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.appender.ConsoleAppender; -import org.apache.logging.log4j.core.config.Configurator; -import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder; -import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder; -import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory; -import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder; -import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; -import org.apache.logging.log4j.spi.LoggerContext; - -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; -import java.util.stream.Collectors; - -public class SessionLogConfig implements ScenarioLogger { - - // private static final String LOG_PATTERN = "%d{DEFAULT}{GMT} [%t] %-5level: %msg%n"; - private static final String DEFAULT_CONSOLE_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable"; - private final String session; - private String consolePattern = DEFAULT_CONSOLE_PATTERN; - // private final Scenario scenario; - private Path loggerDir = Path.of("logs"); - private NBLogLevel logLevel = NBLogLevel.INFO; - private int maxLogfiles = 100; - private Map logLevelOverrides = new LinkedHashMap<>(); - - public SessionLogConfig(String session) { - this.session = session; - } - - public ScenarioLogger setConsolePattern(String consolePattern) { - this.consolePattern = consolePattern; - return this; - } - - public String getConsolePattern() { - return consolePattern; - } - - public void configure() { - ConfigurationBuilder builder = ConfigurationBuilderFactory.newConfigurationBuilder(); - builder.setStatusLevel(Level.WARN); - - builder.setConfigurationName("ScenarioLogger"); - - // Append simple format to stdout - - AppenderComponentBuilder appenderBuilder = - builder.newAppender("console", "CONSOLE") - .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT); - - appenderBuilder.add(builder.newLayout("PatternLayout") - .addAttribute("pattern", consolePattern)); - - builder.add(appenderBuilder); - - -// create a rolling file appender - - Path scenarioLog = composeSessionLogName(loggerDir, session); - - LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout") -// .addAttribute("pattern", "%d [%t] %-5level: %msg%n"); - .addAttribute("pattern", "%date %level [%thread] %logger{10} [%file:%line] %msg%n"); - - appenderBuilder = builder.newAppender("scenariolog", "File") - .addAttribute("fileName", scenarioLog.getFileName()) - .addAttribute("append", false) - .add(layoutBuilder); - builder.add(appenderBuilder); - - // Assemble the scenario logger instance - Level level = Level.valueOf(logLevel.toString()); - builder.add(builder.newRootLogger(level) - .add(builder.newAppenderRef("console")) - .add(builder.newAppenderRef("scenariolog")) - .addAttribute("additivity", true)); - - logLevelOverrides.forEach((k, v) -> { - Level olevel = Level.valueOf(v); - builder.add(builder.newLogger(k, olevel) - .add(builder.newAppenderRef("console")) - .add(builder.newAppenderRef("scenariolog")) - .addAttribute("additivity", true)); - }); - - LoggerContext ctx = Configurator.initialize(builder.build()); - } - - public static Path composeSessionLogName(Path loggerDir, String session) { - String logfilePath = loggerDir.toString() + File.separator + ".log"; - Path resolved = loggerDir.resolve(session.replaceAll("\\s", "_") + ".log"); - return resolved; - } - - @Override - public ScenarioLogger setLogDir(Path logDir) { - this.loggerDir = logDir; - return this; - } - - @Override - public Path getLogDir() { - return this.loggerDir; - } - - @Override - public ScenarioLogger setMaxLogs(int maxLogfiles) { - this.maxLogfiles = maxLogfiles; - return this; - } - - @Override - public void purgeOldFiles(Logger logger) { - if (maxLogfiles == 0) { - logger.debug("Not purging old files, since maxLogFiles is 0."); - return; - } - - - File[] files = loggerDir.toFile().listFiles(new FileFilter() { - @Override - public boolean accept(File pathname) { - return pathname.getPath().endsWith(".log"); - } - }); - if (files == null) { - return; - } - - List filesList = Arrays.asList(files); - int remove = filesList.size() - maxLogfiles; - if (remove <= 0) { - return; - } - - List toDelete = filesList.stream() - .sorted(fileTimeComparator) - .limit(remove) - .collect(Collectors.toList()); - - for (File file : toDelete) { - logger.info("removing extra logfile: " + file.getPath()); - if (!file.delete()) { - logger.warn("unable to delete: " + file); - try { - Files.delete(file.toPath()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - } - - private static final Comparator fileTimeComparator = new Comparator() { - @Override - public int compare(File o1, File o2) { - return Long.compare(o1.lastModified(), o2.lastModified()); - } - }; - - @Override - public ScenarioLogger setLevel(NBLogLevel levelname) { - this.logLevel = levelname; - return this; - } - - @Override - public NBLogLevel getLevel() { - return logLevel; - } - - @Override - public ScenarioLogger start() { - if (!Files.exists(loggerDir)) { - try { - Files.createDirectories(loggerDir); - } catch (Exception e) { - throw new RuntimeException("Unable to create logger directory:" + loggerDir); - } - } - - configure(); - org.apache.logging.log4j.Logger logger = LogManager.getLogger("LOGGER"); - - purgeOldFiles(logger); - return this; - } - - @Override - public ScenarioLogger setLogLevelOverrides(Map logLevelOverrides) { - this.logLevelOverrides = logLevelOverrides; - return this; - } -} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java index 883f2b88f..33a9bdfc7 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java @@ -30,7 +30,7 @@ import java.util.ArrayList; */ public class PolyglotMetricRegistryBindings implements ProxyObject, MetricRegistryListener { - private final static Logger logger = LogManager.getLogger(PolyglotMetricRegistryBindings.class); + private final static Logger logger = LogManager.getLogger("METRICS"); private final MetricRegistry registry; MetricMap metrics = new MetricMap("ROOT",null); @@ -75,8 +75,8 @@ public class PolyglotMetricRegistryBindings implements ProxyObject, MetricRegist @Override public void onGaugeAdded(String name, Gauge gauge) { - metrics.add(name,gauge); - logger.info("gauge added: " + name +", " + gauge); + metrics.add(name, gauge); + logger.info("gauge added: " + name); } @Override diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java index 5df384fc9..9c2efee60 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java @@ -24,7 +24,6 @@ import io.nosqlbench.engine.core.PolyglotScenarioController; import io.nosqlbench.engine.core.ScenarioController; import io.nosqlbench.engine.core.ScenarioResult; import io.nosqlbench.engine.core.annotation.Annotators; -import io.nosqlbench.engine.core.logging.ScenarioLogger; import io.nosqlbench.engine.core.metrics.NashornMetricRegistryBindings; import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings; import io.nosqlbench.nb.api.Layer; @@ -59,7 +58,7 @@ import java.util.stream.Collectors; public class Scenario implements Callable { - private static final Logger logger = LogManager.getLogger("SCENARIO"); + private Logger logger = LogManager.getLogger("SCENARIO"); private State state = State.Scheduled; @@ -79,7 +78,6 @@ public class Scenario implements Callable { private boolean wantsGraaljsCompatMode; private ScenarioContext scriptEnv; private final String scenarioName; - private ScenarioLogger scenarioLogger; private ScriptParams scenarioScriptParams; private String scriptfile; private Engine engine = Engine.Graalvm; @@ -110,6 +108,15 @@ public class Scenario implements Callable { this.wantsCompiledScript = wantsCompiledScript; } + public Scenario setLogger(Logger logger) { + this.logger = logger; + return this; + } + + public Logger getLogger() { + return logger; + } + public Scenario(String name, Engine engine) { this.scenarioName = name; this.engine = engine; @@ -353,10 +360,6 @@ public class Scenario implements Callable { return "name:'" + this.getScenarioName() + "'"; } - public void setScenarioLogger(ScenarioLogger scenarioLogger) { - this.scenarioLogger = scenarioLogger; - } - public void addScenarioScriptParams(ScriptParams scenarioScriptParams) { this.scenarioScriptParams = scenarioScriptParams; } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java index 6a0c2927f..4617ed900 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java @@ -21,20 +21,17 @@ import io.nosqlbench.engine.core.IndexedThreadFactory; import io.nosqlbench.engine.core.ScenarioController; import io.nosqlbench.engine.core.ScenarioResult; import io.nosqlbench.engine.core.ScenariosResults; -import io.nosqlbench.engine.core.logging.SessionLogConfig; -import io.nosqlbench.engine.core.logging.ScenarioLogger; import io.nosqlbench.nb.api.errors.BasicError; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.nio.file.Path; import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; public class ScenariosExecutor { - private final static Logger logger = LogManager.getLogger(ScenariosExecutor.class); + private final Logger logger = LogManager.getLogger("SCENARIOS"); private final LinkedHashMap submitted = new LinkedHashMap<>(); private final ExecutorService executor; @@ -54,15 +51,6 @@ public class ScenariosExecutor { } public synchronized void execute(Scenario scenario) { - ScenarioLogger logs = new SessionLogConfig(scenario.getScenarioName()) - .setLogDir(Path.of("logs")) - .setMaxLogs(0) - .start(); - execute(scenario, logs); - } - - public synchronized void execute(Scenario scenario, ScenarioLogger scenarioLogger) { - scenario.setScenarioLogger(scenarioLogger); if (submitted.get(scenario.getScenarioName()) != null) { throw new BasicError("Scenario " + scenario.getScenarioName() + " is already defined. Remove it first to reuse the name."); } diff --git a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java index d28f7fdae..d75cf7afe 100644 --- a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java +++ b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java @@ -6,8 +6,6 @@ import io.nosqlbench.engine.cli.Cmd; import io.nosqlbench.engine.cli.NBCLICommandParser; import io.nosqlbench.engine.cli.ScriptBuffer; import io.nosqlbench.engine.core.ScenarioResult; -import io.nosqlbench.engine.core.logging.SessionLogConfig; -import io.nosqlbench.engine.core.logging.ScenarioLogger; import io.nosqlbench.engine.core.script.Scenario; import io.nosqlbench.engine.core.script.ScenariosExecutor; import io.nosqlbench.engine.rest.services.WorkSpace; @@ -115,11 +113,7 @@ public class ScenarioExecutorEndpoint implements WebServiceObject { scenario.addScriptText(buffer.getParsedScript()); - ScenarioLogger logger = new SessionLogConfig(scenario.getScenarioName()) - .setLogDir(workspace.getWorkspacePath().resolve("logs")) - .start(); - - executor.execute(scenario, logger); + executor.execute(scenario); return Response.created(UriBuilder.fromResource(ScenarioExecutorEndpoint.class).path( "scenario/" + rq.getScenarioName()).build()).entity("started").build(); diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/Environment.java b/nb-api/src/main/java/io/nosqlbench/nb/api/Environment.java index 4d92c0c93..a817f2ca5 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/Environment.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/Environment.java @@ -36,7 +36,7 @@ import java.util.regex.Pattern; * invalid in this API, except when provided as a default value. */ public class Environment { - private final static Logger logger = LogManager.getLogger("ENVIRONMENT"); + private Logger logger; // package private for testing Environment() { @@ -66,7 +66,9 @@ public class Environment { } if (references.containsKey(propname)) { if (references.get(propname).equals(value)) { - logger.warn("changing already referenced property '" + propname + "' to same value"); + if (logger != null) { + logger.warn("changing already referenced property '" + propname + "' to same value"); + } } else { throw new BasicError("Changing already referenced property '" + propname + "' from \n" + "'" + references.get(propname) + "' to '" + value + "' is not supported.\n" + @@ -108,7 +110,9 @@ public class Environment { } if (envToProp.containsKey(name.toUpperCase())) { String propName = envToProp.get(name.toUpperCase()); - logger.debug("redirecting env var '" + name + "' to property '" + propName + "'"); + if (logger != null) { + logger.debug("redirecting env var '" + name + "' to property '" + propName + "'"); + } value = System.getProperty(propName); if (value != null) { return value; @@ -173,7 +177,9 @@ public class Environment { } String value = peek(envvar); if (value == null) { - logger.debug("no value found for '" + envvar + "', returning Optional.empty() for '" + word + "'"); + if (logger != null) { + logger.debug("no value found for '" + envvar + "', returning Optional.empty() for '" + word + "'"); + } return Optional.empty(); } else { value = reference(envvar, value); diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java index dddc9c0a3..c10ce239f 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java @@ -19,8 +19,6 @@ package io.nosqlbench.engine.core.script; import io.nosqlbench.engine.core.ScenarioResult; import io.nosqlbench.engine.core.ScenariosResults; -import io.nosqlbench.engine.core.logging.SessionLogConfig; -import io.nosqlbench.engine.core.logging.ScenarioLogger; import org.apache.commons.compress.utils.IOUtils; import org.assertj.core.data.Offset; import org.junit.BeforeClass; @@ -30,7 +28,6 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.List; @@ -69,11 +66,7 @@ public class AsyncScriptIntegrationTests { } s.addScriptText(script); // s.addScriptText("load('classpath:scripts/async/" + scriptname + ".js');"); - ScenarioLogger scenarioLogger = new SessionLogConfig(scenarioName) - .setMaxLogs(0) - .setLogDir(Path.of("logs/test")) - .start(); - e.execute(s, scenarioLogger); + e.execute(s); ScenariosResults scenariosResults = e.awaitAllResults(); ScenarioResult scenarioResult = scenariosResults.getOne(); scenarioResult.reportToLog(); diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java index 5d210b544..da13c4bd8 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java @@ -19,8 +19,6 @@ package io.nosqlbench.engine.core.script; import io.nosqlbench.engine.core.ScenarioResult; import io.nosqlbench.engine.core.ScenariosResults; -import io.nosqlbench.engine.core.logging.SessionLogConfig; -import io.nosqlbench.engine.core.logging.ScenarioLogger; import org.apache.commons.compress.utils.IOUtils; import org.assertj.core.data.Offset; import org.junit.BeforeClass; @@ -29,7 +27,6 @@ import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -64,11 +61,7 @@ public class ScriptIntegrationTests { } s.addScriptText(script); // s.addScriptText("load('classpath:scripts/sync/" + scriptname + ".js');"); - ScenarioLogger scenarioLogger = new SessionLogConfig(scenarioName) - .setMaxLogs(0) - .setLogDir(Path.of("logs/test")) - .start(); - e.execute(s, scenarioLogger); + e.execute(s); ScenariosResults scenariosResults = e.awaitAllResults(); ScenarioResult scenarioResult = scenariosResults.getOne(); scenarioResult.reportToLog(); From 3f65a054636f30bf19f3f27889528954121a43d5 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Nov 2020 16:31:58 -0600 Subject: [PATCH 046/164] console friendly metrics summary --- .../io/nosqlbench/engine/core/ScenarioResult.java | 15 ++++++++++++++- .../nosqlbench/engine/core/ScenariosResults.java | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java index 61e491e01..c86330606 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java @@ -18,6 +18,7 @@ package io.nosqlbench.engine.core; +import com.codahale.metrics.ConsoleReporter; import com.codahale.metrics.MetricFilter; import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.core.logging.Log4JMetricsReporter; @@ -44,6 +45,7 @@ public class ScenarioResult { } public void reportToLog() { + logger.info("-- BEGIN METRICS DETAIL --"); Log4JMetricsReporter reporter = Log4JMetricsReporter.forRegistry(ActivityMetrics.getMetricRegistry()) .convertDurationsTo(TimeUnit.MICROSECONDS) @@ -56,13 +58,23 @@ public class ScenarioResult { } + public void reportToConsole() { + ConsoleReporter consoleReporter = ConsoleReporter.forRegistry(ActivityMetrics.getMetricRegistry()) + .convertDurationsTo(TimeUnit.MICROSECONDS) + .convertRatesTo(TimeUnit.SECONDS) + .filter(MetricFilter.ALL) + .outputTo(System.out) + .build(); + consoleReporter.report(); + } + public Optional getException() { return Optional.ofNullable(exception); } public void rethrowIfError() { - if (exception!=null) { + if (exception != null) { if (exception instanceof RuntimeException) { throw ((RuntimeException) exception); } else { @@ -74,4 +86,5 @@ public class ScenarioResult { public String getIOLog() { return this.iolog; } + } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java index bcaa05a26..12e07e822 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java @@ -67,9 +67,11 @@ public class ScenariosResults { if (oresult != null) { oresult.reportToLog(); + oresult.reportToConsole(); } else { logger.error(scenario.getScenarioName() + ": incomplete (missing result)"); } + } } From 7e880b91921260be17a4eef1647612fa581970f0 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Nov 2020 16:32:40 -0600 Subject: [PATCH 047/164] experimental grammar --- .../virtdata/lang/oldgrammars/Config.g4 | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/oldgrammars/Config.g4 diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/oldgrammars/Config.g4 b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/oldgrammars/Config.g4 new file mode 100644 index 000000000..a5bc42782 --- /dev/null +++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/oldgrammars/Config.g4 @@ -0,0 +1,60 @@ +grammar Config; +// https://www.youtube.com/watch?v=eW4WFgRtFeY + +config : OPEN_BRACE? assignments CLOSE_BRACE?; +scope : OPEN_BRACE assignments CLOSE_BRACE; +assignments : assignment? ( COMMA assignment )* ; +assignment : + (ID OPEN_BRACE cval CLOSE_BRACE) + | (ID ASSIGN cval) + | ( ID ASSIGN? scope ); + +ASSIGN : '=' | ':' ; +OPEN_BRACE : '{'; +CLOSE_BRACE : '}'; +COMMA : ','; + +ID: IDPART ('.' IDPART)* ; +IDPART: ( ( [a-zA-Z] [0-9a-zA-Z_]* ) + | ( [a-zA-Z] [0-9a-zA-Z_]* '-' [0-9a-zA-Z_]) ) + ; + +NEWLINE : '\r' '\n' | '\n' | '\r'; + +cval : ( realNumber | wholeNumber | booleanValue | stringValue | hexValue); + +realNumber: FLOAT; +wholeNumber: INTEGER; +booleanValue: BOOLEAN; +stringValue : SSTRING_LITERAL | DSTRING_LITERAL | RAW_SCOPE_LITERAL; +hexValue : HEX_LITERAL; + +LONG : '-'? INT ('l'|'L') ; +DOUBLE : ('-'? INT '.' '0'* INT EXP? | '-'? INT EXP | '-'? INT ) ('d'|'D') ; +INTEGER : '-'? INT ; +FLOAT + : '-'? INT '.' INT EXP? // 1.35, 1.35E-9, 0.3, -4.5 + | '-'? INT EXP // 1e10 -3e4 + | '-'? INT // -3, 45 + ; +BOOLEAN : 'true' | 'false'; +HEX_LITERAL: '0' ('x'|'X') HEX_CHAR+ ; +fragment HEX_CHAR: [0123456789ABCDEFabcdef_]; + +fragment INT : '0' | [1-9] [0-9]* ; // no leading zeros +fragment ZINT : [0-9]* ; // leading zeroes +fragment EXP : [Ee] [+\-]? INT ; + +SSTRING_LITERAL : '\'' (~('\'' | '\\' | '\r' | '\n') | '\\' ('\'' | '\\' | . ))* '\''; +DSTRING_LITERAL : + '"' + ( + ~('"' | '\\' | '\r' | '\n') + | '\\' ('"' | '\\' | .) + )* + '"'; + +fragment RAW_SCOPE_LITERAL: ~('}' | '\r' | '\n')+; +fragment RAW_BASIC_LITERAL : ~('"' | '\\' | '\r' | '\n')+; + +WS : [\u000C \t\n]+ -> channel(HIDDEN); From 2752fa50b5adea8050b61e4b1439a79f8999c3c3 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Nov 2020 16:51:38 -0600 Subject: [PATCH 048/164] bump major version to 4.0.0-SNAPSHOT --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqld4/pom.xml | 8 +++---- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 +++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 ++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 +++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 2 +- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 38 +++++++++++++++++----------------- pom.xml | 2 +- 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 +++++++------- 35 files changed, 114 insertions(+), 114 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 4132f7f06..7eebb773c 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 167c4fcd3..7db495c03 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-cqld4/pom.xml b/driver-cqld4/pom.xml index af7c64ddf..a7ed99184 100644 --- a/driver-cqld4/pom.xml +++ b/driver-cqld4/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT @@ -61,7 +61,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT compile diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 1eff45d60..fa0ca8512 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 8ade8e231..806dbf7b5 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index da730fc19..fdf041a23 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -6,7 +6,7 @@ io.nosqlbench mvn-defaults - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -25,13 +25,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 4ddb3cf98..9664f160d 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index c299cd5bb..54280f347 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index f2bc01595..d30e3b1f3 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-stdout - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 3623db877..0957359b1 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 30f6c6571..7ef528d72 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 2f8174793..cd329ff8d 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-stdout - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 54841c15d..5a20d1e09 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 37325d0dc..e82e035bc 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 3008fae5f..c1423d140 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench nb-annotations - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index dc9d16de6..451f496da 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench engine-docker - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 0c0dc49c3..390edc0aa 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index bc527f580..59d3a5640 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench drivers-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 47390810b..97db59a7d 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index e0ad07e69..9d15529d8 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index aef502cd0..3e628ac58 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 5116df652..e96b5a2cd 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 97a3d13c5..01b800135 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -5,7 +5,7 @@ io.nosqlbench mvn-defaults - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT pom diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index e387a13d1..69e28547f 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index b1ff56ebb..30db12b50 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -33,7 +33,7 @@ io.nosqlbench nb-annotations - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index 4fd7acc83..a7fb4f804 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -26,31 +26,31 @@ io.nosqlbench engine-rest - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench engine-cli - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench engine-docs - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench engine-core - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench engine-extensions - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT @@ -62,67 +62,67 @@ io.nosqlbench driver-web - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-kafka - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-stdout - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-diag - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-tcp - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-http - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-jmx - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-cql-shaded - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-cqlverify - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench driver-mongodb - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT @@ -246,7 +246,7 @@ io.nosqlbench driver-cqld4 - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT @@ -259,7 +259,7 @@ io.nosqlbench driver-mongodb - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/pom.xml b/pom.xml index 6d19cdf5f..6df766ae1 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT mvn-defaults diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 6f748d2e2..47d79cb23 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index f397d8bda..a55f473ff 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 9419bfb18..70ee7b286 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 5f6b65012..33701045b 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index a70bafebf..db6f7bd2f 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 260e9232a..5b8949cb7 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 49f712b1c..dd826699a 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index d754b267a..8ae260df5 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench virtdata-lib-realer - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench virtdata-api - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench virtdata-lib-random - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT virtdata-lib-basics io.nosqlbench - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.156-SNAPSHOT + 4.0.0-SNAPSHOT From 7e6aa1a2d86fe29240efbbaa54e0c34bff178e9f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 19 Nov 2020 18:04:47 -0600 Subject: [PATCH 049/164] bump source and target to Java 15 --- .github/workflows/build.yml | 2 +- .github/workflows/release.yml | 2 +- DOWNLOADS.md | 3 +- .../cql/statements/core/CQLSessionCache.java | 7 +- .../statements/core/CQLSessionCache.java | 4 +- .../ebdrivers/dsegraph/GraphActivity.java | 4 +- engine-api/pom.xml | 7 + .../{Evaluator.java => ExprEvaluator.java} | 19 +- .../api/scripting/GraalJsEvaluator.java | 53 ++++ .../api/scripting/NashornEvaluator.java | 159 ---------- ...torTest.java => GraalJsEvaluatorTest.java} | 11 +- .../nosqlbench/engine/cli/NBCLIOptions.java | 5 +- .../NashornMetricRegistryBindings.java | 285 ------------------ .../PolyglotMetricRegistryBindings.java | 7 +- .../engine/core/script/MetricsMapper.java | 8 +- .../engine/core/script/Scenario.java | 19 +- .../src/test/resources/scripts/testlib.js | 62 ---- .../docs-for-nb/getting_started/index.md | 3 +- .../optimizers/BobyqaOptimizerInstance.java | 14 +- .../optimizers/MultivariateArrayScript.java | 38 --- .../optimizers/MultivariateDynamicScript.java | 50 --- .../NashornMultivariateObjectScript.java | 39 --- mvn-defaults/pom.xml | 15 +- nb/build-bin.sh | 18 +- .../bindings/funcref_conversion.md | 3 +- 25 files changed, 129 insertions(+), 708 deletions(-) rename engine-api/src/main/java/io/nosqlbench/engine/api/scripting/{Evaluator.java => ExprEvaluator.java} (77%) create mode 100644 engine-api/src/main/java/io/nosqlbench/engine/api/scripting/GraalJsEvaluator.java delete mode 100644 engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java rename engine-api/src/test/java/io/nosqlbench/engine/api/scripting/{NashornEvaluatorTest.java => GraalJsEvaluatorTest.java} (79%) delete mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java delete mode 100644 engine-core/src/test/resources/scripts/testlib.js delete mode 100644 engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java delete mode 100644 engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java delete mode 100644 engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1adf10d25..f5a268014 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/setup-java@v1 name: setup java with: - java-version: '14' + java-version: '15' java-package: jdk architecture: x64 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2228b2171..8757d8361 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - name: setup java uses: actions/setup-java@v1 with: - java-version: '14' + java-version: '15' java-package: jdk architecture: x64 diff --git a/DOWNLOADS.md b/DOWNLOADS.md index d3d12e8ae..b20cb9575 100644 --- a/DOWNLOADS.md +++ b/DOWNLOADS.md @@ -9,7 +9,8 @@ The latest release of NoSQLBench is always available from github releases. - (be sure to `chmod +x nb` once you download it) - download [the latest release of nb.jar](https://github.com/nosqlbench/nosqlbench/releases/latest/download/nb.jar), a single-jar application. - - This requires java 14 or later, make sure your `java -version` command says that you are on Java 14 or later. + - This requires java 15 or later, make sure your `java -version + ` command says that you are on Java 15 or later. ## Docker diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java index db84e375e..82787d3bb 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/statements/core/CQLSessionCache.java @@ -11,11 +11,12 @@ import io.nosqlbench.activitytype.cql.core.ProxyTranslator; import io.nosqlbench.engine.api.activityapi.core.Shutdownable; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import io.nosqlbench.engine.api.scripting.NashornEvaluator; +import io.nosqlbench.engine.api.scripting.ExprEvaluator; +import io.nosqlbench.engine.api.scripting.GraalJsEvaluator; import io.nosqlbench.engine.api.util.SSLKsFactory; import io.nosqlbench.nb.api.errors.BasicError; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.net.ssl.SSLContext; import java.io.File; @@ -129,7 +130,7 @@ public class CQLSessionCache implements Shutdownable { if (clusteropts.isPresent()) { try { logger.info("applying cbopts:" + clusteropts.get()); - NashornEvaluator clusterEval = new NashornEvaluator<>(DseCluster.Builder.class); + ExprEvaluator clusterEval = new GraalJsEvaluator<>(DseCluster.Builder.class); clusterEval.put("builder", builder); String importEnv = "load(\"nashorn:mozilla_compat.js\");\n" + diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java index 7026e7fa7..f3075c5d5 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/statements/core/CQLSessionCache.java @@ -19,7 +19,7 @@ import io.nosqlbench.activitytype.cqld4.core.ProxyTranslator; import io.nosqlbench.engine.api.activityapi.core.Shutdownable; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import io.nosqlbench.engine.api.scripting.NashornEvaluator; +import io.nosqlbench.engine.api.scripting.GraalJsEvaluator; import io.nosqlbench.engine.api.util.SSLKsFactory; import org.apache.tinkerpop.gremlin.driver.Cluster; import org.graalvm.options.OptionMap; @@ -170,7 +170,7 @@ public class CQLSessionCache implements Shutdownable { if (clusteropts.isPresent()) { try { logger.info("applying cbopts:" + clusteropts.get()); - NashornEvaluator clusterEval = new NashornEvaluator<>(CqlSessionBuilder.class); + GraalJsEvaluator clusterEval = new GraalJsEvaluator<>(CqlSessionBuilder.class); clusterEval.put("builder", builder); String importEnv = "load(\"nashorn:mozilla_compat.js\");\n" + diff --git a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java index 51150cd6f..cd30f281d 100644 --- a/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java +++ b/driver-dsegraph-shaded/src/main/java/com/datastax/ebdrivers/dsegraph/GraphActivity.java @@ -23,7 +23,7 @@ import io.nosqlbench.engine.api.activityimpl.ParameterMap; import io.nosqlbench.engine.api.activityimpl.SimpleActivity; import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.api.metrics.ExceptionMeterMetrics; -import io.nosqlbench.engine.api.scripting.NashornEvaluator; +import io.nosqlbench.engine.api.scripting.GraalJsEvaluator; import io.nosqlbench.engine.api.templating.StrInterpolator; import io.nosqlbench.engine.api.util.TagFilter; import org.apache.logging.log4j.LogManager; @@ -188,7 +188,7 @@ public class GraphActivity extends SimpleActivity implements ActivityDefObserver if (clusteropts.isPresent()) { try { logger.info("applying cbopts:" + clusteropts.get()); - NashornEvaluator clusterEval = new NashornEvaluator<>(DseCluster.Builder.class); + GraalJsEvaluator clusterEval = new GraalJsEvaluator<>(DseCluster.Builder.class); clusterEval.put("builder", builder); String importEnv = "load(\"nashorn:mozilla_compat.js\");\n" + diff --git a/engine-api/pom.xml b/engine-api/pom.xml index c1423d140..4b9e0d05d 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -49,6 +49,13 @@ graal-sdk + + org.graalvm.js + js + runtime + + + io.dropwizard.metrics metrics-core diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/Evaluator.java b/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/ExprEvaluator.java similarity index 77% rename from engine-api/src/main/java/io/nosqlbench/engine/api/scripting/Evaluator.java rename to engine-api/src/main/java/io/nosqlbench/engine/api/scripting/ExprEvaluator.java index 90e831af6..b6330187f 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/Evaluator.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/ExprEvaluator.java @@ -35,7 +35,7 @@ package io.nosqlbench.engine.api.scripting; * * @param The return type that is needed by the caller */ -public interface Evaluator { +public interface ExprEvaluator { /** * Evaluate the provided script, returning the value that it yields @@ -45,17 +45,24 @@ public interface Evaluator { T eval(); /** - * @param scriptText Nashorn compatible script text - * @return this NahornEvaluator, for method chaining + * @param scriptText script text + * @return this ExprEvaluator, for method chaining */ - NashornEvaluator script(String scriptText); + ExprEvaluator script(String scriptText); /** * Set the variable environment of the evaluator * * @param varName the variable name to add to the environment * @param var the object to bind to the varname - * @return this NashornEvaluator, for method chaining + * @return this ExprEvaluator, for method chaining */ - NashornEvaluator put(String varName, Object var); + ExprEvaluator put(String varName, Object var); + + default ExprEvaluator put(Object... vars) { + for (int i = 0; i < vars.length; i += 2) { + this.put(vars[i].toString(), vars[i + 1]); + } + return this; + } } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/GraalJsEvaluator.java b/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/GraalJsEvaluator.java new file mode 100644 index 000000000..94f3e5e07 --- /dev/null +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/GraalJsEvaluator.java @@ -0,0 +1,53 @@ +package io.nosqlbench.engine.api.scripting; + +import org.graalvm.polyglot.*; + +public class GraalJsEvaluator implements ExprEvaluator { + + private final Class resultType; + private Context context; + private Source script; + + public GraalJsEvaluator(Class resultType) { + this.resultType = resultType; + } + + private Context getContext() { + if (context == null) { + Context.Builder contextSettings = Context.newBuilder("js") + .allowHostAccess(HostAccess.ALL) + .allowNativeAccess(true) + .allowCreateThread(true) + .allowIO(true) + .allowHostClassLookup(s -> true) + .allowHostClassLoading(true) + .allowCreateProcess(true) + .allowAllAccess(true) + .allowEnvironmentAccess(EnvironmentAccess.INHERIT) + .allowPolyglotAccess(PolyglotAccess.ALL) + .option("js.ecmascript-version", "2020") + .option("js.nashorn-compat", "true"); + context = contextSettings.build(); + } + return context; + } + + @Override + public T eval() { + Value result = getContext().eval(this.script); + T asType = result.as(resultType); + return asType; + } + + @Override + public ExprEvaluator script(String scriptText) { + this.script = Source.create("js", scriptText); + return this; + } + + @Override + public ExprEvaluator put(String varName, Object var) { + getContext().getBindings("js").putMember(varName, var); + return this; + } +} diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java b/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java deleted file mode 100644 index 4a9572728..000000000 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/scripting/NashornEvaluator.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * - * Copyright 2016 jshook - * 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.scripting; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -import javax.script.*; - -/** - * public void setBindings(Bindings bindings, int scope); - * - * @param generic parameter for return types from this evaluator - */ -public class NashornEvaluator implements Evaluator { - private final static Logger logger = LogManager.getLogger(NashornEvaluator.class); - - private static final ScriptEngineManager engineManager = new ScriptEngineManager(); - private final ScriptEngine scriptEngine; - private final SimpleBindings bindings = new SimpleBindings(); - private String script = ""; - private final Class resultType; - private CompiledScript compiled; - - /** - * Create a new NashornEvaluator. - * - * @param resultType The required class of the result type, which must extend generic parameter type t. - * @param vars Optional pairs of names and values. vars[0] is a name, vars[1] is a value, ... - */ - public NashornEvaluator(Class resultType, Object... vars) { - this.scriptEngine = engineManager.getEngineByName("nashorn"); - this.scriptEngine.setBindings(bindings, ScriptContext.ENGINE_SCOPE); - this.resultType = resultType; - for (int i = 0; i < vars.length; i += 2) { - this.put(vars[i].toString(), vars[i + 1]); - } - } - - /** - * Set the script that will be evaluated. - * @param scriptText Nashorn compatible script text - * @return this NashornEvaluator, for method chaining - */ - @Override - public NashornEvaluator script(String scriptText) { - this.script = scriptText; - try { - Object result = null; - if (scriptEngine instanceof Compilable) { - logger.info("Using direct script compilation"); - Compilable compilableEngine = (Compilable) scriptEngine; - compiled = compilableEngine.compile(script); - logger.trace("Compiled script:" + script); - } else { - logger.trace("Did not compile script: " + script); - } - } catch (ScriptException e) { - throw new RuntimeException("Script compilation error for " + scriptText + ": ", e); - } - return this; - } - - - /** - * Evaluate the compiled script if it is compiled, or the raw script text otherwise. - * It is not an error to call this without setting the script to something other than the default of "", - * but it not very useful in most cases. - * @return The value produced by the script, compiled or not - */ - @Override - public T eval() { - T result = null; - try { - Object evaled = null; - if (compiled != null) { - evaled = compiled.eval(); - } else { - evaled = scriptEngine.eval(script); - } - result = convert(resultType, evaled); - } catch (ScriptException e) { - throw new RuntimeException("Script error while evaluating result for '" + script + "':", e); - } catch (Exception o) { - throw new RuntimeException("Non-Script error while evaluating result for '" + script + "':", o); - } - return result; - } - - /** - * Put a varianble into the script environment - * @param varName the variable name to add to the environment - * @param var the object to bind to the varname - * @return this NashornEvaluator, for method chaining - */ - @Override - public NashornEvaluator put(String varName, Object var) { - bindings.put(varName, var); - return this; - } - - /** - * Convert some basic types from the script to the requested type. This makes it easier - * to deal with issues across the type systems, with the risk of unintended conversions. - * Be choosy about what you support here. Less is more. - * @param expectedType the wanted type to return - * @param result the result produced by the script - * @return the converted value - */ - private T convert(Class expectedType, Object result) { - if (expectedType.isAssignableFrom(result.getClass())) { - return expectedType.cast(result); - } - String desiredClass = expectedType.getSimpleName(); - Class resultClass = result.getClass(); - - if (resultClass == Double.class) { - switch (desiredClass) { - case "Long": - return expectedType.cast(((Double) result).longValue()); - case "Integer": - return expectedType.cast(((Double) result).intValue()); - case "Float": - return expectedType.cast(((Double) result).floatValue()); - default: - throw new RuntimeException("Incompatible result type requested for conversion from " + resultClass + " to " + desiredClass); - } - } - - if (resultClass == Long.class) { - switch (desiredClass) { - case "Integer": - return expectedType.cast(((Long) result).intValue()); - default: - throw new RuntimeException("Incompatible result type requested for conversion from " + resultClass + " to " + desiredClass); - } - } - throw new RuntimeException( - "Incompatible input type for conversion from evaluator:" + result.getClass() + ", " + - "when type " + expectedType.getSimpleName() + " was needed."); - - } - -} diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/scripting/NashornEvaluatorTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/scripting/GraalJsEvaluatorTest.java similarity index 79% rename from engine-api/src/test/java/io/nosqlbench/engine/api/scripting/NashornEvaluatorTest.java rename to engine-api/src/test/java/io/nosqlbench/engine/api/scripting/GraalJsEvaluatorTest.java index f191b4f61..d8b5de7c6 100644 --- a/engine-api/src/test/java/io/nosqlbench/engine/api/scripting/NashornEvaluatorTest.java +++ b/engine-api/src/test/java/io/nosqlbench/engine/api/scripting/GraalJsEvaluatorTest.java @@ -23,19 +23,19 @@ import java.util.Date; import static org.assertj.core.api.Assertions.assertThat; -public class NashornEvaluatorTest { +public class GraalJsEvaluatorTest { @Test public void testBasicOperations() { - NashornEvaluator ne = new NashornEvaluator<>(Long.class); - ne.put("one",1L).put("two",2L); + GraalJsEvaluator ne = new GraalJsEvaluator<>(Long.class); + ne.put("one", 1L).put("two", 2L); Long sum = ne.script("one + two;").eval(); assertThat(sum).isEqualTo(3L); } @Test public void testJavaReturnType() { - NashornEvaluator dateEval = new NashornEvaluator<>(Date.class); + GraalJsEvaluator dateEval = new GraalJsEvaluator<>(Date.class); dateEval.script("var d = new java.util.Date(234); d;"); Date aDate = dateEval.eval(); assertThat(aDate).isEqualTo(new Date(234)); @@ -43,7 +43,8 @@ public class NashornEvaluatorTest { @Test public void testOneLiner() { - String result = new NashornEvaluator(String.class, "fname", "afirstname", "lname", "alastname") + String result = new GraalJsEvaluator(String.class) + .put("fname", "afirstname", "lname", "alastname") .script("fname + lname").eval(); assertThat(result).isEqualTo("afirstnamealastname"); } 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 75e8c59fc..c642f4cd2 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 @@ -403,9 +403,8 @@ public class NBCLIOptions { arglist.removeFirst(); break; case NASHORN_ENGINE: - engine = Scenario.Engine.Nashorn; - arglist.removeFirst(); - break; + throw new RuntimeException("The nashorn engine has been deprecated in this major version of " + + "NoSQLBench"); case COMPILE_SCRIPT: arglist.removeFirst(); compileScript = true; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java deleted file mode 100644 index eb361ab8e..000000000 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/NashornMetricRegistryBindings.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * - * Copyright 2016 jshook - * 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.core.metrics; - -import com.codahale.metrics.*; -import com.codahale.metrics.Timer; -import io.nosqlbench.engine.core.script.ReadOnlyBindings; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -import java.util.*; -import java.util.stream.Collectors; - -public class NashornMetricRegistryBindings extends ReadOnlyBindings implements MetricRegistryListener { - - private final static Logger logger = LogManager.getLogger(NashornMetricRegistryBindings.class); - - private final MetricRegistry registry; - private final MetricMap metricMap = new MetricMap("ROOT"); - private final boolean failfast = true; - - public NashornMetricRegistryBindings(MetricRegistry registry) { - this.registry = registry; - registry.addListener(this); - } - - @Override - public int size() { - return metricMap.map.size(); - } - - @Override - public boolean isEmpty() { - return metricMap.map.isEmpty(); - } - - @Override - public boolean containsKey(Object key) { - return metricMap.map.containsKey(key); - } - - @Override - public boolean containsValue(Object value) { - return metricMap.map.containsValue(value); - } - - @Override - public Object get(Object key) { - Object got = metricMap.map.get(key); - if (got==null) { - throw new RuntimeException("Attempted to get metrics node with name '" + key + "', but it was not found. Perhaps you were looking for one of its children: " - + this.keySet().stream().collect(Collectors.joining(",","[","]"))); - } - return got; - } - - @Override - public Set keySet() { - return metricMap.map.keySet(); - } - - @Override - public Collection values() { - return metricMap.map.values(); - } - - @Override - public Set> entrySet() { - return metricMap.map.entrySet(); - } - - @Override - public void onGaugeAdded(String name, Gauge metric) { - MetricMap parent = findParentNodeOf(name); - parent.map.put(nodeNameOf(name), metric); - } - - private String nodeNameOf(String name) { - String[] split = name.split("\\."); - return split[split.length - 1]; - } - - private synchronized void cleanEmptyMaps(MetricMap m) { - while (m.isEmpty() && m.parent != null) { - logger.debug("removing empty map:" + m.name); - MetricMap parent = m.parent; - m.parent = null; - parent.map.remove(m.name); - m = parent; - } - } - - private synchronized MetricMap findParentNodeOf(String fullName) { - String[] names = fullName.split("\\."); - MetricMap m = metricMap; - for (int i = 0; i < names.length - 1; i++) { - String edge = names[i]; - if (m.map.containsKey(edge)) { - Object o = m.map.get(edge); - if (o instanceof MetricMap) { - m = (MetricMap) m.map.get(edge); - logger.trace("traversing edge:" + edge + " while pathing to " + fullName); - - } else { - String error = "edge exists at level:" + i + ", while pathing to " + fullName; - logger.error(error); - if (failfast) { - throw new RuntimeException(error); - } - } - } else { - MetricMap newMap = new MetricMap(edge, m); - m.map.put(edge, newMap); - m = newMap; - logger.debug("adding edge:" + edge + " while pathing to " + fullName); - } - } - return m; - } - - @Override - public void onGaugeRemoved(String name) { - MetricMap parent = findParentNodeOf(name); - parent.map.remove(nodeNameOf(name)); - cleanEmptyMaps(parent); - } - - @Override - public void onCounterAdded(String name, Counter metric) { - MetricMap parent = findParentNodeOf(name); - parent.map.put(nodeNameOf(name), metric); - - } - - @Override - public void onCounterRemoved(String name) { - MetricMap parent = findParentNodeOf(name); - parent.map.remove(nodeNameOf(name)); - cleanEmptyMaps(parent); - } - - @Override - public void onHistogramAdded(String name, Histogram metric) { - MetricMap parent = findParentNodeOf(name); - parent.map.put(nodeNameOf(name), metric); - - } - - @Override - public void onHistogramRemoved(String name) { - MetricMap parent = findParentNodeOf(name); - parent.map.remove(nodeNameOf(name)); - cleanEmptyMaps(parent); - - } - - @Override - public void onMeterAdded(String name, Meter metric) { - MetricMap parent = findParentNodeOf(name); - parent.map.put(nodeNameOf(name), metric); - - } - - @Override - public void onMeterRemoved(String name) { - MetricMap parent = findParentNodeOf(name); - parent.map.remove(nodeNameOf(name)); - cleanEmptyMaps(parent); - - } - - @Override - public void onTimerAdded(String name, Timer metric) { - MetricMap parent = findParentNodeOf(name); - parent.map.put(nodeNameOf(name), metric); - - } - - @Override - public void onTimerRemoved(String name) { - MetricMap parent = findParentNodeOf(name); - parent.map.remove(nodeNameOf(name)); - cleanEmptyMaps(parent); - - } - - public Map getMetrics() { - return getMetrics(new LinkedHashMap(), "metrics", metricMap); - } - - private Map getMetrics(Map totalMap, String prefix, MetricMap map) { - for (Entry mEntry : map.entrySet()) { - Object o = mEntry.getValue(); - String name = prefix + "." + mEntry.getKey(); - if (o instanceof Metric) { - totalMap.put(name, (Metric) o); - } else if (o instanceof MetricMap) { - getMetrics(totalMap, name, (MetricMap) o); - } else { - throw new RuntimeException("entry value must be either a Metric or a MetricMap"); - } - } - return totalMap; - } - - private class MetricMap extends ReadOnlyBindings { - Map map = new HashMap(); - MetricMap parent = null; - public String name; - - MetricMap(String name) { - this.name = name; - } - - public MetricMap(String name, MetricMap parent) { - this.parent = parent; - this.name = name; - } - - public int size() { - return map.size(); - } - - @Override - public boolean isEmpty() { - return map.isEmpty(); - } - - @Override - public boolean containsKey(Object key) { - boolean containsKey=map.containsKey(key); - if (containsKey==false) { - throw new RuntimeException("Attempted to get metrics node with name '" + key + "', but it was not found. Perhaps you " + - "were looking for one of " + this.map.keySet().stream().collect(Collectors.joining(",","[","]"))); - } - return true; - } - - @Override - public boolean containsValue(Object value) { - return map.containsValue(value); - } - - @Override - public Object get(Object key) { - Object got=map.get(key); - if (got==null) { - throw new RuntimeException("Attempted to get metrics node with name '" + key + "', but it was not found. Perhaps you " + - "were looking for one of " + this.map.keySet().stream().collect(Collectors.joining(",","[","]"))); - } - return got; - } - - @Override - public Set keySet() { - return map.keySet(); - } - - @Override - public Collection values() { - return map.values(); - } - - @Override - public Set> entrySet() { - return map.entrySet(); - } - - } -} diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java index 33a9bdfc7..d4f78b648 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java @@ -24,6 +24,7 @@ import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyObject; import java.util.ArrayList; +import java.util.Map; /** * A view of metrics objects as an object tree. @@ -124,7 +125,7 @@ public class PolyglotMetricRegistryBindings implements ProxyObject, MetricRegist @Override public void onTimerAdded(String name, Timer timer) { - metrics.add(name,timer); + metrics.add(name, timer); logger.info("timer added: " + name); } @@ -134,6 +135,10 @@ public class PolyglotMetricRegistryBindings implements ProxyObject, MetricRegist logger.info("timer removed: " + name); } + public Map getMetrics() { + throw new RuntimeException("implement me"); + } + // @Override // public int size() { // return metricMap.map.size(); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java index 361e67411..b70f7f390 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/MetricsMapper.java @@ -19,13 +19,13 @@ import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import io.nosqlbench.engine.core.metrics.NashornMetricRegistryBindings; -import org.apache.logging.log4j.Logger; +import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.lang.reflect.Method; -import java.util.*; import java.util.Timer; +import java.util.*; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -68,7 +68,7 @@ public class MetricsMapper { throw new RuntimeException("Activity type '" + activityDef.getActivityType() + "' does not exist in this runtime."); } Activity activity = activityType.get().getAssembledActivity(activityDef, new HashMap<>()); - NashornMetricRegistryBindings nashornMetricRegistryBindings = new NashornMetricRegistryBindings(ActivityMetrics.getMetricRegistry()); + PolyglotMetricRegistryBindings nashornMetricRegistryBindings = new PolyglotMetricRegistryBindings(ActivityMetrics.getMetricRegistry()); activity.initActivity(); activity.getInputDispenserDelegate().getInput(0); activity.getActionDispenserDelegate().getAction(0); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java index 9c2efee60..53763f855 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java @@ -24,11 +24,9 @@ import io.nosqlbench.engine.core.PolyglotScenarioController; import io.nosqlbench.engine.core.ScenarioController; import io.nosqlbench.engine.core.ScenarioResult; import io.nosqlbench.engine.core.annotation.Annotators; -import io.nosqlbench.engine.core.metrics.NashornMetricRegistryBindings; import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings; import io.nosqlbench.nb.api.Layer; import io.nosqlbench.nb.api.annotations.Annotation; -import jdk.nashorn.api.scripting.NashornScriptEngineFactory; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.graalvm.polyglot.Context; @@ -87,8 +85,8 @@ public class Scenario implements Callable { private long endedAtMillis = -1L; public enum Engine { - Nashorn, - Graalvm + Graalvm, + Nashorn } public Scenario( @@ -153,12 +151,7 @@ public class Scenario implements Callable { switch (engine) { case Nashorn: - NashornScriptEngineFactory f = new NashornScriptEngineFactory(); - this.scriptEngine = f.getScriptEngine("--language=es6"); - - // engineManager.getEngineByName("nashorn"); - // TODO: Figure out how to do this in engine bindings: --language=es-6 - break; + throw new RuntimeException("The nashorn engine has been deprecated in this version of NoSQLBench."); case Graalvm: Context.Builder contextSettings = Context.newBuilder("js") .allowHostAccess(HostAccess.ALL) @@ -201,7 +194,7 @@ public class Scenario implements Callable { // https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md if (wantsGraaljsCompatMode) { scriptEngine.put("scenario", scenarioController); - scriptEngine.put("metrics", new NashornMetricRegistryBindings(metricRegistry)); + scriptEngine.put("metrics", new PolyglotMetricRegistryBindings(metricRegistry)); scriptEngine.put("activities", new NashornActivityBindings(scenarioController)); } else { scriptEngine.put("scenario", new PolyglotScenarioController(scenarioController)); @@ -209,9 +202,7 @@ public class Scenario implements Callable { scriptEngine.put("activities", new NashornActivityBindings(scenarioController)); } } else if (engine == Engine.Nashorn) { - scriptEngine.put("scenario", scenarioController); - scriptEngine.put("metrics", new NashornMetricRegistryBindings(metricRegistry)); - scriptEngine.put("activities", new NashornActivityBindings(scenarioController)); + throw new RuntimeException("The Nashorn engine has been deprecated in this version of NoSQLBench."); } else { throw new RuntimeException("Unsupported engine: " + engine); } diff --git a/engine-core/src/test/resources/scripts/testlib.js b/engine-core/src/test/resources/scripts/testlib.js deleted file mode 100644 index 7d18cefbe..000000000 --- a/engine-core/src/test/resources/scripts/testlib.js +++ /dev/null @@ -1,62 +0,0 @@ -// This will be the basis for nashorn and timer-based events. - -var Platform = Java.type("javafx.application.Platform"); -var Timer = Java.type("java.util.Timer"); - -function setTimerRequest(handler, delay, interval, args) { - handler = handler || function() {}; - delay = delay || 0; - interval = interval || 0; - - var applyHandler = function() handler.apply(this, args); - var runLater = function() Platform.runLater(applyHandler); - - var timer = new Timer("setTimerRequest", true); - - if (interval > 0) { - timer.schedule(runLater, delay, interval); - } else { - timer.schedule(runLater, delay); - } - - return timer; -} - -function clearTimerRequest(timer) { - timer.cancel(); -} - -function setInterval() { - var args = Array.prototype.slice.call(arguments); - var handler = args.shift(); - var ms = args.shift(); - - return setTimerRequest(handler, ms, ms, args); -} - -function clearInterval(timer) { - clearTimerRequest(timer); -} - -function setTimeout() { - var args = Array.prototype.slice.call(arguments); - var handler = args.shift(); - var ms = args.shift(); - - return setTimerRequest(handler, ms, 0, args); -} - -function clearTimeout(timer) { - clearTimerRequest(timer); -} - -function setImmediate() { - var args = Array.prototype.slice.call(arguments); - var handler = args.shift(); - - return setTimerRequest(handler, 0, 0, args); -} - -function clearImmediate(timer) { - clearTimerRequest(timer); -} \ No newline at end of file diff --git a/engine-docs/src/main/resources/docs-for-nb/getting_started/index.md b/engine-docs/src/main/resources/docs-for-nb/getting_started/index.md index 08060ce21..38b1b8bef 100644 --- a/engine-docs/src/main/resources/docs-for-nb/getting_started/index.md +++ b/engine-docs/src/main/resources/docs-for-nb/getting_started/index.md @@ -26,7 +26,8 @@ downloading and executing nb, you get an error, please consult the ::: This documentation assumes you are using the Linux binary initiating NoSqlBench commands with `./nb`. If you are using -the jar, just replace `./nb` with `java -jar nb.jar` when running commands. If you are using the jar version, Java 14 is +the jar, just replace `./nb` with `java -jar nb.jar` when running + commands. If you are using the jar version, Java 15 is recommended, and will be required soon. ## Run a cluster diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java index 58366bdfc..138f2acc8 100644 --- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java +++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerInstance.java @@ -18,7 +18,6 @@ package io.nosqlbench.engine.extensions.optimizers; import com.codahale.metrics.MetricRegistry; -import jdk.nashorn.api.scripting.ScriptObjectMirror; import org.apache.commons.math3.analysis.MultivariateFunction; import org.apache.commons.math3.optim.*; import org.apache.commons.math3.optim.nonlinear.scalar.GoalType; @@ -96,19 +95,12 @@ public class BobyqaOptimizerInstance { } public BobyqaOptimizerInstance setObjectiveFunction(Object f) { - if (f instanceof ScriptObjectMirror) { - ScriptObjectMirror scriptObject = (ScriptObjectMirror) f; - if (!scriptObject.isFunction()) { - throw new RuntimeException("Unable to setFunction with a non-function object"); - } - this.objectiveFunctionFromScript = - new NashornMultivariateObjectScript(logger, params, scriptObject); - } - if (f instanceof Function) { // Function function = (Function)f; this.objectiveFunctionFromScript = - new PolyglotMultivariateObjectScript(logger, params, f); + new PolyglotMultivariateObjectScript(logger, params, f); + } else { + throw new RuntimeException("The objective function must be recognizable as a polyglot Function"); } return this; diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java deleted file mode 100644 index b8a1231a7..000000000 --- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateArrayScript.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.nosqlbench.engine.extensions.optimizers; - -import jdk.nashorn.api.scripting.ScriptObjectMirror; -import org.apache.commons.math3.analysis.MultivariateFunction; -import org.apache.logging.log4j.Logger; - -import java.security.InvalidParameterException; -import java.util.HashMap; -import java.util.Map; - -public class MultivariateArrayScript implements MultivariateFunction { - private final ScriptObjectMirror script; - private final MVParams params; - private final Logger logger; - - public MultivariateArrayScript(Logger logger, MVParams params, ScriptObjectMirror script) { - this.logger = logger; - this.script = script; - this.params = params; - } - - @Override - public double value(double[] doubles) { - if (doubles.length != params.size()) { - throw new InvalidParameterException("Expected " + params.size() + " doubles, not " + doubles.length); - } - - Map map = new HashMap<>(); - - for (int i = 0; i < doubles.length; i++) { - map.put(i,doubles[i]); - } - - Object result = null; - result = this.script.call(script,doubles); - return Double.valueOf(result.toString()); - } -} diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java deleted file mode 100644 index 59bc90855..000000000 --- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/MultivariateDynamicScript.java +++ /dev/null @@ -1,50 +0,0 @@ -package io.nosqlbench.engine.extensions.optimizers; - -import jdk.nashorn.api.scripting.ScriptObjectMirror; -import org.apache.commons.math3.analysis.MultivariateFunction; -import org.apache.logging.log4j.Logger; - -import java.security.InvalidParameterException; -import java.util.Arrays; - -public class MultivariateDynamicScript implements MultivariateFunction { - private final ScriptObjectMirror script; - private final int varcount; - private final Logger logger; - - public MultivariateDynamicScript(Logger logger, int varcount, ScriptObjectMirror script) { - this.logger = logger; - this.script = script; - this.varcount = varcount; - } - - @Override - public double value(double[] doubles) { - logger.info("invoking function with " + Arrays.toString(doubles)); - if (doubles.length != varcount) { - throw new InvalidParameterException("Expected " + varcount + " doubles, not " + doubles.length); - } - Object result = null; - if (doubles.length == 1) { - result = this.script.call(script, - doubles[0] - ); - } else if (doubles.length == 2) { - result = this.script.call(script, - doubles[0], doubles[1] - ); - } else if (doubles.length == 3) { - result = this.script.call(script, - doubles[0], doubles[1], doubles[2] - ); - } else if (doubles.length == 4) { - result = this.script.call(script, - doubles[0], doubles[1], doubles[2], doubles[3] - ); - } else if (doubles.length == 5) { - result = this.script.call(script, - doubles[0], doubles[1], doubles[2], doubles[3], doubles[4]); - } - return Double.valueOf(result.toString()); - } -} diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java deleted file mode 100644 index a4d2940c5..000000000 --- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/NashornMultivariateObjectScript.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.nosqlbench.engine.extensions.optimizers; - -import jdk.nashorn.api.scripting.ScriptObjectMirror; -import org.apache.commons.math3.analysis.MultivariateFunction; -import org.apache.logging.log4j.Logger; - -import java.security.InvalidParameterException; -import java.util.HashMap; -import java.util.Map; - -public class NashornMultivariateObjectScript implements MultivariateFunction { - private final ScriptObjectMirror script; - private final MVParams params; - private final Logger logger; - - public NashornMultivariateObjectScript(Logger logger, MVParams params, ScriptObjectMirror script) { - this.logger = logger; - this.script = script; - this.params = params; - } - - @Override - public double value(double[] doubles) { - if (doubles.length != params.size()) { - throw new InvalidParameterException("Expected " + params.size() + " doubles, not " + doubles.length); - } - - Map map = new HashMap<>(); - - for (int i = 0; i < doubles.length; i++) { - map.put(params.get(i).name, doubles[i]); - } - - Object object = ScriptObjectMirror.wrap(map, null); - Object result = null; - result = this.script.call(script,object); - return Double.valueOf(result.toString()); - } -} diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 01b800135..42b5c62aa 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -71,7 +71,6 @@ 3.1.0 3.0.1 3.0.0-M4 - 20.1.0 ${project.artifactId} @@ -417,29 +416,29 @@ org.graalvm.sdk graal-sdk - ${graalvm.version} + 20.3.0 org.graalvm.js js - ${graalvm.version} + 20.3.0 runtime org.graalvm.js js-scriptengine - ${graalvm.version} + 20.3.0 org.graalvm.tools profiler - ${graalvm.version} + 20.3.0 runtime org.graalvm.tools chromeinspector - ${graalvm.version} + 20.3.0 runtime @@ -507,8 +506,8 @@ true - 11 - 11 + 15 + 15 diff --git a/nb/build-bin.sh b/nb/build-bin.sh index 7c254333a..cd8235572 100755 --- a/nb/build-bin.sh +++ b/nb/build-bin.sh @@ -37,19 +37,15 @@ then (cd cache && ( if [ "$BUILD_OPENJ9" = "true" ] then - wget -c https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk14u-2020-04-27-07-27/OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz - tar xf OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz - mv jdk-14.0.1+7-jre jre - rm OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz + wget -c wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + tar -xf OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + mv jdk-15.0.1+9-jre jre + rm OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz else - wget -c https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk14u-2020-04-27-07-27/OpenJDK14U-jre_x64_linux_hotspot_2020-04-27-07-27.tar.gz - tar xf OpenJDK14U-jre_x64_linux_hotspot_2020-04-27-07-27.tar.gz - mv jdk-14.0.1+7-jre jre + wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz + tar xf OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz + mv jdk-15.0.1+9-jre jre fi - # wget -c https://github.com/AdoptOpenJDK/openjdk12-binaries/releases/download/jdk-12.0.2%2B10/OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz - # tar xf OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz - # mv jdk-12.0.2+10-jre jre - # rm OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz )) fi diff --git a/virtdata-userlibs/src/main/resources/docs-for-virtdata/bindings/funcref_conversion.md b/virtdata-userlibs/src/main/resources/docs-for-virtdata/bindings/funcref_conversion.md index d2341aaca..687db1d7f 100644 --- a/virtdata-userlibs/src/main/resources/docs-for-virtdata/bindings/funcref_conversion.md +++ b/virtdata-userlibs/src/main/resources/docs-for-virtdata/bindings/funcref_conversion.md @@ -32,7 +32,8 @@ appropriate, to ensure that VirtData selects the right functions within the flow ## Format Apply the Java String.format method to an incoming object. @see -[Java 14 String.format(...) javadoc](https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Formatter.html#syntax) Note: +[Java 15 String.format(...) javadoc](https://docs.oracle.com/en/java +/javase/14/docs/api/java.base/java/util/Formatter.html#syntax) Note: This function can often be quite slow, so more direct methods are generally preferrable. - java.lang.Object -> Format(java.lang.String: format) -> java.lang.String From 7b0e37ab3aafcd81d427a02e1b345d5eb98f3f98 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 20 Nov 2020 03:34:49 -0600 Subject: [PATCH 050/164] add metrics manifest to polyglot --- .../PolyglotMetricRegistryBindings.java | 21 ++++++++++++++++--- nb/src/test/resources/scripts/async/optimo.js | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java index d4f78b648..9257554e8 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/PolyglotMetricRegistryBindings.java @@ -18,13 +18,13 @@ package io.nosqlbench.engine.core.metrics; import com.codahale.metrics.*; +import com.codahale.metrics.Timer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyObject; -import java.util.ArrayList; -import java.util.Map; +import java.util.*; /** * A view of metrics objects as an object tree. @@ -136,7 +136,22 @@ public class PolyglotMetricRegistryBindings implements ProxyObject, MetricRegist } public Map getMetrics() { - throw new RuntimeException("implement me"); + return getMetrics(new LinkedHashMap(), "metrics", metrics); + } + + private Map getMetrics(Map totalMap, String prefix, MetricMap map) { + for (String key : map.getKeys()) { + Object o = map.get(key); + String name = prefix + "." + key; + if (o instanceof Metric) { + totalMap.put(name, (Metric) o); + } else if (o instanceof MetricMap) { + getMetrics(totalMap, name, (MetricMap) o); + } else { + throw new RuntimeException("entry value must be either a Metric or a MetricMap"); + } + } + return totalMap; } // @Override diff --git a/nb/src/test/resources/scripts/async/optimo.js b/nb/src/test/resources/scripts/async/optimo.js index 6a7675da8..bf4188ab7 100644 --- a/nb/src/test/resources/scripts/async/optimo.js +++ b/nb/src/test/resources/scripts/async/optimo.js @@ -22,5 +22,5 @@ optimo.setObjectiveFunction( var result = optimo.optimize(); print("optimized result was " + result); -print("map of result was " + result.getVarMap()); +print("map of result was " + result.getMap()); From a23808b36dc6f56f08f7560849e4255eae050e76 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 20 Nov 2020 14:56:17 -0600 Subject: [PATCH 051/164] update appimage build script for j15 --- nb/build-bin.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nb/build-bin.sh b/nb/build-bin.sh index cd8235572..3f8fce4d3 100755 --- a/nb/build-bin.sh +++ b/nb/build-bin.sh @@ -30,27 +30,27 @@ fi rsync -av appimage/skel/ "${APPDIR}/" cp target/nb.jar "${APPDIR}/usr/bin/nb.jar" -if [ ! -d "cache/jre" ] +if [ ! -d "cache/jre15" ] then - printf "getting jre once into cache/jre\n"; + printf "getting jre once into cache/jre15\n"; mkdir -p cache (cd cache && ( if [ "$BUILD_OPENJ9" = "true" ] then wget -c wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz tar -xf OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz - mv jdk-15.0.1+9-jre jre + mv jdk-15.0.1+9-jre jre15 rm OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz else wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz tar xf OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz - mv jdk-15.0.1+9-jre jre + mv jdk-15.0.1+9-jre jre15 fi )) fi mkdir -p "${APPDIR}/usr/bin/jre" -rsync -av cache/jre/ "${APPDIR}/usr/bin/jre/" +rsync -av cache/jre15/ "${APPDIR}/usr/bin/jre/" if [ ! -f "${APPDIR}/AppRun" ] then From 2ab118f400383bd86ea58c3b6fc08645d98399a3 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Sun, 22 Nov 2020 02:55:20 -0600 Subject: [PATCH 052/164] package organization --- engine-api/pom.xml | 5 -- .../api/activityapi/core/ActivityType.java | 2 +- .../filters/ExperimentalResultFilterType.java | 2 +- .../filters/ResultValueFilterType.java | 2 +- .../api/activityapi/input/InputType.java | 2 +- .../api/activityapi/output/OutputType.java | 2 +- .../engine/api/util/SimpleServiceLoader.java | 2 +- .../java/io/nosqlbench/engine/cli/NBCLI.java | 6 ++- .../ActivityExceptionHandler.java | 2 +- .../{ => lifecycle}/ActivityExecutor.java | 2 +- .../ActivityProgressIndicator.java | 2 +- .../PolyglotScenarioController.java | 2 +- .../{ => lifecycle}/ScenarioController.java | 2 +- .../{ => lifecycle}/ScenarioErrorHandler.java | 2 +- .../core/{ => lifecycle}/ScenarioResult.java | 2 +- .../{ => lifecycle}/ScenariosResults.java | 2 +- .../core/{ => metadata}/MarkdownDocInfo.java | 2 +- .../engine/core/metrics/MetricReporters.java | 2 +- .../engine/core/script/Scenario.java | 8 +-- .../engine/core/script/ScenariosExecutor.java | 8 +-- .../engine/core/ActivityExecutorTest.java | 1 + .../core/script/ScenariosExecutorTest.java | 2 +- .../resources/ScenarioExecutorEndpoint.java | 2 +- .../rest/transfertypes/LiveScenarioView.java | 2 +- .../engine/rest/transfertypes/ResultView.java | 2 +- nb-api/pom.xml | 5 ++ .../java/io/nosqlbench/nb/api}/OnError.java | 2 +- .../java/io/nosqlbench/nb/api/SystemId.java | 36 +++++++++++++ .../nb/api/annotations/Annotator.java | 2 +- .../io/nosqlbench/nb/{ => api}/spi/Named.java | 2 +- .../nb/api/config/MutableConfigModelTest.java | 52 +++++++++++++++++++ .../script/AsyncScriptIntegrationTests.java | 4 +- .../core/script/ScriptIntegrationTests.java | 4 +- .../script/SpeedCheckIntegrationTests.java | 2 +- .../bindings/VirtDataFunctionLibrary.java | 2 +- 35 files changed, 136 insertions(+), 43 deletions(-) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ActivityExceptionHandler.java (95%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ActivityExecutor.java (99%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ActivityProgressIndicator.java (98%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/PolyglotScenarioController.java (99%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ScenarioController.java (99%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ScenarioErrorHandler.java (98%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ScenarioResult.java (98%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ScenariosResults.java (98%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => metadata}/MarkdownDocInfo.java (97%) rename {engine-core/src/main/java/io/nosqlbench/engine/core/metrics => nb-api/src/main/java/io/nosqlbench/nb/api}/OnError.java (89%) create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/SystemId.java rename nb-api/src/main/java/io/nosqlbench/nb/{ => api}/spi/Named.java (85%) create mode 100644 nb-api/src/test/java/io/nosqlbench/nb/api/config/MutableConfigModelTest.java diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 4b9e0d05d..cf11ea2f7 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -106,11 +106,6 @@ netty-handler - - com.github.oshi - oshi-core - - diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java index e2909f482..b5206936d 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityType.java @@ -25,7 +25,7 @@ import io.nosqlbench.engine.api.activityimpl.SimpleActivity; import io.nosqlbench.engine.api.activityimpl.action.CoreActionDispenser; import io.nosqlbench.engine.api.activityimpl.motor.CoreMotorDispenser; import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; import java.util.Map; import java.util.Optional; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java index 1dcd50d1c..7dc634892 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ExperimentalResultFilterType.java @@ -20,7 +20,7 @@ package io.nosqlbench.engine.api.activityapi.cyclelog.filters; import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.util.SimpleConfig; import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; import java.util.function.IntPredicate; diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java index f0d930960..4f0f2e488 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/filters/ResultValueFilterType.java @@ -18,7 +18,7 @@ package io.nosqlbench.engine.api.activityapi.cyclelog.filters; import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; public interface ResultValueFilterType extends Named { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java index 7d74f7cca..59ccd4423 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/input/InputType.java @@ -19,7 +19,7 @@ package io.nosqlbench.engine.api.activityapi.input; import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; public interface InputType extends Named { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java index e8eabb2b3..04ead50f7 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/output/OutputType.java @@ -19,7 +19,7 @@ package io.nosqlbench.engine.api.activityapi.output; import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.util.SimpleServiceLoader; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; public interface OutputType extends Named { diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java b/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java index b662ebc3c..e8938e179 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/util/SimpleServiceLoader.java @@ -17,7 +17,7 @@ package io.nosqlbench.engine.api.util; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; 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 84ca8c070..44cfec7ff 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 @@ -7,9 +7,13 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.outputs.cyclelog.CycleLogIm import io.nosqlbench.engine.api.activityapi.input.InputType; import io.nosqlbench.engine.api.activityapi.output.OutputType; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import io.nosqlbench.engine.core.*; import io.nosqlbench.engine.core.annotation.Annotators; +import io.nosqlbench.engine.core.lifecycle.ScenarioErrorHandler; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenariosResults; +import io.nosqlbench.engine.core.lifecycle.ShutdownManager; import io.nosqlbench.engine.core.logging.LoggerConfig; +import io.nosqlbench.engine.core.metadata.MarkdownDocInfo; import io.nosqlbench.engine.core.metrics.MetricReporters; import io.nosqlbench.engine.core.script.MetricsMapper; import io.nosqlbench.engine.core.script.Scenario; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExceptionHandler.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExceptionHandler.java similarity index 95% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExceptionHandler.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExceptionHandler.java index e29107c02..565c859f5 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExceptionHandler.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExceptionHandler.java @@ -15,7 +15,7 @@ * / */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; public class ActivityExceptionHandler implements Thread.UncaughtExceptionHandler { diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java similarity index 99% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java index 6b0a55a88..b344f97d1 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import io.nosqlbench.engine.api.activityapi.core.*; import io.nosqlbench.engine.api.activityimpl.ActivityDef; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityProgressIndicator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityProgressIndicator.java similarity index 98% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ActivityProgressIndicator.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityProgressIndicator.java index 85a26fcd3..a94dee4b9 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ActivityProgressIndicator.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityProgressIndicator.java @@ -15,7 +15,7 @@ * / */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import io.nosqlbench.engine.api.activityapi.core.RunState; import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/PolyglotScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/PolyglotScenarioController.java similarity index 99% rename from engine-core/src/main/java/io/nosqlbench/engine/core/PolyglotScenarioController.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/PolyglotScenarioController.java index cd9b0fca4..ce6a6e990 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/PolyglotScenarioController.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/PolyglotScenarioController.java @@ -1,4 +1,4 @@ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import org.apache.logging.log4j.LogManager; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java similarity index 99% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioController.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java index 9566333a3..26f0a9540 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioController.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import io.nosqlbench.engine.api.activityapi.core.Activity; import io.nosqlbench.engine.api.activityapi.core.ActivityType; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioErrorHandler.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioErrorHandler.java similarity index 98% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioErrorHandler.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioErrorHandler.java index b149f4dff..8e4c30694 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioErrorHandler.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioErrorHandler.java @@ -1,4 +1,4 @@ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import io.nosqlbench.nb.api.errors.BasicError; import org.graalvm.polyglot.PolyglotException; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java similarity index 98% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java index c86330606..57f6c43d2 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenarioResult.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java @@ -16,7 +16,7 @@ * */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import com.codahale.metrics.ConsoleReporter; import com.codahale.metrics.MetricFilter; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java similarity index 98% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java index 12e07e822..daa937ceb 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ScenariosResults.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java @@ -15,7 +15,7 @@ * / */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import io.nosqlbench.engine.core.script.Scenario; import io.nosqlbench.engine.core.script.ScenariosExecutor; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/MarkdownDocInfo.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownDocInfo.java similarity index 97% rename from engine-core/src/main/java/io/nosqlbench/engine/core/MarkdownDocInfo.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownDocInfo.java index 4fa7d545e..e7083f695 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/MarkdownDocInfo.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metadata/MarkdownDocInfo.java @@ -1,4 +1,4 @@ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.metadata; import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.nb.api.content.Content; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java index 42528db07..7d56a0a05 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/MetricReporters.java @@ -22,7 +22,7 @@ import com.codahale.metrics.graphite.Graphite; import com.codahale.metrics.graphite.GraphiteReporter; import io.nosqlbench.engine.api.activityapi.core.Shutdownable; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import io.nosqlbench.engine.core.ShutdownManager; +import io.nosqlbench.engine.core.lifecycle.ShutdownManager; import io.nosqlbench.engine.core.logging.Log4JMetricsReporter; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java index 53763f855..a02afe9d6 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java @@ -19,10 +19,10 @@ import com.oracle.truffle.js.scriptengine.GraalJSScriptEngine; import io.nosqlbench.engine.api.extensions.ScriptingPluginInfo; import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.api.scripting.ScriptEnvBuffer; -import io.nosqlbench.engine.core.ActivityProgressIndicator; -import io.nosqlbench.engine.core.PolyglotScenarioController; -import io.nosqlbench.engine.core.ScenarioController; -import io.nosqlbench.engine.core.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ActivityProgressIndicator; +import io.nosqlbench.engine.core.lifecycle.PolyglotScenarioController; +import io.nosqlbench.engine.core.lifecycle.ScenarioController; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; import io.nosqlbench.engine.core.annotation.Annotators; import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings; import io.nosqlbench.nb.api.Layer; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java index 4617ed900..411c3aea3 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java @@ -17,10 +17,10 @@ package io.nosqlbench.engine.core.script; -import io.nosqlbench.engine.core.IndexedThreadFactory; -import io.nosqlbench.engine.core.ScenarioController; -import io.nosqlbench.engine.core.ScenarioResult; -import io.nosqlbench.engine.core.ScenariosResults; +import io.nosqlbench.engine.core.lifecycle.IndexedThreadFactory; +import io.nosqlbench.engine.core.lifecycle.ScenarioController; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenariosResults; import io.nosqlbench.nb.api.errors.BasicError; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java index f0c2c33ed..a0669beb4 100644 --- a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java +++ b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java @@ -12,6 +12,7 @@ import io.nosqlbench.engine.api.activityimpl.input.CoreInputDispenser; import io.nosqlbench.engine.api.activityimpl.input.AtomicInput; import io.nosqlbench.engine.api.activityimpl.motor.CoreMotor; import io.nosqlbench.engine.api.activityimpl.motor.CoreMotorDispenser; +import io.nosqlbench.engine.core.lifecycle.ActivityExecutor; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; import org.junit.Test; diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/script/ScenariosExecutorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/script/ScenariosExecutorTest.java index 636d20ec1..c25404c3a 100644 --- a/engine-core/src/test/java/io/nosqlbench/engine/core/script/ScenariosExecutorTest.java +++ b/engine-core/src/test/java/io/nosqlbench/engine/core/script/ScenariosExecutorTest.java @@ -17,7 +17,7 @@ package io.nosqlbench.engine.core.script; -import io.nosqlbench.engine.core.ScenariosResults; +import io.nosqlbench.engine.core.lifecycle.ScenariosResults; import org.junit.Ignore; import org.junit.Test; diff --git a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java index d75cf7afe..ccf36ce0a 100644 --- a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java +++ b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java @@ -5,7 +5,7 @@ import io.nosqlbench.engine.cli.BasicScriptBuffer; import io.nosqlbench.engine.cli.Cmd; import io.nosqlbench.engine.cli.NBCLICommandParser; import io.nosqlbench.engine.cli.ScriptBuffer; -import io.nosqlbench.engine.core.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; import io.nosqlbench.engine.core.script.Scenario; import io.nosqlbench.engine.core.script.ScenariosExecutor; import io.nosqlbench.engine.rest.services.WorkSpace; diff --git a/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/LiveScenarioView.java b/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/LiveScenarioView.java index b7ad12e11..1c7968a77 100644 --- a/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/LiveScenarioView.java +++ b/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/LiveScenarioView.java @@ -3,7 +3,7 @@ package io.nosqlbench.engine.rest.transfertypes; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyDescription; import io.nosqlbench.engine.api.activityapi.core.ProgressMeter; -import io.nosqlbench.engine.core.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; import io.nosqlbench.engine.core.script.Scenario; import java.util.ArrayList; diff --git a/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/ResultView.java b/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/ResultView.java index 2b86e3e2d..046789880 100644 --- a/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/ResultView.java +++ b/engine-rest/src/main/java/io/nosqlbench/engine/rest/transfertypes/ResultView.java @@ -1,6 +1,6 @@ package io.nosqlbench.engine.rest.transfertypes; -import io.nosqlbench.engine.core.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; public class ResultView { diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 30db12b50..43ec01752 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -57,6 +57,11 @@ gson + + com.github.oshi + oshi-core + + diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/OnError.java b/nb-api/src/main/java/io/nosqlbench/nb/api/OnError.java similarity index 89% rename from engine-core/src/main/java/io/nosqlbench/engine/core/metrics/OnError.java rename to nb-api/src/main/java/io/nosqlbench/nb/api/OnError.java index 4f36af5ba..9090e4c60 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/OnError.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/OnError.java @@ -1,4 +1,4 @@ -package io.nosqlbench.engine.core.metrics; +package io.nosqlbench.nb.api; public enum OnError { Warn, diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/SystemId.java b/nb-api/src/main/java/io/nosqlbench/nb/api/SystemId.java new file mode 100644 index 000000000..cef0ada5d --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/SystemId.java @@ -0,0 +1,36 @@ +package io.nosqlbench.nb.api; + +import oshi.SystemInfo; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.NetworkIF; + +import java.util.*; + +public class SystemId { + public static String getNodeId() { + SystemInfo sysinfo = new SystemInfo(); + HardwareAbstractionLayer hal = sysinfo.getHardware(); + List interfaces = hal.getNetworkIFs(); + Optional first = interfaces.stream() + .filter(i -> !i.getName().startsWith("docker" )) + .filter(i -> !i.getName().equals("lo" )) + .sorted((o1, o2) -> { + if (o1.getName().startsWith("e" ) && o2.getName().startsWith("e" )) { + return 0; + } + if (o1.getName().startsWith("e" )) { + return -1; + } + if (o2.getName().startsWith("e" )) { + return 1; + } + return 0; + }) + .flatMap(iface -> Arrays.stream(iface.getIPv4addr().clone())) + .filter(addr -> !(addr.startsWith("127." ))) + .findFirst(); + String systemID = first.orElse("UNKNOWN_SYSTEM_ID" ); + return systemID; + } + +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java index fde190951..2b0d7fe0d 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotator.java @@ -1,6 +1,6 @@ package io.nosqlbench.nb.api.annotations; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; /** * An implementation of this type is responsible for taking annotation details and diff --git a/nb-api/src/main/java/io/nosqlbench/nb/spi/Named.java b/nb-api/src/main/java/io/nosqlbench/nb/api/spi/Named.java similarity index 85% rename from nb-api/src/main/java/io/nosqlbench/nb/spi/Named.java rename to nb-api/src/main/java/io/nosqlbench/nb/api/spi/Named.java index ffe8279a4..06592302c 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/spi/Named.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/spi/Named.java @@ -1,4 +1,4 @@ -package io.nosqlbench.nb.spi; +package io.nosqlbench.nb.api.spi; public interface Named { /** diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/config/MutableConfigModelTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/config/MutableConfigModelTest.java new file mode 100644 index 000000000..9346bc34a --- /dev/null +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/config/MutableConfigModelTest.java @@ -0,0 +1,52 @@ +package io.nosqlbench.nb.api.config; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class MutableConfigModelTest { + + @Test + void optional() { + } + + @Test + void testOptional() { + } + + @Test + void required() { + } + + @Test + void testRequired() { + } + + @Test + void defaultto() { + } + + @Test + void testDefaultto() { + } + + @Test + void asReadOnly() { + } + + @Test + void getElements() { + } + + @Test + void getOf() { + } + + @Test + void assertValidConfig() { + } + + @Test + void apply() { + } +} \ No newline at end of file diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java index c10ce239f..5662373dd 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.core.script; -import io.nosqlbench.engine.core.ScenarioResult; -import io.nosqlbench.engine.core.ScenariosResults; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenariosResults; import org.apache.commons.compress.utils.IOUtils; import org.assertj.core.data.Offset; import org.junit.BeforeClass; diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java index da13c4bd8..f31f2cb55 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/ScriptIntegrationTests.java @@ -17,8 +17,8 @@ package io.nosqlbench.engine.core.script; -import io.nosqlbench.engine.core.ScenarioResult; -import io.nosqlbench.engine.core.ScenariosResults; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenariosResults; import org.apache.commons.compress.utils.IOUtils; import org.assertj.core.data.Offset; import org.junit.BeforeClass; diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/SpeedCheckIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/SpeedCheckIntegrationTests.java index 370ee3210..f244523c3 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/SpeedCheckIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/SpeedCheckIntegrationTests.java @@ -14,7 +14,7 @@ */ package io.nosqlbench.engine.core.script; -import io.nosqlbench.engine.core.ScenarioResult; +import io.nosqlbench.engine.core.lifecycle.ScenarioResult; import org.junit.Ignore; import org.junit.Test; diff --git a/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java b/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java index dc7126e3a..982ad4e9e 100644 --- a/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java +++ b/virtdata-api/src/main/java/io/nosqlbench/virtdata/core/bindings/VirtDataFunctionLibrary.java @@ -1,6 +1,6 @@ package io.nosqlbench.virtdata.core.bindings; -import io.nosqlbench.nb.spi.Named; +import io.nosqlbench.nb.api.spi.Named; import io.nosqlbench.virtdata.lang.ast.Expression; import io.nosqlbench.virtdata.lang.ast.FunctionCall; import io.nosqlbench.virtdata.lang.parser.VirtDataDSL; From cfa92eabcca8215672f5b380b475de506cb2e9cb Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Sun, 22 Nov 2020 02:55:46 -0600 Subject: [PATCH 053/164] package organization --- .../{ => lifecycle}/IndexedThreadFactory.java | 6 +-- .../core/{ => lifecycle}/ShutdownManager.java | 8 +-- .../core/script/NashornActivityBindings.java | 4 +- .../engine/core/script/ScenarioContext.java | 4 +- .../nb/api/config/MutableConfigModel.java | 51 ++++++++++++++----- .../io/nosqlbench/nb/api/config/Synonyms.java | 10 ++-- 6 files changed, 56 insertions(+), 27 deletions(-) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/IndexedThreadFactory.java (93%) rename engine-core/src/main/java/io/nosqlbench/engine/core/{ => lifecycle}/ShutdownManager.java (87%) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/IndexedThreadFactory.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/IndexedThreadFactory.java similarity index 93% rename from engine-core/src/main/java/io/nosqlbench/engine/core/IndexedThreadFactory.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/IndexedThreadFactory.java index 1591536fa..e510db5c7 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/IndexedThreadFactory.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/IndexedThreadFactory.java @@ -16,7 +16,7 @@ * */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; @@ -29,7 +29,7 @@ public class IndexedThreadFactory implements ThreadFactory { private final Thread.UncaughtExceptionHandler uncaughtExceptionHandler; private String name = Thread.currentThread().getName() + "-factory"; - private AtomicInteger threadIndexer = new AtomicInteger(0); + private final AtomicInteger threadIndexer = new AtomicInteger(0); public IndexedThreadFactory(String name, Thread.UncaughtExceptionHandler exceptionHandler) { this.name = name; @@ -38,7 +38,7 @@ public class IndexedThreadFactory implements ThreadFactory { public class IndexedThread extends Thread { - private int threadIndex; + private final int threadIndex; private String metricName = "default-name-" + Thread.currentThread().getName(); public IndexedThread(int threadIndex, Runnable r) { diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/ShutdownManager.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ShutdownManager.java similarity index 87% rename from engine-core/src/main/java/io/nosqlbench/engine/core/ShutdownManager.java rename to engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ShutdownManager.java index 2dcbd5c8c..7ca48ff6e 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/ShutdownManager.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ShutdownManager.java @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.nosqlbench.engine.core; +package io.nosqlbench.engine.core.lifecycle; import io.nosqlbench.engine.api.activityapi.core.Shutdownable; @@ -22,8 +22,10 @@ import java.util.LinkedList; * A simple callback handler for shutting down things gracefully. */ public class ShutdownManager { - private ShutdownManager() {} - private static ShutdownManager instance = new ShutdownManager(); + private ShutdownManager() { + } + + private static final ShutdownManager instance = new ShutdownManager(); private final LinkedList managedInstances = new LinkedList<>(); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/NashornActivityBindings.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/NashornActivityBindings.java index c38200f35..784b01e5e 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/NashornActivityBindings.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/NashornActivityBindings.java @@ -15,7 +15,7 @@ package io.nosqlbench.engine.core.script; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import io.nosqlbench.engine.core.ScenarioController; +import io.nosqlbench.engine.core.lifecycle.ScenarioController; import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyObject; @@ -29,7 +29,7 @@ import java.util.stream.Collectors; public class NashornActivityBindings implements Bindings, ProxyObject { private final ScenarioController scenario; - private Map elementMap = new HashMap(); + private final Map elementMap = new HashMap(); public NashornActivityBindings(ScenarioController scenarioController) { this.scenario = scenarioController; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioContext.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioContext.java index d7489c5df..1a87a683f 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioContext.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioContext.java @@ -14,12 +14,12 @@ */ package io.nosqlbench.engine.core.script; -import io.nosqlbench.engine.core.ScenarioController; +import io.nosqlbench.engine.core.lifecycle.ScenarioController; import io.nosqlbench.engine.api.scripting.ScriptEnvBuffer; public class ScenarioContext extends ScriptEnvBuffer { - private ScenarioController sc; + private final ScenarioController sc; public ScenarioContext(ScenarioController sc) { this.sc = sc; diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java index 16f3ed183..7cfd029fd 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/MutableConfigModel.java @@ -73,12 +73,7 @@ public class MutableConfigModel implements ConfigModel { "while configuring a " + getOf().getSimpleName()); } Object value = config.get(configkey); - if (!element.getType().isAssignableFrom(value.getClass())) { - throw new RuntimeException("Unable to assign provided configuration\n" + - "of type '" + value.getClass().getSimpleName() + " to config\n" + - "parameter of type '" + element.getType().getSimpleName() + "'\n" + - "while configuring a " + getOf().getSimpleName()); - } + Object testValue = convertValueTo(ofType.getSimpleName(), configkey, value, element.getType()); } for (ConfigElement element : elements.values()) { if (element.isRequired() && element.getDefaultValue() == null) { @@ -91,6 +86,42 @@ public class MutableConfigModel implements ConfigModel { } } + private Object convertValueTo(String configName, String paramName, Object value, Class type) { + try { + if (type.isAssignableFrom(value.getClass())) { + return type.cast(value); + } else if (Number.class.isAssignableFrom(type) + && Number.class.isAssignableFrom(value.getClass())) { + Number number = (Number) value; + if (type.equals(Float.class)) { + return number.floatValue(); + } else if (type.equals(Integer.class)) { + return number.intValue(); + } else if (type.equals(Double.class)) { + return number.doubleValue(); + } else if (type.equals(Long.class)) { + return number.longValue(); + } else if (type.equals(Byte.class)) { + return number.byteValue(); + } else if (type.equals(Short.class)) { + return number.shortValue(); + } else { + throw new RuntimeException("Number type " + type.getSimpleName() + " could " + + " not be converted from " + value.getClass().getSimpleName()); + } + } + + } catch (Exception e) { + throw e; + } + + throw new RuntimeException( + "While configuring " + paramName + " for " + configName + ", " + + "Unable to convert " + value.getClass() + " to " + + type.getCanonicalName() + ); + } + @Override public ConfigReader apply(Map config) { assertValidConfig(config); @@ -104,12 +135,8 @@ public class MutableConfigModel implements ConfigModel { cval = v.getDefaultValue(); } if (cval != null) { - if (type.isAssignableFrom(cval.getClass())) { - validConfig.put(name, cval); - } else { - throw new RuntimeException("Unable to assign a " + cval.getClass().getSimpleName() + - " to a " + type.getSimpleName()); - } + cval = convertValueTo(ofType.getSimpleName(), k, cval, type); + validConfig.put(name, cval); } }); diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java index ff7891f8e..2a76a2857 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/Synonyms.java @@ -18,11 +18,11 @@ 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("cyclerate", Set.of("targetrate", "rate")); - put("parameterized", Set.of("parametrized")); // mispelling safety net + 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 }}; /** From 3d2ff55f1c0c383dd2f9a560f106578f94bdbeba Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Sun, 22 Nov 2020 02:55:51 -0600 Subject: [PATCH 054/164] auto create apikey --- .../clients/grafana/GrafanaClientConfig.java | 28 ++++- .../grafana}/GrafanaKeyFileReader.java | 10 +- .../grafana}/GrafanaMetricsAnnotator.java | 116 +++++++++++------- .../grafana/transfer/GrafanaAnnotation.java | 17 ++- .../nb/api/config/ConfigReader.java | 10 +- 5 files changed, 122 insertions(+), 59 deletions(-) rename {engine-core/src/main/java/io/nosqlbench/engine/core/metrics => engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana}/GrafanaKeyFileReader.java (84%) rename {engine-core/src/main/java/io/nosqlbench/engine/core/metrics => engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana}/GrafanaMetricsAnnotator.java (63%) diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java index 1c8893bb4..60053eddf 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClientConfig.java @@ -21,17 +21,28 @@ public class GrafanaClientConfig { @JsonProperty("baseuri") private URI baseUrl; - @JsonProperty("timeoutms") + @JsonProperty("timeoutms" ) private int timeoutms; private final List authenticators = new ArrayList<>(); - // private LinkedHashMap headers = new LinkedHashMap<>(); private final List>> headerSources = new ArrayList<>(); public GrafanaClientConfig() { } - public void basicAuth(String username, String pw) { + private GrafanaClientConfig(URI baseUrl, int timeoutms, List authenticators, + List>> headerSources) { + this.baseUrl = baseUrl; + this.timeoutms = timeoutms; + this.authenticators.addAll(authenticators); + this.headerSources.addAll(headerSources); + } + + public GrafanaClientConfig copy() { + return new GrafanaClientConfig(baseUrl, timeoutms, authenticators, headerSources); + } + + public GrafanaClientConfig basicAuth(String username, String pw) { Objects.requireNonNull(username); String authPw = pw != null ? pw : ""; @@ -44,9 +55,9 @@ public class GrafanaClientConfig { addAuthenticator(basicAuth); addHeader("Authorization", encodeBasicAuth(username, authPw)); + return this; } - public GrafanaClientConfig addAuthenticator(Authenticator authenticator) { authenticators.add(authenticator); return this; @@ -87,7 +98,9 @@ public class GrafanaClientConfig { public HttpClient newClient() { HttpClient.Builder cb = HttpClient.newBuilder(); - cb.connectTimeout(Duration.ofMillis(timeoutms)); + if (timeoutms > 0) { + cb.connectTimeout(Duration.ofMillis(timeoutms)); + } for (Authenticator authenticator : authenticators) { cb.authenticator(authenticator); } @@ -106,8 +119,11 @@ public class GrafanaClientConfig { public HttpRequest.Builder newRequest(String path) { URI requestUri = makeUri(path); HttpRequest.Builder rqb = HttpRequest.newBuilder(requestUri); - rqb.timeout(Duration.ofMillis(timeoutms)); + if (timeoutms > 0) { + rqb.timeout(Duration.ofMillis(timeoutms)); + } getHeaders().forEach(rqb::setHeader); + return rqb; } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaKeyFileReader.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaKeyFileReader.java similarity index 84% rename from engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaKeyFileReader.java rename to engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaKeyFileReader.java index 1c3dc1eba..5cfe6acca 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaKeyFileReader.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaKeyFileReader.java @@ -1,4 +1,4 @@ -package io.nosqlbench.engine.core.metrics; +package io.nosqlbench.engine.clients.grafana; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; @@ -10,15 +10,18 @@ import java.nio.file.Path; import java.util.function.Supplier; public class GrafanaKeyFileReader implements Supplier { - private final static Logger logger = LogManager.getLogger("ANNOTATORS"); + private final static Logger logger = LogManager.getLogger("ANNOTATORS" ); private final Path keyfilePath; + public GrafanaKeyFileReader(Path path) { + this.keyfilePath = path; + } + public GrafanaKeyFileReader(String sourcePath) { this.keyfilePath = Path.of(sourcePath); } - @Override public String get() { if (!Files.exists(keyfilePath)) { @@ -27,6 +30,7 @@ public class GrafanaKeyFileReader implements Supplier { } else { try { String apikey = Files.readString(keyfilePath, StandardCharsets.UTF_8); + apikey = apikey.trim(); return apikey; } catch (IOException e) { throw new RuntimeException(e); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaMetricsAnnotator.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java similarity index 63% rename from engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaMetricsAnnotator.java rename to engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java index 00471adee..25d50aac6 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/GrafanaMetricsAnnotator.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java @@ -1,26 +1,29 @@ -package io.nosqlbench.engine.core.metrics; +package io.nosqlbench.engine.clients.grafana; -import io.nosqlbench.engine.clients.grafana.GrafanaClient; -import io.nosqlbench.engine.clients.grafana.GrafanaClientConfig; import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation; import io.nosqlbench.nb.annotations.Service; +import io.nosqlbench.nb.api.Environment; +import io.nosqlbench.nb.api.OnError; +import io.nosqlbench.nb.api.SystemId; import io.nosqlbench.nb.api.annotations.Annotation; import io.nosqlbench.nb.api.annotations.Annotator; import io.nosqlbench.nb.api.config.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; import java.util.function.Function; import java.util.function.Supplier; -@Service(value = Annotator.class, selector = "grafana") +@Service(value = Annotator.class, selector = "grafana" ) public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { - private final static Logger logger = LogManager.getLogger("ANNOTATORS"); - private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS"); + private final static Logger logger = LogManager.getLogger("ANNOTATORS" ); + private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS" ); private OnError onError = OnError.Warn; private GrafanaClient client; @@ -38,43 +41,43 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { ga.setTimeEnd(annotation.getEnd()); annotation.getLabels().forEach((k, v) -> { - ga.getTags().put(k, v); + ga.getTags().add(k + ":" + v); }); - ga.getTags().put("layer", annotation.getLayer().toString()); + ga.getTags().add("layer:" + annotation.getLayer().toString()); Map labels = annotation.getLabels(); - Optional.ofNullable(labels.get("alertId")) + Optional.ofNullable(labels.get("alertId" )) .map(Integer::parseInt).ifPresent(ga::setAlertId); - ga.setData(annotation.toString()); + ga.setText(annotation.toString()); annotation.getSession(); // Target - Optional.ofNullable(labels.get("type")) + Optional.ofNullable(labels.get("type" )) .ifPresent(ga::setType); - Optional.ofNullable(labels.get("id")).map(Integer::valueOf) + Optional.ofNullable(labels.get("id" )).map(Integer::valueOf) .ifPresent(ga::setId); - Optional.ofNullable(labels.get("alertId")).map(Integer::valueOf) + Optional.ofNullable(labels.get("alertId" )).map(Integer::valueOf) .ifPresent(ga::setAlertId); - Optional.ofNullable(labels.get("dashboardId")).map(Integer::valueOf) + Optional.ofNullable(labels.get("dashboardId" )).map(Integer::valueOf) .ifPresent(ga::setDashboardId); - Optional.ofNullable(labels.get("panelId")).map(Integer::valueOf) + Optional.ofNullable(labels.get("panelId" )).map(Integer::valueOf) .ifPresent(ga::setPanelId); - Optional.ofNullable(labels.get("userId")).map(Integer::valueOf) + Optional.ofNullable(labels.get("userId" )).map(Integer::valueOf) .ifPresent(ga::setUserId); - Optional.ofNullable(labels.get("userName")) + Optional.ofNullable(labels.get("userName" )) .ifPresent(ga::setUserName); - Optional.ofNullable(labels.get("metric")) + Optional.ofNullable(labels.get("metric" )) .ifPresent(ga::setMetric); // Details @@ -107,60 +110,81 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { GrafanaClientConfig gc = new GrafanaClientConfig(); gc.setBaseUri(cfg.param("baseurl", String.class)); - if (cfg.containsKey("tags")) { + if (cfg.containsKey("tags" )) { this.tags = ParamsParser.parse(cfg.param("tags", String.class), false); } - if (cfg.containsKey("apikeyfile")) { - String apikeyfile = cfg.paramEnv("apikeyfile", String.class); - AuthWrapper authHeaderSupplier = new AuthWrapper( - "Authorization", - new GrafanaKeyFileReader(apikeyfile), - s -> "Bearer " + s + ";" - ); - gc.addHeaderSource(authHeaderSupplier); - } - - if (cfg.containsKey("apikey")) { - gc.addHeaderSource(() -> Map.of("Authorization", "Bearer " + cfg.param("apikey", String.class))); - } - - if (cfg.containsKey("username")) { - if (cfg.containsKey("password")) { + if (cfg.containsKey("username" )) { + if (cfg.containsKey("password" )) { gc.basicAuth( cfg.param("username", String.class), cfg.param("password", String.class) ); } else { - gc.basicAuth(cfg.param("username", String.class), ""); + gc.basicAuth(cfg.param("username", String.class), "" ); } } - this.onError = OnError.valueOfName(cfg.get("onerror").toString()); + Path keyfilePath = null; + if (cfg.containsKey("apikeyfile" )) { + String apikeyfile = cfg.paramEnv("apikeyfile", String.class); + keyfilePath = Path.of(apikeyfile); + } else if (cfg.containsKey("apikey" )) { + gc.addHeaderSource(() -> Map.of("Authorization", "Bearer " + cfg.param("apikey", String.class))); + } else { + Optional apikeyLocation = Environment.INSTANCE.interpolate("$NBSTATEDIR/grafana_apikey" ); + keyfilePath = apikeyLocation.map(Path::of).orElseThrow(); + } + + if (!Files.exists(keyfilePath)) { + logger.info("Auto-configuring grafana apikey." ); + GrafanaClientConfig apiClientConf = gc.copy().basicAuth("admin", "admin" ); + GrafanaClient apiClient = new GrafanaClient(apiClientConf); + try { + String nodeId = SystemId.getNodeId(); + + String keyName = "nosqlbench-" + nodeId + "-" + System.currentTimeMillis(); + ApiToken apiToken = apiClient.createApiToken(keyName, "Admin", Long.MAX_VALUE); + Files.writeString(keyfilePath, apiToken.getKey()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + AuthWrapper authHeaderSupplier = new AuthWrapper( + "Authorization", + new GrafanaKeyFileReader(keyfilePath), + s -> "Bearer " + s + ); + gc.addHeaderSource(authHeaderSupplier); + + this.onError = OnError.valueOfName(cfg.get("onerror" ).toString()); this.client = new GrafanaClient(gc); + + } @Override public ConfigModel getConfigModel() { return new MutableConfigModel(this) .required("baseurl", String.class, - "The base url of the grafana node, like http://localhost:3000/") - .defaultto("apikeyfile", "$NBSTATEDIR/grafana_key", - "The file that contains the api key, supersedes apikey") + "The base url of the grafana node, like http://localhost:3000/" ) + .defaultto("apikeyfile", "$NBSTATEDIR/grafana_apikey", + "The file that contains the api key, supersedes apikey" ) .optional("apikey", String.class, - "The api key to use, supersedes basic username and password") + "The api key to use, supersedes basic username and password" ) .optional("username", String.class, - "The username to use for basic auth") + "The username to use for basic auth" ) .optional("password", String.class, - "The password to use for basic auth") + "The password to use for basic auth" ) .defaultto("tags", "source:nosqlbench", - "The tags that identify the annotations, in k:v,... form") + "The tags that identify the annotations, in k:v,... form" ) // .defaultto("onerror", OnError.Warn) .defaultto("onerror", "warn", - "What to do when an error occurs while posting an annotation") + "What to do when an error occurs while posting an annotation" ) .defaultto("timeoutms", 5000, - "connect and transport timeout for the HTTP client") + "connect and transport timeout for the HTTP client" ) .asReadOnly(); } diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java index b492a3a76..058abdca9 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java @@ -17,7 +17,8 @@ public class GrafanaAnnotation { private String text; private String metric; private String type; - private Map tags = new LinkedHashMap<>(); + private final List tags = new ArrayList<>(); + // private Map tags = new LinkedHashMap<>(); private Object data; public Integer getId() { @@ -124,12 +125,22 @@ public class GrafanaAnnotation { this.type = type; } - public Map getTags() { + public List getTags() { return tags; } + public void addTag(String tag) { + this.tags.add(tag); + } + + public void setTags(List tags) { + tags.forEach(this::addTag); + } + public void setTags(Map tags) { - this.tags = tags; + tags.forEach((k, v) -> { + this.addTag(k + ":" + v); + }); } public Object getData() { diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java index 5457fa8d4..c26c2a80e 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/config/ConfigReader.java @@ -31,10 +31,18 @@ public class ConfigReader extends LinkedHashMap { Object o = get(name); ConfigElement elem = configModel.getElements().get(name); if (elem == null) { - throw new RuntimeException("Invalid config element named '" + name + "'"); + throw new RuntimeException("Invalid config element named '" + name + "'" ); } Class type = (Class) elem.getType(); T typeCastedValue = type.cast(o); return typeCastedValue; } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(this.configModel.getOf().getSimpleName()).append(":" ); + sb.append(this.configModel.toString()); + return sb.toString(); + + } } From 40897879ec702e96966277ef41e18d4e5c50c912 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 14:18:26 -0600 Subject: [PATCH 055/164] core activity impl now handles alias defaults --- .../activitytype/cql/core/CqlActivityType.java | 5 ----- .../activitytype/stdout/StdoutActivityType.java | 5 ----- .../engine/api/activityimpl/SimpleActivity.java | 15 +++++++++++++++ 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java index 7572aad8e..2b5421bd5 100644 --- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java +++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java @@ -34,11 +34,6 @@ public class CqlActivityType implements ActivityType { throw new RuntimeException("Currently, the cql activity type requires yaml/workload activity parameter."); } - // allow shortcut: yaml parameter provide the default alias name - if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) { - activityDef.getParams().set("alias",yaml.get()); - } - return new CqlActivity(activityDef); } diff --git a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java index 6de74b7cd..0399bacf2 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java +++ b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java @@ -27,11 +27,6 @@ public class StdoutActivityType implements ActivityType { "."); } - // allow shortcut: yaml parameter provide the default alias name - if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) { - activityDef.getParams().set("alias",yaml.get()); - } - return new StdoutActivity(activityDef); } 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 884a7f569..09e00fbf0 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 @@ -27,6 +27,7 @@ import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Optional; import java.util.function.Function; import java.util.function.Supplier; @@ -52,9 +53,23 @@ public class SimpleActivity implements Activity, ProgressCapable { private ActivityInstrumentation activityInstrumentation; private PrintWriter console; private long startedAtMillis; + private int nameEnumerator = 0; public SimpleActivity(ActivityDef activityDef) { this.activityDef = activityDef; + if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) { + Optional workloadOpt = activityDef.getParams().getOptionalString( + "workload", + "yaml" + ); + if (workloadOpt.isPresent()) { + activityDef.getParams().set("alias", workloadOpt.get()); + } else { + activityDef.getParams().set("alias", + activityDef.getActivityType().toUpperCase(Locale.ROOT) + + String.valueOf(nameEnumerator++)); + } + } } public SimpleActivity(String activityDefString) { From 7a403252cc67a2da96da97f803f4979a496c4e98 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 14:18:33 -0600 Subject: [PATCH 056/164] cqld4 api updates --- .../nosqlbench/activitytype/cqld4/core/CqlActivityType.java | 6 ------ .../nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java index 28d117e52..290be30b8 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java @@ -3,7 +3,6 @@ package io.nosqlbench.activitytype.cqld4.core; import com.datastax.oss.driver.api.core.data.TupleValue; import com.datastax.oss.driver.api.core.type.UserDefinedType; -import io.nosqlbench.activitytype.cqld4.codecsupport.UDTJavaType; import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; @@ -35,11 +34,6 @@ public class CqlActivityType implements ActivityType { throw new RuntimeException("Currently, the cql activity type requires yaml/workload activity parameter."); } - // allow shortcut: yaml parameter provide the default alias name - if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) { - activityDef.getParams().set("alias",yaml.get()); - } - return new CqlActivity(activityDef); } diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java index f00f6f2f2..06dbf2f1c 100644 --- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java +++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java @@ -79,7 +79,7 @@ public class CqlAsyncAction extends BaseAsyncAction { @Override public void startOpCycle(TrackedOp opc) { - CqlOpData cqlop = opc.getData(); + CqlOpData cqlop = opc.getOpData(); long cycle = opc.getCycle(); // bind timer covers all statement selection and binding, skipping, transforming logic @@ -123,7 +123,7 @@ public class CqlAsyncAction extends BaseAsyncAction { public void onSuccess(StartedOp sop, AsyncResultSet resultSet) { - CqlOpData cqlop = sop.getData(); + CqlOpData cqlop = sop.getOpData(); HashedCQLErrorHandler.resetThreadStatusCode(); if (cqlop.skipped) { @@ -218,7 +218,7 @@ public class CqlAsyncAction extends BaseAsyncAction { public void onFailure(StartedOp startedOp) { - CqlOpData cqlop = startedOp.getData(); + CqlOpData cqlop = startedOp.getOpData(); long serviceTime = startedOp.getCurrentServiceTimeNanos(); // Even if this is retryable, we expose error events From ff6492763d8e8791c05f34ec4de2d62060fd655c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 14:18:39 -0600 Subject: [PATCH 057/164] docs updates --- devdocs/devguide/hybrid_ratelimiter.md | 244 +++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 devdocs/devguide/hybrid_ratelimiter.md diff --git a/devdocs/devguide/hybrid_ratelimiter.md b/devdocs/devguide/hybrid_ratelimiter.md new file mode 100644 index 000000000..1da432cb6 --- /dev/null +++ b/devdocs/devguide/hybrid_ratelimiter.md @@ -0,0 +1,244 @@ +## RateLimiter Design + +The nosqlbench rate limiter is a hybrid design, combining ideas from +well-known algorithms with a heavy dose of mechanical sympathy. The +resulting implementation provides the following: + +1. A basic design that can be explained in one page (this page!) +2. High throughput, compared to other rate limiters tested. +3. Graceful degradation with increasing concurrency. +4. Clearly defined behavioral semantics. +5. Efficient burst capability, for tunable catch-up rates. +6. Efficient calculation of wait time. + +## Parameters + +**rate** - In simplest terms, users simply need to configure the *rate*. +For example, `rate=12000` specifies an op rate of 12000 ops/second. + +**burst rate** - Additionally, users may specify a burst rate which can be +used to recover unused time when a client is able to go faster than the +strict limit. The burst rate is multiplied by the _op rate_ to arrive at +the maximum rate when wait time is available to recover. For +example, `rate=12000,1.1` +specifies that a client may operate at 12000 ops/s _when it is caught up_, +while allowing it to go at a rate of up to 13200 ops/s _when it is behind +schedule_. + +## Design Principles + +The core design of the rate limiter is based on +the [token bucket](https://en.wikipedia.org/wiki/Token_bucket) algorithm +as established in the telecom industry for rate metering. Additional +refinements have been added to allow for flexible and reliable use on +non-realtime systems. + +The unit of scheduling used in this design is the token, corresponding +directly to a nanosecond of time. The scheduling time that is made +available to callers is stored in a pool of tokens which is set to a +configured size. The size of the token pool determines how many grants are +allowed to be dispatched before the next one is forced to wait for +available tokens. + +At some regular frequency, a filler thread adds tokens (nanoseconds of +time to be distributed to waiting ops) to the pool. The callers which are +waiting for these tokens consume a number of tokens serially. If the pool +does not contain the requested number of tokens, then the caller is +blocked using basic synchronization primitives. When the pool is filled +any blocked callers are unblocked. + +The hybrid rate limiter tracks and accumulates both the passage of system +time and the usage rate of this time as a measurement of progress. The +delta between these two reference points in time captures a very simple +and empirical value of imposed wait time. + +That is, the time which was allocated but which was not used always +represents a slow down which is imposed by external factors. This +manifests as slower response when considering the target rate to be +equivalent to user load. + +## Design Details + +In fact, there are three pools. The _active_ pool, the _bursting_ pool, +and the +_waiting_ pool. The active pool has a limited size based on the number of +operations that are allowed to be granted concurrently. + +The bursting pool is sized according to the relative burst rate and the +size of the active pool. For example, with an op rate of 1000 ops/s and a +burst rate of 1.1, the active pool can be sized to 1E9 nanos (one second +of nanos), and the burst pool can be sized to 1E8 (1/10 of that), thus +yielding a combined pool size of 1E9 + 1E8, or 1100000000 ns. + +The waiting pool is where all extra tokens are held in reserve. It is +unlimited except by the size of a long value. The size of the waiting pool +is a direct measure of wait time in nanoseconds. + +Within the pools, tokens (time) are neither created nor destroyed. They +are added by the filler based on the passage of time, and consumed by +callers when they become available. In between these operations, the net +sum of tokens is preserved. In short, when time deltas are observed in the +system clock, this time is accumulated into the available scheduling time +of the token pools. In this way, the token pool acts as a metered +dispenser of scheduling time to waiting (or not) consumers. + +The filler thread adds tokens to the pool according to the system +real-time clock, at some estimated but unreliable interval. The frequency +of filling is set high enough to give a reliable perception of time +passing smoothly, but low enough to avoid wasting too much thread time in +calling overhead. (It is set to 1K/s by default). Each time filling +occurs, the real-time clock is check-pointed, and the time delta is fed +into the pool filling logic as explained below. + +## Visual Explanation + +The diagram below explains the moving parts of the hybrid rate limiter. +The arrows represent the flow of tokens (ns) as a form of scheduling +currency. + +The top box shows an active token filler thread which polls the system +clock and accumulates new time into the token pool. + +The bottom boxes represent concurrent readers of the token pool. These are +typically independent threads which do a blocking read for tokens once +they are ready to execute the rate-limited task. + +![Hybrid Ratelimiter Schematic](hybrid_ratelimiter.png) + +In the middle, the passive component in this diagram is the token pool +itself. When the token filler adds tokens, it never blocks. However, the +token filler can cause any readers of the token pool to unblock so that +they can acquire newly available tokens. + +When time is added to the token pool, the following steps are taken: + +1) New tokens (based on measured time elapsed since the last fill) are + added to the active pool until it is full. +2) Any extra tokens are added to the waiting pool. +3) If the waiting pool has any tokens, and there is room in the bursting + pool, some tokens are moved from the waiting pool to the bursting pool + according to how many will fit. + +When a caller asks for a number of tokens, the combined total from the +active and burst pools is available to that caller. If the number of +tokens needed is not yet available, then the caller will block until +tokens are added. + +## Bursting Logic + +Tokens in the waiting pool represent time that has not been claimed by a +caller. Tokens accumulate in the waiting pool as a side-effect of +continuous filling outpacing continuous draining, thus creating a backlog +of operations. + +The pool sizes determine both the maximum instantaneously available +operations as well as the rate at which unclaimed time can be back-filled +back into the active or burst pools. + +### Normalizing for Jitter + +Since it is not possible to schedule the filler thread to trigger on a +strict and reliable schedule (as in a real-time system), the method of +moving tokens from the waiting pool to the bursting pool must account for +differences in timing. Thus, tokens which are activated for bursting are +scaled according to the amount of time added in the last fill, relative to +the maximum active pool. This means that a full pool fill will allow a +full burst pool fill, presuming wait time is positive by that amount. It +also means that the same effect can be achieved by ten consecutive fills +of a tenth the time each. In effect, bursting is normalized to the passage +of time along with the burst rate, with a maximum cap imposed when +operations are unclaimed by callers. + +## Mechanical Trade-offs + +In this implementation, it is relatively easy to explain how accuracy and +performance trade-off. They are competing concerns. Consider these two +extremes of an isochronous configuration: + +### Slow Isochronous + +For example, the rate limiter could be configured for strict isochronous +behavior by setting the active pool size to *one* op of nanos and the +burst rate to 1.0, thus disabling bursting. If the op rate requested is 1 +op/s, this configuration will work relatively well, although *any* caller +which doesn't show up (or isn't already waiting) when the tokens become +available will incur a waittime penalty. The odds of this are relatively +low for a high-velocity client. + +### Fast Isochronous + +However, if the op rate for this type of configuration is set to 1E8 +operations per second, then the filler thread will be adding 100 ops worth +of time when there is only *one* op worth of active pool space. This is +due to the fact that filling can only occur at a maximal frequency which +has been set to 1K fills/s on average. That will create artificial wait +time, since the token consumers and producers would not have enough pool +space to hold the tokens needed during fill. It is not possible on most +systems to fill the pool at arbitrarily high fill frequencies. Thus, it is +important for users to understand the limits of the machinery when using +high rates. In most scenarios, these limits will not be onerous. + +### Boundary Rules + +Taking these effects into account, the default configuration makes some +reasonable trade-offs according to the rules below. These rules should +work well for most rates below 50M ops/s. The net effect of these rules is +to increase work bulking within the token pools as rates go higher. + +Trying to go above 50M ops/s while also forcing isochronous behavior will +result in artificial wait-time. For this reason, the pool size itself is +not user-configurable at this time. + +- The pool size will always be at least as big as two ops. This rule + ensures that there is adequate buffer space for tokens when callers are + accessing the token pools near the rate of the filler thread. If this + were not ensured, then artificial wait time would be injected due to + overflow error. +- The pool size will always be at least as big as 1E6 nanos, or 1/1000 of + a second. This rule ensures that the filler thread has a reasonably + attainable update frequency which will prevent underflow in the active + or burst pools. +- The number of ops that can fit in the pool will determine how many ops + can be dispatched between fills. For example, an op rate of 1E6 will + mean that up to 1000 ops worth of tokens may be present between fills, + and up to 1000 ops may be allowed to start at any time before the next + fill. + + .1 ops/s : .2 seconds worth 1 ops/s : 2 seconds worth 100 ops/s : 2 + seconds worth + +In practical terms, this means that rates slower than 1K ops/S will have +their strictness controlled by the burst rate in general, and rates faster +than 1K ops/S will automatically include some op bulking between fills. + +## History + +A CAS-oriented method which compensated for RTC calling overhead was used +previously. This method afforded very high performance, but it was +difficult to reason about. + +This implementation replaces that previous version. Basic synchronization +primitives (implicit locking via synchronized methods) performed +surprisingly well -- well enough to discard the complexity of the previous +implementation. + +Further, this version is much easier to study and reason about. + +## New Challenges + +While the current implementation works well for most basic cases, high CPU +contention has shown that it can become an artificial bottleneck. Based on +observations on higher end systems with many cores running many threads +and high target rates, it appears that the rate limiter becomes a resource +blocker or forces too much thread management. + +Strategies for handling this should be considered: + +1) Make callers able to pseudo-randomly (or not randomly) act as a token + filler, such that active consumers can do some work stealing from the + original token filler thread. +2) Analyze the timing and history of a high-contention scenario for + weaknesses in the parameter adjustment rules above. +3) Add internal micro-batching at the consumer interface, such that + contention cost is lower in general. +4) Partition the rate limiter into multiple slices. From 0b03da159c107abb94ee5714ed5f10332de6cccd Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 14:18:59 -0600 Subject: [PATCH 058/164] misc code cleanups --- .../activitytype/http/HttpAction.java | 114 +----------------- mvn-defaults/pom.xml | 5 +- 2 files changed, 8 insertions(+), 111 deletions(-) diff --git a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java index b97425c47..9c7464551 100644 --- a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java +++ b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java @@ -7,11 +7,10 @@ import io.nosqlbench.engine.api.activityapi.core.SyncAction; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.nb.api.errors.BasicError; -import io.nosqlbench.virtdata.core.templates.StringBindings; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -import java.io.*; +import java.io.FileNotFoundException; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @@ -28,14 +27,11 @@ public class HttpAction implements SyncAction { private final HttpActivity httpActivity; private final int slot; private final int maxTries = 1; - private boolean showstmts; private OpSequence sequencer; private HttpClient client; private final HttpResponse.BodyHandler bodyreader = HttpResponse.BodyHandlers.ofString(); - private final long timeoutMillis=30000L; - public HttpAction(ActivityDef activityDef, int slot, HttpActivity httpActivity) { this.slot = slot; @@ -54,25 +50,15 @@ public class HttpAction implements SyncAction { @Override public int runCycle(long cycleValue) { - StringBindings stringBindings; - String statement = null; - InputStream result = null; + + // The request to be used must be constructed from the template each time. + HttpOp httpOp = null; // The bind timer captures all the time involved in preparing the // operation for execution, including data generation as well as // op construction - - // The request to be used must be constructed from the template each time. - HttpOp httpOp=null; - - // A specifier for what makes a response ok. If this is provided, then it is - // either a list of valid http status codes, or if non-numeric, a regex for the body - // which must match. - // If not provided, then status code 200 is the only thing required to be matched. - String ok; - try (Timer.Context bindTime = httpActivity.bindTimer.time()) { - ReadyHttpOp readHTTPOperation = httpActivity.getSequencer().get(cycleValue); + ReadyHttpOp readHTTPOperation = sequencer.get(cycleValue); httpOp = readHTTPOperation.apply(cycleValue); } catch (Exception e) { if (httpActivity.isDiagnosticMode()) { @@ -135,98 +121,10 @@ public class HttpAction implements SyncAction { } } - -// if (ok == null) { -// if (response.statusCode() != 200) { -// throw new ResponseError("Result had status code " + -// response.statusCode() + ", but 'ok' was not set for this statement," + -// "so it is considered an error."); -// } -// } else { -// String[] oks = ok.split(","); -// for (String ok_condition : oks) { -// if (ok_condition.charAt(0)>='0' && ok_condition.charAt(0)<='9') { -// int matching_status = Integer.parseInt(ok_condition); -// } else { -// Pattern successRegex = Pattern.compile(ok); -// } -// } -//// Matcher matcher = successRegex.matcher(String.valueOf(response.statusCode())); -//// if (!matcher.matches()) { -//// throw new BasicError("status code " + response.statusCode() + " did not match " + success); -//// } -// } } return 0; } -// String body = future.body(); - - -// String[] splitStatement = statement.split("\\?"); -// String path, query; -// -// path = splitStatement[0]; -// query = ""; -// -// if (splitStatement.length >= 2) { -// query = splitStatement[1]; -// } -// -// URI uri = new URI( -// "http", -// null, -// host, -// httpActivity.getPort(), -// path, -// query, -// null); -// -// statement = uri.toString(); -// -// showstmts = httpActivity.getShowstmts(); - -// if (showstmts) { -// logger.info("STMT(cycle=" + cycleValue + "):\n" + statement); -// } -// } catch (URISyntaxException e) { -// e.printStackTrace(); -// } -// -// long nanoStartTime=System.nanoTime(); -// - -// Timer.Context resultTime = httpActivity.resultTimer.time(); -// try { -// StringBuilder res = new StringBuilder(); -// -// BufferedReader rd = new BufferedReader(new InputStreamReader(result)); -// String line; -// while ((line = rd.readLine()) != null) { -// res.append(line); -// } -// rd.close(); -// -// } catch (Exception e) { -// long resultNanos = resultTime.stop(); -// resultTime = null; -// } finally { -// if (resultTime != null) { -// resultTime.stop(); -// } -// -// } -// -// } -// long resultNanos = System.nanoTime() - nanoStartTime; -// httpActivity.resultSuccessTimer.update(resultNanos, TimeUnit.NANOSECONDS); - - -// protected HttpActivity getHttpActivity () { -// return httpActivity; -// } -// } - private HttpRequest.BodyPublisher bodySourceFrom(Map cmdMap) { if (cmdMap.containsKey("body")) { String body = cmdMap.remove("body"); diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 42b5c62aa..3147e41cc 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -13,10 +13,9 @@ UTF-8 nosqlbench - 11 + - 4.8 1.2.0 1.14 1.20 @@ -325,7 +324,7 @@ org.antlr antlr4-runtime - ${antlr4.version} + 4.8 From 5c8c5d9c9c58cfe701236988708969b2c4d27194 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 14:19:07 -0600 Subject: [PATCH 059/164] promote rate to the preferred name for cyclerate --- .../java/io/nosqlbench/nb/api/config/SynonymsTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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 index d2d6db5d9..c3e922b0a 100644 --- 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 @@ -1,6 +1,5 @@ package io.nosqlbench.nb.api.config; -import io.nosqlbench.nb.api.config.Synonyms; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -13,10 +12,10 @@ public class SynonymsTest { 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 cyclerate"); + assertThat(result).isEqualTo("test workload ayamlfoo driver btype typea rate"); assertThat(sb.toString()).isEqualTo("replaced type with driver\n" + - "replaced targetrate with cyclerate\n" + - "replaced yaml with workload\n"); + "replaced targetrate with rate\n" + + "replaced yaml with workload\n"); } } From 1e409332a8e152b3dc039dccf17b8951cd1d3b99 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 14:19:12 -0600 Subject: [PATCH 060/164] set default hdr_digits to 3 to avoid memory hammer --- .../java/io/nosqlbench/engine/cli/NBCLIOptions.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) 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 c642f4cd2..64cae718b 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 @@ -4,10 +4,8 @@ import io.nosqlbench.engine.api.metrics.IndicatorMode; import io.nosqlbench.engine.api.util.Unit; import io.nosqlbench.engine.core.script.Scenario; import io.nosqlbench.nb.api.Environment; -import io.nosqlbench.nb.api.logging.NBLogLevel; import io.nosqlbench.nb.api.errors.BasicError; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; +import io.nosqlbench.nb.api.logging.NBLogLevel; import java.io.File; import java.io.IOException; @@ -136,7 +134,7 @@ public class NBCLIOptions { private final List wantsToIncludePaths = new ArrayList<>(); private Scenario.Engine engine = Scenario.Engine.Graalvm; private boolean graaljs_compat = false; - private int hdr_digits = 4; + private int hdr_digits = 3; private String docker_grafana_tag = "7.2.2"; private boolean showStackTraces = false; private boolean compileScript = false; @@ -146,8 +144,8 @@ public class NBCLIOptions { private String annotatorsConfig = ""; private String statedirs = NB_STATEDIR_PATHS; private Path statepath; - private List statePathAccesses = new ArrayList<>(); - private String hdrForChartFileName = DEFAULT_CHART_HDR_LOG_NAME; + private final List statePathAccesses = new ArrayList<>(); + private final String hdrForChartFileName = DEFAULT_CHART_HDR_LOG_NAME; public String getAnnotatorsConfig() { return annotatorsConfig; From 0af587d28cc4b7faccff650f94ae84e1bdfc7938 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 14:40:20 -0600 Subject: [PATCH 061/164] encapsulate update logic into token pool --- .../ratelimits/HybridRateLimiter.java | 21 ++++++------ .../activityapi/ratelimits/TokenFiller.java | 10 +++--- .../api/activityapi/ratelimits/TokenPool.java | 34 +++++++++++-------- .../activityapi/ratelimits/TokenPoolTest.java | 21 +++++++----- mvn-defaults/pom.xml | 2 +- 5 files changed, 48 insertions(+), 40 deletions(-) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java index b97cf281c..e9daf2f81 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java @@ -80,7 +80,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { private final static Logger logger = LogManager.getLogger(HybridRateLimiter.class); - private volatile TokenFiller filler; + //private volatile TokenFiller filler; private volatile long starttime; // rate controls @@ -150,8 +150,9 @@ public class HybridRateLimiter implements Startable, RateLimiter { } this.rateSpec = updatingRateSpec; - this.filler = (this.filler == null) ? new TokenFiller(rateSpec, activityDef) : filler.apply(rateSpec); - this.tokens = this.filler.getTokenPool(); + this.tokens = (this.tokens == null) ? new TokenPool(rateSpec, activityDef) : this.tokens.apply(rateSpec); +// this.filler = (this.filler == null) ? new TokenFiller(rateSpec, activityDef) : filler.apply(rateSpec); +// this.tokens = this.filler.getTokenPool(); if (this.state == State.Idle && updatingRateSpec.isAutoStart()) { this.start(); @@ -177,7 +178,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { case Idle: long nanos = getNanoClockTime(); this.starttime = nanos; - this.filler.start(); + this.tokens.start(); state = State.Started; break; } @@ -191,7 +192,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { case Started: long accumulatedWaitSinceLastStart = cumulativeWaitTimeNanos.get(); cumulativeWaitTimeNanos.set(0L); - return this.filler.restart() + accumulatedWaitSinceLastStart; + return this.tokens.restart() + accumulatedWaitSinceLastStart; default: return 0L; } @@ -215,14 +216,14 @@ public class HybridRateLimiter implements Startable, RateLimiter { @Override public String toString() { StringBuilder sb = new StringBuilder(HybridRateLimiter.class.getSimpleName()); - if (this.getRateSpec()!=null) { + if (this.getRateSpec() != null) { sb.append(" spec=").append(this.getRateSpec().toString()); } - if (this.state!=null) { + if (this.state != null) { sb.append(" state=").append(this.state); } - if (this.filler !=null) { - sb.append(" filler=").append(this.filler.toString()); + if (this.tokens != null) { + sb.append(" tokens=").append(this.tokens.toString()); } return sb.toString(); } @@ -245,7 +246,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { @Override public Long getValue() { - TokenPool pool = rl.filler.getTokenPool(); + TokenPool pool = rl.tokens; if (pool==null) { return 0L; } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java index 359996db3..9ca7570a5 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java @@ -48,18 +48,16 @@ public class TokenFiller implements Runnable { * in the JVM. * * @param rateSpec A {@link RateSpec} - * @param def An {@link ActivityDef} + * @param def An {@link ActivityDef} */ - public TokenFiller(RateSpec rateSpec, ActivityDef def) { + public TokenFiller(RateSpec rateSpec, TokenPool tokenPool, ActivityDef def) { this.rateSpec = rateSpec; - this.tokenPool= new TokenPool(rateSpec); - this.tokenPool.refill(rateSpec.getNanosPerOp()); + this.tokenPool = tokenPool; this.timer = ActivityMetrics.timer(def, "tokenfiller"); } public TokenFiller apply(RateSpec rateSpec) { this.rateSpec = rateSpec; - this.tokenPool.apply(rateSpec); return this; } @@ -99,6 +97,8 @@ public class TokenFiller implements Runnable { } public TokenFiller start() { + this.tokenPool.refill(rateSpec.getNanosPerOp()); + thread = new Thread(this); thread.setName(this.toString()); thread.setPriority(Thread.MAX_PRIORITY); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java index 1a37ab2ae..b76986e65 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java @@ -17,8 +17,9 @@ package io.nosqlbench.engine.api.activityapi.ratelimits; -import org.apache.logging.log4j.Logger; +import io.nosqlbench.engine.api.activityimpl.ActivityDef; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import static io.nosqlbench.engine.api.util.Colors.*; @@ -57,10 +58,12 @@ public class TokenPool { private volatile long waitingPool; private RateSpec rateSpec; private long nanosPerOp; -// private long debugTrigger=0L; + // private long debugTrigger=0L; // private long debugRate=1000000000; private long blocks = 0L; + private TokenFiller filler; + private final ActivityDef activityDef; /** * This constructor tries to pick reasonable defaults for the token pool for @@ -69,16 +72,11 @@ public class TokenPool { * * @param rateSpec a {@link RateSpec} */ - public TokenPool(RateSpec rateSpec) { + public TokenPool(RateSpec rateSpec, ActivityDef activityDef) { + this.activityDef = activityDef; apply(rateSpec); logger.debug("initialized token pool: " + this.toString() + " for rate:" + rateSpec.toString()); - } - - public TokenPool(long poolsize, double burstRatio) { - this.maxActivePool = poolsize; - this.burstRatio = burstRatio; - this.maxOverActivePool = (long) (maxActivePool * burstRatio); - this.burstPoolSize = maxOverActivePool - maxActivePool; +// filler.start(); } /** @@ -87,15 +85,17 @@ public class TokenPool { * * @param rateSpec The rate specifier. */ - public synchronized void apply(RateSpec rateSpec) { - this.rateSpec=rateSpec; + public synchronized TokenPool apply(RateSpec rateSpec) { + this.rateSpec = rateSpec; this.maxActivePool = Math.max((long) 1E6, (long) ((double) rateSpec.getNanosPerOp() * MIN_CONCURRENT_OPS)); this.maxOverActivePool = (long) (maxActivePool * rateSpec.getBurstRatio()); this.burstRatio = rateSpec.getBurstRatio(); this.burstPoolSize = maxOverActivePool - maxActivePool; this.nanosPerOp = rateSpec.getNanosPerOp(); + this.filler = (this.filler == null) ? new TokenFiller(rateSpec, this, activityDef) : filler.apply(rateSpec); notifyAll(); + return this; } @@ -243,10 +243,14 @@ public class TokenPool { } public synchronized long restart() { - long wait=activePool+waitingPool; - activePool=0L; - waitingPool=0L; + long wait = activePool + waitingPool; + activePool = 0L; + waitingPool = 0L; + filler.restart(); return wait; + } + public void start() { + filler.start(); } } diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java index 09def25dc..167347c00 100644 --- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java +++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java @@ -17,30 +17,33 @@ package io.nosqlbench.engine.api.activityapi.ratelimits; -import org.junit.Ignore; +import io.nosqlbench.engine.api.activityimpl.ActivityDef; +import io.nosqlbench.engine.api.activityimpl.ParameterMap; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class TokenPoolTest { + ActivityDef def = new ActivityDef(ParameterMap.parseOrException("alias=testing")); + @Test public void testBackfillFullRate() { - TokenPool p = new TokenPool(100, 1.1); - assertThat(p.refill(100L)).isEqualTo(100L); + TokenPool p = new TokenPool(new RateSpec(10000000, 1.1), def); + assertThat(p.refill(1000000L)).isEqualTo(1000000L); assertThat(p.getWaitPool()).isEqualTo(0L); - assertThat(p.refill(100L)).isEqualTo(200); + assertThat(p.refill(100L)).isEqualTo(1000100); assertThat(p.getWaitPool()).isEqualTo(90L); - assertThat(p.refill(10L)).isEqualTo(210L); - assertThat(p.getWaitPool()).isEqualTo(100L); + assertThat(p.refill(10L)).isEqualTo(1000110L); + assertThat(p.getWaitPool()).isEqualTo(99L); - assertThat(p.refill(10)).isEqualTo(220L); + assertThat(p.refill(10)).isEqualTo(1000120L); assertThat(p.takeUpTo(100)).isEqualTo(100L); } @Test public void testTakeRanges() { - TokenPool p = new TokenPool(100, 10); + TokenPool p = new TokenPool(new RateSpec(100, 10), def); p.refill(100); assertThat(p.takeUpTo(99)).isEqualTo(99L); assertThat(p.takeUpTo(10)).isEqualTo(1L); @@ -51,7 +54,7 @@ public class TokenPoolTest { public void testChangedParameters() { RateSpec s1 = new RateSpec(1000L, 1.10D); - TokenPool p = new TokenPool(s1); + TokenPool p = new TokenPool(s1, def); long r = p.refill(10000000); assertThat(r).isEqualTo(10000000L); assertThat(p.getWaitTime()).isEqualTo(10000000L); diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 3147e41cc..85c263709 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -37,7 +37,7 @@ 2.4.0-b180830.0438 2.29 2.27 - 9.4.25.v20191220 + 9.4.35.v20201120 1.22 2.9.9 5.3.2 From 106dc3bafcd5060d21f8ffc7f9d3a81ac10961fb Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 2 Dec 2020 15:39:42 -0600 Subject: [PATCH 062/164] encapsulate update logic into token pool --- .../ratelimits/HybridRateLimiter.java | 8 +- .../ratelimits/ThreadDrivenTokenPool.java | 269 ++++++++++++++++++ .../activityapi/ratelimits/TokenFiller.java | 6 +- .../api/activityapi/ratelimits/TokenPool.java | 255 +---------------- .../activityapi/ratelimits/TokenPoolTest.java | 6 +- 5 files changed, 292 insertions(+), 252 deletions(-) create mode 100644 engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/ThreadDrivenTokenPool.java diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java index e9daf2f81..dec645a92 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java @@ -21,8 +21,9 @@ import com.codahale.metrics.Gauge; import io.nosqlbench.engine.api.activityapi.core.Startable; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.metrics.ActivityMetrics; -import org.apache.logging.log4j.Logger; +import io.nosqlbench.nb.annotations.Service; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.concurrent.atomic.AtomicLong; @@ -76,6 +77,7 @@ import java.util.concurrent.atomic.AtomicLong; * overall workload is not saturating resources. *

*/ +@Service(value = RateLimiter.class, selector = "hybrid") public class HybridRateLimiter implements Startable, RateLimiter { private final static Logger logger = LogManager.getLogger(HybridRateLimiter.class); @@ -94,7 +96,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { private Gauge delayGauge; private Gauge avgRateGauge; private Gauge burstRateGauge; - private TokenPool tokens; + private ThreadDrivenTokenPool tokens; // diagnostics // TODO Doc rate limiter scenarios, including when you want to reset the waittime, and when you don't @@ -150,7 +152,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { } this.rateSpec = updatingRateSpec; - this.tokens = (this.tokens == null) ? new TokenPool(rateSpec, activityDef) : this.tokens.apply(rateSpec); + this.tokens = (this.tokens == null) ? new ThreadDrivenTokenPool(rateSpec, activityDef) : this.tokens.apply(rateSpec); // this.filler = (this.filler == null) ? new TokenFiller(rateSpec, activityDef) : filler.apply(rateSpec); // this.tokens = this.filler.getTokenPool(); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/ThreadDrivenTokenPool.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/ThreadDrivenTokenPool.java new file mode 100644 index 000000000..2605d1126 --- /dev/null +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/ThreadDrivenTokenPool.java @@ -0,0 +1,269 @@ +/* + * + * Copyright 2016 jshook + * 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.activityapi.ratelimits; + +import io.nosqlbench.engine.api.activityimpl.ActivityDef; +import io.nosqlbench.nb.annotations.Service; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import static io.nosqlbench.engine.api.util.Colors.*; + +/** + *

Synopsis

+ * + * This TokenPool represents a finite quantity which can be + * replenished with regular refills. Extra tokens that do not fit + * within the active token pool are saved in a waiting token pool and + * used to backfill when allowed according to the backfill rate. + * + * A detailed explanation for how this works will be included + * at @link "http://docs.nosqlbench.io/" under dev notes. + * + *

This is the basis for the token-based rate limiters in + * NB. This mechanism is easily adaptable to bursting + * capability as well as a degree of stricter timing at speed. + * Various methods for doing this in a lock free way were + * investigated, but the intrinsic locks provided by synchronized + * method won out for now. This may be revisited when EB is + * retrofitted for J11. + *

+ */ +@Service(value = TokenPool.class, selector = "threaded") +public class ThreadDrivenTokenPool implements TokenPool { + + private final static Logger logger = LogManager.getLogger(ThreadDrivenTokenPool.class); + + public static final double MIN_CONCURRENT_OPS = 2; + + private long maxActivePool; + private long burstPoolSize; + private long maxOverActivePool; + private double burstRatio; + // TODO Consider removing volatile after investigating + private volatile long activePool; + private volatile long waitingPool; + private RateSpec rateSpec; + private long nanosPerOp; + // private long debugTrigger=0L; +// private long debugRate=1000000000; + private long blocks = 0L; + + private TokenFiller filler; + private final ActivityDef activityDef; + + /** + * This constructor tries to pick reasonable defaults for the token pool for + * a given rate spec. The active pool must be large enough to contain one + * op worth of time, and the burst ratio + * + * @param rateSpec a {@link RateSpec} + */ + public ThreadDrivenTokenPool(RateSpec rateSpec, ActivityDef activityDef) { + this.activityDef = activityDef; + apply(rateSpec); + logger.debug("initialized token pool: " + this.toString() + " for rate:" + rateSpec.toString()); +// filler.start(); + } + + /** + * Change the settings of this token pool, and wake any blocked callers + * just in case it allows them to proceed. + * + * @param rateSpec The rate specifier. + */ + @Override + public synchronized TokenPool apply(RateSpec rateSpec) { + this.rateSpec = rateSpec; + this.maxActivePool = Math.max((long) 1E6, (long) ((double) rateSpec.getNanosPerOp() * MIN_CONCURRENT_OPS)); + this.maxOverActivePool = (long) (maxActivePool * rateSpec.getBurstRatio()); + this.burstRatio = rateSpec.getBurstRatio(); + + this.burstPoolSize = maxOverActivePool - maxActivePool; + this.nanosPerOp = rateSpec.getNanosPerOp(); + this.filler = (this.filler == null) ? new TokenFiller(rateSpec, this, activityDef) : filler.apply(rateSpec); + notifyAll(); + return this; + } + + + @Override + public double getBurstRatio() { + return burstRatio; + } + + /** + * Take tokens up to amt tokens form the pool and report + * the amount of token removed. + * + * @param amt tokens requested + * @return actual number of tokens removed, greater to or equal to zero + */ + @Override + public synchronized long takeUpTo(long amt) { + long take = Math.min(amt, activePool); + activePool -= take; + return take; + } + + /** + * wait for the given number of tokens to be available, and then remove + * them from the pool. + * + * @return the total number of tokens untaken, including wait tokens + */ + @Override + public synchronized long blockAndTake() { + while (activePool < nanosPerOp) { + blocks++; + //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset); + try { + wait(maxActivePool / 1000000, (int) maxActivePool % 1000000); + } catch (InterruptedException ignored) { + } catch (Exception e) { + throw new RuntimeException(e); + } + //System.out.println("waited for " + amt + "/" + activePool + " tokens"); + } + //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset); + + activePool -= nanosPerOp; + return waitingPool + activePool; + } + + @Override + public synchronized long blockAndTake(long tokens) { + while (activePool < tokens) { + //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset); + try { + wait(maxActivePool / 1000000, (int) maxActivePool % 1000000); + } catch (InterruptedException ignored) { + } catch (Exception e) { + throw new RuntimeException(e); + } + //System.out.println("waited for " + amt + "/" + activePool + " tokens"); + } + //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset); + + activePool -= tokens; + return waitingPool + activePool; + } + + @Override + public long getWaitTime() { + return activePool + waitingPool; + } + + @Override + public long getWaitPool() { + return waitingPool; + } + + @Override + public long getActivePool() { + return activePool; + } + + /** + * Add the given number of new tokens to the pool, forcing any amount + * that would spill over the current pool size into the wait token pool, but + * moving up to the configured burst tokens back from the wait token pool + * otherwise. + * + * The amount of backfilling that occurs is controlled by the backfill ratio, + * based on the number of tokens submitted. This causes normalizes the + * backfilling rate to the fill rate, so that it is not sensitive to refill + * scheduling. + * + * @param newTokens The number of new tokens to add to the token pools + * @return the total number of tokens in all pools + */ + public synchronized long refill(long newTokens) { + boolean debugthis = false; +// long debugAt = System.nanoTime(); +// if (debugAt>debugTrigger+debugRate) { +// debugTrigger=debugAt; +// debugthis=true; +// } + + long needed = Math.max(maxActivePool - activePool, 0L); + long allocatedToActivePool = Math.min(newTokens, needed); + activePool += allocatedToActivePool; + + + // overflow logic + long allocatedToOverflowPool = newTokens - allocatedToActivePool; + waitingPool += allocatedToOverflowPool; + + // backfill logic + double refillFactor = Math.min((double) newTokens / maxActivePool, 1.0D); + long burstFillAllowed = (long) (refillFactor * burstPoolSize); + + burstFillAllowed = Math.min(maxOverActivePool - activePool, burstFillAllowed); + long burstFill = Math.min(burstFillAllowed, waitingPool); + + waitingPool -= burstFill; + activePool += burstFill; + + if (debugthis) { + System.out.print(this); + System.out.print(ANSI_BrightBlue + " adding=" + allocatedToActivePool); + if (allocatedToOverflowPool > 0) { + System.out.print(ANSI_Red + " OVERFLOW:" + allocatedToOverflowPool + ANSI_Reset); + } + if (burstFill > 0) { + System.out.print(ANSI_BrightGreen + " BACKFILL:" + burstFill + ANSI_Reset); + } + System.out.println(); + } + //System.out.println(this); + notifyAll(); + + return activePool + waitingPool; + } + + @Override + public String toString() { + return "Tokens: active=" + activePool + "/" + maxActivePool + + String.format( + " (%3.1f%%)A (%3.1f%%)B ", + (((double) activePool / (double) maxActivePool) * 100.0), + (((double) activePool / (double) maxOverActivePool) * 100.0)) + " waiting=" + waitingPool + + " blocks=" + blocks + + " rateSpec:" + ((rateSpec != null) ? rateSpec.toString() : "NULL"); + } + + @Override + public RateSpec getRateSpec() { + return rateSpec; + } + + @Override + public synchronized long restart() { + long wait = activePool + waitingPool; + activePool = 0L; + waitingPool = 0L; + filler.restart(); + return wait; + } + + @Override + public void start() { + filler.start(); + } +} diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java index 9ca7570a5..695da698b 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java @@ -35,7 +35,7 @@ public class TokenFiller implements Runnable { // (false); private final long interval = (long) 1E6; - private final TokenPool tokenPool; + private final ThreadDrivenTokenPool tokenPool; private volatile boolean running = true; private RateSpec rateSpec; private Thread thread; @@ -43,14 +43,14 @@ public class TokenFiller implements Runnable { private final Timer timer; /** - * A token filler adds tokens to a {@link TokenPool} at some rate. + * A token filler adds tokens to a {@link ThreadDrivenTokenPool} at some rate. * By default, this rate is at least every millisecond +- scheduling jitter * in the JVM. * * @param rateSpec A {@link RateSpec} * @param def An {@link ActivityDef} */ - public TokenFiller(RateSpec rateSpec, TokenPool tokenPool, ActivityDef def) { + public TokenFiller(RateSpec rateSpec, ThreadDrivenTokenPool tokenPool, ActivityDef def) { this.rateSpec = rateSpec; this.tokenPool = tokenPool; this.timer = ActivityMetrics.timer(def, "tokenfiller"); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java index b76986e65..a2f02ac5d 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java @@ -1,256 +1,25 @@ -/* - * - * Copyright 2016 jshook - * 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.activityapi.ratelimits; -import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +public interface TokenPool { + TokenPool apply(RateSpec rateSpec); -import static io.nosqlbench.engine.api.util.Colors.*; + double getBurstRatio(); -/** - *

Synopsis

- * - * This TokenPool represents a finite quantity which can be - * replenished with regular refills. Extra tokens that do not fit - * within the active token pool are saved in a waiting token pool and - * used to backfill when allowed according to the backfill rate. - * - * A detailed explanation for how this works will be included - * at @link "http://docs.nosqlbench.io/" under dev notes. - * - *

This is the basis for the token-based rate limiters in - * NB. This mechanism is easily adaptable to bursting - * capability as well as a degree of stricter timing at speed. - * Various methods for doing this in a lock free way were - * investigated, but the intrinsic locks provided by synchronized - * method won out for now. This may be revisited when EB is - * retrofitted for J11. - *

- */ -public class TokenPool { + long takeUpTo(long amt); - private final static Logger logger = LogManager.getLogger(TokenPool.class); + long blockAndTake(); - public static final double MIN_CONCURRENT_OPS = 2; + long blockAndTake(long tokens); - private long maxActivePool; - private long burstPoolSize; - private long maxOverActivePool; - private double burstRatio; - // TODO Consider removing volatile after investigating - private volatile long activePool; - private volatile long waitingPool; - private RateSpec rateSpec; - private long nanosPerOp; - // private long debugTrigger=0L; -// private long debugRate=1000000000; - private long blocks = 0L; + long getWaitTime(); - private TokenFiller filler; - private final ActivityDef activityDef; + long getWaitPool(); - /** - * This constructor tries to pick reasonable defaults for the token pool for - * a given rate spec. The active pool must be large enough to contain one - * op worth of time, and the burst ratio - * - * @param rateSpec a {@link RateSpec} - */ - public TokenPool(RateSpec rateSpec, ActivityDef activityDef) { - this.activityDef = activityDef; - apply(rateSpec); - logger.debug("initialized token pool: " + this.toString() + " for rate:" + rateSpec.toString()); -// filler.start(); - } + long getActivePool(); - /** - * Change the settings of this token pool, and wake any blocked callers - * just in case it allows them to proceed. - * - * @param rateSpec The rate specifier. - */ - public synchronized TokenPool apply(RateSpec rateSpec) { - this.rateSpec = rateSpec; - this.maxActivePool = Math.max((long) 1E6, (long) ((double) rateSpec.getNanosPerOp() * MIN_CONCURRENT_OPS)); - this.maxOverActivePool = (long) (maxActivePool * rateSpec.getBurstRatio()); - this.burstRatio = rateSpec.getBurstRatio(); + RateSpec getRateSpec(); - this.burstPoolSize = maxOverActivePool - maxActivePool; - this.nanosPerOp = rateSpec.getNanosPerOp(); - this.filler = (this.filler == null) ? new TokenFiller(rateSpec, this, activityDef) : filler.apply(rateSpec); - notifyAll(); - return this; - } + long restart(); - - public double getBurstRatio() { - return burstRatio; - } - - /** - * Take tokens up to amt tokens form the pool and report - * the amount of token removed. - * - * @param amt tokens requested - * @return actual number of tokens removed, greater to or equal to zero - */ - public synchronized long takeUpTo(long amt) { - long take = Math.min(amt, activePool); - activePool -= take; - return take; - } - - /** - * wait for the given number of tokens to be available, and then remove - * them from the pool. - * - * @return the total number of tokens untaken, including wait tokens - */ - public synchronized long blockAndTake() { - while (activePool < nanosPerOp) { - blocks++; - //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset); - try { - wait(maxActivePool / 1000000, (int) maxActivePool % 1000000); - } catch (InterruptedException ignored) { - } catch (Exception e) { - throw new RuntimeException(e); - } - //System.out.println("waited for " + amt + "/" + activePool + " tokens"); - } - //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset); - - activePool -= nanosPerOp; - return waitingPool + activePool; - } - - public synchronized long blockAndTake(long tokens) { - while (activePool < tokens) { - //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset); - try { - wait(maxActivePool / 1000000, (int) maxActivePool % 1000000); - } catch (InterruptedException ignored) { - } catch (Exception e) { - throw new RuntimeException(e); - } - //System.out.println("waited for " + amt + "/" + activePool + " tokens"); - } - //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset); - - activePool -= tokens; - return waitingPool + activePool; - } - - public long getWaitTime() { - return activePool + waitingPool; - } - - public long getWaitPool() { - return waitingPool; - } - - public long getActivePool() { - return activePool; - } - - /** - * Add the given number of new tokens to the pool, forcing any amount - * that would spill over the current pool size into the wait token pool, but - * moving up to the configured burst tokens back from the wait token pool - * otherwise. - * - * The amount of backfilling that occurs is controlled by the backfill ratio, - * based on the number of tokens submitted. This causes normalizes the - * backfilling rate to the fill rate, so that it is not sensitive to refill - * scheduling. - * - * @param newTokens The number of new tokens to add to the token pools - * @return the total number of tokens in all pools - */ - public synchronized long refill(long newTokens) { - boolean debugthis=false; -// long debugAt = System.nanoTime(); -// if (debugAt>debugTrigger+debugRate) { -// debugTrigger=debugAt; -// debugthis=true; -// } - - long needed = Math.max(maxActivePool - activePool, 0L); - long allocatedToActivePool = Math.min(newTokens, needed); - activePool += allocatedToActivePool; - - - // overflow logic - long allocatedToOverflowPool = newTokens - allocatedToActivePool; - waitingPool += allocatedToOverflowPool; - - // backfill logic - double refillFactor = Math.min((double) newTokens / maxActivePool, 1.0D); - long burstFillAllowed =(long) (refillFactor* burstPoolSize); - - burstFillAllowed = Math.min(maxOverActivePool - activePool, burstFillAllowed); - long burstFill = Math.min(burstFillAllowed, waitingPool); - - waitingPool -= burstFill; - activePool += burstFill; - - if (debugthis) { - System.out.print(this); - System.out.print(ANSI_BrightBlue + " adding=" + allocatedToActivePool); - if (allocatedToOverflowPool>0) { - System.out.print(ANSI_Red + " OVERFLOW:" + allocatedToOverflowPool + ANSI_Reset); - } - if (burstFill>0) { - System.out.print(ANSI_BrightGreen + " BACKFILL:" + burstFill + ANSI_Reset); - } - System.out.println(); - } - //System.out.println(this); - notifyAll(); - - return activePool+waitingPool; - } - - @Override - public String toString() { - return "Tokens: active=" + activePool +"/" + maxActivePool - + String.format( - " (%3.1f%%)A (%3.1f%%)B ", - (((double)activePool/(double)maxActivePool)*100.0), - (((double)activePool/(double)maxOverActivePool)*100.0)) + " waiting=" + waitingPool + - " blocks=" + blocks + - " rateSpec:"+ ((rateSpec!=null) ? rateSpec.toString() : "NULL"); - } - - public RateSpec getRateSpec() { - return rateSpec; - } - - public synchronized long restart() { - long wait = activePool + waitingPool; - activePool = 0L; - waitingPool = 0L; - filler.restart(); - return wait; - } - - public void start() { - filler.start(); - } + void start(); } diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java index 167347c00..86dc50afc 100644 --- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java +++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java @@ -29,7 +29,7 @@ public class TokenPoolTest { @Test public void testBackfillFullRate() { - TokenPool p = new TokenPool(new RateSpec(10000000, 1.1), def); + ThreadDrivenTokenPool p = new ThreadDrivenTokenPool(new RateSpec(10000000, 1.1), def); assertThat(p.refill(1000000L)).isEqualTo(1000000L); assertThat(p.getWaitPool()).isEqualTo(0L); assertThat(p.refill(100L)).isEqualTo(1000100); @@ -43,7 +43,7 @@ public class TokenPoolTest { } @Test public void testTakeRanges() { - TokenPool p = new TokenPool(new RateSpec(100, 10), def); + ThreadDrivenTokenPool p = new ThreadDrivenTokenPool(new RateSpec(100, 10), def); p.refill(100); assertThat(p.takeUpTo(99)).isEqualTo(99L); assertThat(p.takeUpTo(10)).isEqualTo(1L); @@ -54,7 +54,7 @@ public class TokenPoolTest { public void testChangedParameters() { RateSpec s1 = new RateSpec(1000L, 1.10D); - TokenPool p = new TokenPool(s1, def); + ThreadDrivenTokenPool p = new ThreadDrivenTokenPool(s1, def); long r = p.refill(10000000); assertThat(r).isEqualTo(10000000L); assertThat(p.getWaitTime()).isEqualTo(10000000L); From 06a092a2570266ad571ad9a7f675a8b54b837689 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 10:21:39 -0600 Subject: [PATCH 063/164] update actions for release, since github made a breaking change --- .github/workflows/release.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8757d8361..5a665b13e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,8 +27,10 @@ jobs: - name: capture tty for gpg run: | - echo "::set-env name=TTY::"$(tty) - echo "::set-env name=GPG_TTY::"$(tty) + echo "TTY="$(tty) >> $GITHUB_ENV + echo "GPG_TTY="$(tty) >> $GITHUB_ENV + # echo "::set-env name=TTY::"$(tty) + # echo "::set-env name=GPG_TTY::"$(tty) - name: initialize gpg run: | @@ -70,9 +72,12 @@ jobs: NEXT_MINOR_VERSION=$(( MINOR_VERSION+1)) NEXT_SNAPSHOT="${BASE_VERSION}.${NEXT_MINOR_VERSION}-SNAPSHOT" RELEASE_TAGNAME="nosqlbench-${RELEASE_VERSION}" - echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" - echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" - echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" + echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT} >> $GITHUB_ENV + echo "RELEASE_VERSION=${RELEASE_VERSION} >> $GITHUB_ENV + echo "RELEASE_TAGNAME=${RELEASE_TAGNAME} >> $GITHUB_ENV + # echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" + # echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" + # echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" - name: prepare release summary id: prepare_summary From b6493d0bdb1a78a71bfb343295cd63cc48792b61 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 10:24:37 -0600 Subject: [PATCH 064/164] update docs for hybrid ratelimiter --- devdocs/devguide/hybrid_ratelimiter.png | Bin 0 -> 70586 bytes devdocs/devguide/hybrid_ratelimiter.svg | 2186 +++++++++++++++++++++++ 2 files changed, 2186 insertions(+) create mode 100644 devdocs/devguide/hybrid_ratelimiter.png create mode 100644 devdocs/devguide/hybrid_ratelimiter.svg diff --git a/devdocs/devguide/hybrid_ratelimiter.png b/devdocs/devguide/hybrid_ratelimiter.png new file mode 100644 index 0000000000000000000000000000000000000000..68107623c56eacd22a22156d1718796241823485 GIT binary patch literal 70586 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + active pool + + waiting + pool + + burst + pool + + overflow + + refill + + consume + + + backfill + 1 + 2 + 3 + 4 + + + + + + + microbatch + + + + + + + + iteration + + + + + + + + + + microbatch + + + + + + + + iteration + + + + + + + + + + + microbatch + + + + + + + + iteration + + + + + + + individual consumers (threads) + + + + + + + + iteration + /time + + + + + + + + + + + burst pool is sized according to burst rate + + + + + + + + + + + token filler thread + + + + + + + + + + token pool + + From 4e33f5fb3e3c961a19f50e1eeebfd9ce5e781cf3 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 10:25:26 -0600 Subject: [PATCH 065/164] release notes --- RELEASENOTES.md | 71 +++++++++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index ba35d0396..05a0589db 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,29 +1,42 @@ -- 1e958a7e (HEAD -> main) simplify logger naming for core systems -- 1382d33d argsfiles and statedirs -- b5901679 environment and sys prop support -- fd74ccba move common topics to resources base -- 6a8dfef1 qualify grafana docker with tag -- 2830d070 simple workload improvements -- b9607d07 make argsfiles use double dash -- a9b0dc9d argsfile support -- f702736f (HEAD -> main) flatten maps in OpTemplates to allow map consumers -- 4a9fa81b pull Named service up -- 574a89e7 pull ConfigAware api up -- 71195d0a http release fixes -- 3fa89ebc partial work for --args -- 262df571 improved error messages -- 453b1b2c extract ratio from optemplate before construction -- dcf458c4 annotation progress -- 7017b6cd add SplitLongs function -- 0758670f add nb clients module -- 1dbf36c4 add grafana annotation client -- 120d9761 remove warning for speculative defaults -- c78f1e92 typos and minor fixes -- f3f1b8f4 add annotations design sketch -- 394580d6 more idea sketches -- 9e5972f5 comment cleanup -- 06edfcc9 fix NPE when binding has undefined value -- 510746b7 improve mismatched scenario name feedback -- 735b32e1 add illustrative test for EpochMillisToJavaLocalDate -- 2390f253 Initial Migration of DSE Graph -- 2275573c Update Readme +- 3d2ff55f (origin/nb4-rc1, main) auto create apikey +- cfa92eab package organization +- 2ab118f4 package organization +- a23808b3 update appimage build script for j15 +- 7b0e37ab add metrics manifest to polyglot +- 7e6aa1a2 bump source and target to Java 15 +- 2752fa50 bump major version to 4.0.0-SNAPSHOT +- 7e880b91 experimental grammar +- 3f65a054 console friendly metrics summary +- 146686e0 simplify custom logging configuration +- d0592454 typos, alignment, cruft +- 45307081 backfill missing default +- b7c24642 centralize log4j2 and slf4j stub config +- 2215fc94 typos, alignment, cruft +- 0ef26c82 update logger deps for dsegraph +- 975ea40d merge fixups +- ae419a26 logging annotator module +- 6c0632fb grafana annotator module +- 317ffab4 api for annotations +- c2cec235 allow configurable delimiter in params parser +- a09efbe9 consolidate to log4j2 +- 6a523dc4 remove slf4j +- 67eefbbe fix activity run state bug +- a88d0376 docker-metrics improvements +- 667fbdba add log4j2 programmatic configuration +- 60fa0529 add default log4j configs +- a3e0739a add FixedValues for double +- fa85704b add SPI impl selector field 'selector' +- 4996d206 config API improvements +- e0498ff2 docs updates +- e9d2b489 environment API improvements +- 897a8389 generalize log level to NB +- a97db87f include JSON support in project API +- 2c09b8ae typos, culling, and alignment +- a3a51381 update inactive coords +- 83136139 generalize op source +- 089a29d8 grafana api tokens +- e6e70f71 support DoubleToIntFunction in function matrix +- 52b029f8 typos, culling, and alignment +- 4d65dc62 update inactive coords +- 55edec53 add ToByteBuffer binding function +- 93e10e6a config model improvements From 33cac5cf902433637b09373d0ace0c943861d7ff Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 10:30:42 -0600 Subject: [PATCH 066/164] fix release workflow --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5a665b13e..4e14a60fb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,9 +72,9 @@ jobs: NEXT_MINOR_VERSION=$(( MINOR_VERSION+1)) NEXT_SNAPSHOT="${BASE_VERSION}.${NEXT_MINOR_VERSION}-SNAPSHOT" RELEASE_TAGNAME="nosqlbench-${RELEASE_VERSION}" - echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT} >> $GITHUB_ENV - echo "RELEASE_VERSION=${RELEASE_VERSION} >> $GITHUB_ENV - echo "RELEASE_TAGNAME=${RELEASE_TAGNAME} >> $GITHUB_ENV + echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT}" >> $GITHUB_ENV + echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV + echo "RELEASE_TAGNAME=${RELEASE_TAGNAME}" >> $GITHUB_ENV # echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" # echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" # echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" From 159ff1f59e0a0cd1381763446c260d457cc5f97e Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 10:31:55 -0600 Subject: [PATCH 067/164] release notes --- RELEASENOTES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 05a0589db..7d95cb174 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,4 @@ -- 3d2ff55f (origin/nb4-rc1, main) auto create apikey +- 3d2ff55f (main) auto create apikey - cfa92eab package organization - 2ab118f4 package organization - a23808b3 update appimage build script for j15 From 480ca626d7e5ee83bc04cf8defd07dfcbbc8c6b7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 10:50:12 -0600 Subject: [PATCH 068/164] actions debugging --- .github/workflows/release.yml | 1 + .../engine/api/activityapi/ratelimits/HybridRateLimiter.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4e14a60fb..7db3a4543 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -110,6 +110,7 @@ jobs: pwd ls -l mkdir -p itlogs/nb + ls -l nb cp -R nb/logs itlogs/nb - name: upload integration test logs diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java index dec645a92..e72b533e3 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java @@ -96,7 +96,7 @@ public class HybridRateLimiter implements Startable, RateLimiter { private Gauge delayGauge; private Gauge avgRateGauge; private Gauge burstRateGauge; - private ThreadDrivenTokenPool tokens; + private TokenPool tokens; // diagnostics // TODO Doc rate limiter scenarios, including when you want to reset the waittime, and when you don't From 87826dd072657865d858b994384f8e2e6913da88 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 10:56:54 -0600 Subject: [PATCH 069/164] release debugging --- .github/workflows/release.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7db3a4543..2fd623d33 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -108,9 +108,8 @@ jobs: - name: bundle integration test logs run: | pwd - ls -l + find nb mkdir -p itlogs/nb - ls -l nb cp -R nb/logs itlogs/nb - name: upload integration test logs From 53090a8c764c075059f933aee31a5a5fea4a09cc Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 13:06:05 -0600 Subject: [PATCH 070/164] release debugging --- RELEASENOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7d95cb174..0ebb717d5 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,3 +1,4 @@ + - 3d2ff55f (main) auto create apikey - cfa92eab package organization - 2ab118f4 package organization From 1e457e3eb56c6b4d3d7b0b580cc92b169640ce51 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 13:31:26 -0600 Subject: [PATCH 071/164] prerelease support --- .github/workflows/release.yml | 11 ++++++++++- scripts/release-perform.sh | 7 ++++++- scripts/release-prepare.sh | 8 +++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2fd623d33..5e51ee217 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -93,6 +93,7 @@ jobs: run: scripts/release-prepare.sh env: RELEASE_BRANCH_NAME: "main" + PRERELEASE_BRANCH_PATTERN: "-rc" GIT_RELEASE_BOT_NAME: "nb-droid" GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} @@ -167,6 +168,14 @@ jobs: name: guidebook path: guidebook + - name: select release type from branch name + run: | + current_branch=$(git rev-parse --abbrev-ref HEAD) + if [[ ${current_branch} == *"-rc"* ]] + then echo "PRERELEASE=true" >> $GITHUB_ENV + else echo "PRERELEASE=false" >> $GITHUB_ENV + fi + - name: create release id: create_release uses: actions/create-release@v1 @@ -176,7 +185,7 @@ jobs: tag_name: ${{ env.RELEASE_TAGNAME }} release_name: Release ${{ env.RELEASE_TAGNAME }} draft: false - prerelease: false + prerelease: ${{ env.PRERELEASE }} body: ${{ steps.prepare_summary.outputs.release_summary }} - name: upload nb.jar diff --git a/scripts/release-perform.sh b/scripts/release-perform.sh index 131d8e446..2ae4aae49 100755 --- a/scripts/release-perform.sh +++ b/scripts/release-perform.sh @@ -19,10 +19,15 @@ if [[ "${last_release_commit_hash}" = "${GITHUB_SHA}" ]]; then exit 0 fi +PRERELEASE_BRANCH_PATTERN=${PRERELEASE_BRANCH_PATTERN:?PRERELEASE_BRANCH_PATTERN must be provided} # Filter the branch to execute the release on readonly local current_branch=$(git rev-parse --abbrev-ref HEAD) echo "Current branch: ${branch}" -if [[ -n "$RELEASE_BRANCH_NAME" && ! "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then +if [[ -n "$RELEASE_BRANCH_NAME" && "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then + echo "Building for release branch $RELEASE_BRANCH_NAME" +elif [[ -n "${current_branch}" && "${current_branch}" == *"${PRERELEASE_BRANCH_PATTERN}"* ]]; then + echo "Building prerelease for branch $RELEASE_BRANCH_NAME" +else echo "Skipping for ${current_branch} branch" exit 0 fi diff --git a/scripts/release-prepare.sh b/scripts/release-prepare.sh index 033b461a1..ea84d7ea8 100755 --- a/scripts/release-prepare.sh +++ b/scripts/release-prepare.sh @@ -6,12 +6,18 @@ GIT_RELEASE_BOT_NAME=${GIT_RELEASE_BOT_NAME:?GIT_RELEASE_BOT_NAME must be provid GITHUB_SHA=${GITHUB_SHA:?GITHUB_SHA must be provided} GITHUB_REF=${GITHUB_REF:?GITHUB_REF must be provided} RELEASE_BRANCH_NAME=${RELEASE_BRANCH_NAME:?RELEASE_BRANCH_NAME 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 "$RELEASE_BRANCH_NAME" && ! "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then +if [[ -n "$RELEASE_BRANCH_NAME" && "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then + echo "Building for release branch $RELEASE_BRANCH_NAME" +elif [[ -n "${current_branch}" && "${current_branch}" == *"${PRERELEASE_BRANCH_PATTERN}"* ]]; then + echo "Building prerelease for branch $RELEASE_BRANCH_NAME" +else echo "Skipping for ${current_branch} branch" exit 0 fi From a9fd4556adc1591de0ab268355deace19ae8ad44 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 13:31:50 -0600 Subject: [PATCH 072/164] release notes --- RELEASENOTES.md | 1 - 1 file changed, 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0ebb717d5..7d95cb174 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,3 @@ - - 3d2ff55f (main) auto create apikey - cfa92eab package organization - 2ab118f4 package organization From 31ebdb0d926932024222a63381be41b2ed79eb6f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 14:19:05 -0600 Subject: [PATCH 073/164] test fixes for annotation builder --- .../nb/api/annotations/AnnotationBuilder.java | 6 ++++- .../nb/api/annotations/MutableAnnotation.java | 26 ++++++++++++++----- .../annotations/AnnotationBuilderTest.java | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java index 4bc83d516..90c43b068 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java @@ -2,7 +2,9 @@ package io.nosqlbench.nb.api.annotations; import io.nosqlbench.nb.api.Layer; +import java.time.ZoneId; import java.util.LinkedHashMap; +import java.util.TimeZone; public class AnnotationBuilder implements BuilderFacets.All { private String session; @@ -11,6 +13,7 @@ public class AnnotationBuilder implements BuilderFacets.All { private final LinkedHashMap labels = new LinkedHashMap<>(); private final LinkedHashMap details = new LinkedHashMap<>(); private Layer layer; + private TimeZone timezone = TimeZone.getTimeZone(ZoneId.of("GMT")); @Override public AnnotationBuilder layer(Layer layer) { @@ -50,6 +53,7 @@ public class AnnotationBuilder implements BuilderFacets.All { return this; } + @Override public AnnotationBuilder label(String name, String value) { this.labels.put(name, value); @@ -64,7 +68,7 @@ public class AnnotationBuilder implements BuilderFacets.All { @Override public Annotation build() { - return new MutableAnnotation(session, layer, start, end, labels, details).asReadOnly(); + return new MutableAnnotation(timezone, session, layer, start, end, labels, details).asReadOnly(); } diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java index eea57e7f9..8bcefc917 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java @@ -2,9 +2,10 @@ package io.nosqlbench.nb.api.annotations; import io.nosqlbench.nb.api.Layer; -import java.util.Date; -import java.util.LinkedHashMap; -import java.util.Map; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.*; public class MutableAnnotation implements Annotation { @@ -14,9 +15,16 @@ public class MutableAnnotation implements Annotation { private long end = 0L; private Map labels = new LinkedHashMap<>(); private Map details = new LinkedHashMap<>(); + private ZoneId zoneid = ZoneId.of("GMT"); - public MutableAnnotation(String session, Layer layer, long start, long end, LinkedHashMap labels, - LinkedHashMap details) { + public MutableAnnotation( + TimeZone timezone, + String session, + Layer layer, + long start, + long end, + LinkedHashMap labels, + LinkedHashMap details) { this.session = session; this.layer = layer; this.start = start; @@ -85,9 +93,13 @@ public class MutableAnnotation implements Annotation { StringBuilder sb = new StringBuilder(); sb.append("session: ").append(getSession()).append("\n"); - sb.append("[").append(new Date(getStart())); + ZonedDateTime startTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(getStart()), zoneid); + ZonedDateTime endTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(getStart()), zoneid); + + + sb.append("[").append(startTime); if (getStart() != getEnd()) { - sb.append(" - ").append(new Date(getEnd())); + sb.append(" - ").append(endTime); } sb.append("]\n"); sb.append("details:\n"); diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java index adfa377ef..fd4dc8549 100644 --- a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java @@ -25,7 +25,7 @@ public class AnnotationBuilderTest { String represented = an1.toString(); assertThat(represented).isEqualTo("session: test-session\n" + - "[Sun Sep 13 07:26:40 CDT 2020]\n" + + "[2020-09-13T12:26:40Z[GMT]]\n" + "details:\n" + " detailk1: detailv1\n" + " detailk2: \n" + From cdaaaa03f655a32fa4341205747594285b5da8e3 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 4 Dec 2020 14:19:53 -0600 Subject: [PATCH 074/164] release debugging --- RELEASENOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7d95cb174..dc5b172e3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,3 +1,4 @@ + - 3d2ff55f (main) auto create apikey - cfa92eab package organization - 2ab118f4 package organization From 6a097552610905c65a700a5a47a05502f4dc31ca Mon Sep 17 00:00:00 2001 From: nb-droid Date: Sat, 5 Dec 2020 07:38:20 +0000 Subject: [PATCH 075/164] [maven-release-plugin] prepare release nosqlbench-4.0.0 --- docsys/pom.xml | 6 ++--- driver-cql-shaded/pom.xml | 6 ++--- driver-cqlverify/pom.xml | 6 ++--- driver-diag/pom.xml | 6 ++--- driver-dsegraph-shaded/pom.xml | 13 ++++------- driver-http/pom.xml | 6 ++--- driver-jmx/pom.xml | 6 ++--- driver-kafka/pom.xml | 6 ++--- driver-mongodb/pom.xml | 6 ++--- driver-stdout/pom.xml | 6 ++--- driver-tcp/pom.xml | 8 +++---- driver-web/pom.xml | 6 ++--- drivers-api/pom.xml | 6 ++--- engine-api/pom.xml | 10 ++++---- engine-cli/pom.xml | 6 ++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 +++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 8 +++---- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 8 +++---- nb/pom.xml | 42 ++++++++++++++++------------------ pom.xml | 4 ++-- 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 ++++++------- 34 files changed, 117 insertions(+), 126 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 7eebb773c..7e5dc9d44 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 4.0.0 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 7db495c03..38df9e73d 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index fa0ca8512..fa57e1002 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 806dbf7b5..031bdae02 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index fdf041a23..b0db08b39 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -1,12 +1,10 @@ - + 4.0.0 io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -25,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 @@ -237,8 +235,7 @@ - + io.nosqlbench.engine.cli.NBCLI diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 9664f160d..1ea3ab509 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 54280f347..6dfb9b86e 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index d30e3b1f3..84fbd6592 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 0957359b1..2599ce8e5 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 7ef528d72..d72700f7a 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index cd329ff8d..df32a3d6d 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 5a20d1e09..07ee184ee 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index e82e035bc..ab177f941 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-userlibs - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index cf11ea2f7..1e719e348 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench nb-annotations - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-userlibs - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 451f496da..04a00cfb7 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-docker - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 390edc0aa..c46f59d84 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 59d3a5640..20f31ccef 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.0.0-SNAPSHOT + 4.0.0 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 97db59a7d..fad6e5465 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 9d15529d8..31279c6da 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 3e628ac58..07ddf66d3 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index e96b5a2cd..9e392b334 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 85c263709..9c60a3987 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -1,11 +1,9 @@ - + 4.0.0 io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 pom @@ -94,7 +92,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.0.0 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 69e28547f..3fd356bf5 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 43ec01752..a963ad059 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -1,13 +1,11 @@ - + 4.0.0 mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -33,7 +31,7 @@ io.nosqlbench nb-annotations - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/nb/pom.xml b/nb/pom.xml index a7fb4f804..b1d2c81f3 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -1,13 +1,11 @@ - + 4.0.0 mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -26,31 +24,31 @@ io.nosqlbench engine-rest - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-cli - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-docs - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-core - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-extensions - 4.0.0-SNAPSHOT + 4.0.0 @@ -62,67 +60,67 @@ io.nosqlbench driver-web - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-kafka - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-diag - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-tcp - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-http - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-jmx - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-dsegraph-shaded - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-cql-shaded - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-cqlverify - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-mongodb - 4.0.0-SNAPSHOT + 4.0.0 @@ -259,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.0.0-SNAPSHOT + 4.0.0 @@ -313,7 +311,7 @@ maven-enforcer-plugin - + diff --git a/pom.xml b/pom.xml index 6df766ae1..1c1e9e9ce 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.0.0 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 47d79cb23..3bcd6e425 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 nb-api io.nosqlbench virtdata-lang - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index a55f473ff..15e90d5c2 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 70ee7b286..fd5746fea 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 33701045b..a9b946651 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index db6f7bd2f..8bf958b91 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 5b8949cb7..83ff35ac9 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index dd826699a..f37e1e38e 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 8ae260df5..a6011ff1d 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-realer - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-random - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 virtdata-lib-basics io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.0.0-SNAPSHOT + 4.0.0 From 647674d5fe8296f2c36ab2567a36d2ec736f4daf Mon Sep 17 00:00:00 2001 From: nb-droid Date: Sat, 5 Dec 2020 07:38:26 +0000 Subject: [PATCH 076/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 7e5dc9d44..cf517242a 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.0.0 + 4.0.1-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 38df9e73d..0d0cce552 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index fa57e1002..6ab08544e 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 031bdae02..b11049d44 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index b0db08b39..2bad65e0e 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 1ea3ab509..f336d7900 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 6dfb9b86e..1d94240ff 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 84fbd6592..e44edcb54 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-stdout - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 2599ce8e5..b71dbe3f5 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index d72700f7a..fbdba5650 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index df32a3d6d..604bdd10d 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-stdout - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 07ee184ee..c5ae29e21 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index ab177f941..17de21e56 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 1e719e348..378732418 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench nb-annotations - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 04a00cfb7..aa81fa9f0 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench engine-docker - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index c46f59d84..7d0943820 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 20f31ccef..6af74b22b 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench drivers-api - 4.0.0 + 4.0.1-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.0.0 + 4.0.1-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index fad6e5465..178702733 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 31279c6da..2d86bf2d3 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 07ddf66d3..4bd7deb56 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 9e392b334..5be95850c 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 9c60a3987..d46a7c4f6 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.0.0 + 4.0.1-SNAPSHOT pom @@ -92,7 +92,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-4.0.0 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 3fd356bf5..8cc915f9e 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index a963ad059..9eb392cbc 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index b1d2c81f3..6830ad4b4 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench engine-cli - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench engine-docs - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench engine-core - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench engine-extensions - 4.0.0 + 4.0.1-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-kafka - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-stdout - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-diag - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-tcp - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-http - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-jmx - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-cql-shaded - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-cqlverify - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench driver-mongodb - 4.0.0 + 4.0.1-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/pom.xml b/pom.xml index 1c1e9e9ce..f1fe1927d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-4.0.0 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 3bcd6e425..ea8949990 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 15e90d5c2..6313e02dd 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index fd5746fea..1b826c0f7 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index a9b946651..42346d9be 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 8bf958b91..edc0089b4 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 83ff35ac9..3e80ada57 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index f37e1e38e..7dc21a0bb 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.0.0 + 4.0.1-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index a6011ff1d..4d205c4a9 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench virtdata-lib-realer - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench virtdata-api - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench virtdata-lib-random - 4.0.0 + 4.0.1-SNAPSHOT io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT virtdata-lib-basics io.nosqlbench - 4.0.0 + 4.0.1-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.0.0 + 4.0.1-SNAPSHOT From 608d1f727f42118f10b6a54b05cdedc11416a298 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Sat, 5 Dec 2020 17:54:58 -0600 Subject: [PATCH 077/164] Update DOWNLOADS.md Add redirect support with curl examples --- DOWNLOADS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DOWNLOADS.md b/DOWNLOADS.md index d3d12e8ae..49b5d970f 100644 --- a/DOWNLOADS.md +++ b/DOWNLOADS.md @@ -6,10 +6,12 @@ The latest release of NoSQLBench is always available from github releases. - download [the latest release of nb](https://github.com/nosqlbench/nosqlbench/releases/latest/download/nb), a linux binary + - To download it with curl, use `curl -L -O https://github.com/nosqlbench/nosqlbench/releases/latest/download/nb`. - (be sure to `chmod +x nb` once you download it) - download [the latest release of nb.jar](https://github.com/nosqlbench/nosqlbench/releases/latest/download/nb.jar), a single-jar application. - This requires java 14 or later, make sure your `java -version` command says that you are on Java 14 or later. + - To download it with curl, use `curl -L -O https://github.com/nosqlbench/nosqlbench/releases/latest/download/nb.jar`. ## Docker From 7a72639a946ca1f79a35fa6c36a9ac835c85c2f0 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Sat, 5 Dec 2020 22:22:31 -0600 Subject: [PATCH 078/164] log annotators config to debug --- engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java | 1 + 1 file changed, 1 insertion(+) 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 44cfec7ff..ec030e94e 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 @@ -271,6 +271,7 @@ public class NBCLI { System.exit(0); } + logger.debug("initializing annotators with config:'" + annotatorsConfig + "'"); Annotators.init(annotatorsConfig); Annotators.recordAnnotation( Annotation.newBuilder() From 8a0b326f22944c0bffb2a7f3c10e5d397aa57c81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Dec 2020 04:39:17 +0000 Subject: [PATCH 079/164] Bump jetty.version in /mvn-defaults Bumps `jetty.version` from 9.4.25.v20191220 to 9.4.35.v20201120. Updates `jetty-server` from 9.4.25.v20191220 to 9.4.35.v20201120 - [Release notes](https://github.com/eclipse/jetty.project/releases) - [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.25.v20191220...jetty-9.4.35.v20201120) Updates `jetty-servlets` from 9.4.25.v20191220 to 9.4.35.v20201120 - [Release notes](https://github.com/eclipse/jetty.project/releases) - [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.25.v20191220...jetty-9.4.35.v20201120) Updates `jetty-servlet` from 9.4.25.v20191220 to 9.4.35.v20201120 - [Release notes](https://github.com/eclipse/jetty.project/releases) - [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.25.v20191220...jetty-9.4.35.v20201120) Updates `jetty-rewrite` from 9.4.25.v20191220 to 9.4.35.v20201120 - [Release notes](https://github.com/eclipse/jetty.project/releases) - [Commits](https://github.com/eclipse/jetty.project/compare/jetty-9.4.25.v20191220...jetty-9.4.35.v20201120) Signed-off-by: dependabot[bot] --- mvn-defaults/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 42b5c62aa..57b9009be 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -38,7 +38,7 @@ 2.4.0-b180830.0438 2.29 2.27 - 9.4.25.v20191220 + 9.4.35.v20201120 1.22 2.9.9 5.3.2 From e4f325c43bf39948af925da5caaf94ced5a05112 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Sat, 5 Dec 2020 22:40:04 -0600 Subject: [PATCH 080/164] disable test which is present in feature branch --- .../annotations/AnnotationBuilderTest.java | 70 +++++++++---------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java index adfa377ef..1a7430f03 100644 --- a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java @@ -1,45 +1,41 @@ package io.nosqlbench.nb.api.annotations; -import io.nosqlbench.nb.api.Layer; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - public class AnnotationBuilderTest { private static final long time = 1600000000000L; - @Test - public void testBasicAnnotation() { - - Annotation an1 = Annotation.newBuilder() - .session("test-session") - .at(time) - .layer(Layer.Scenario) - .label("labelka", "labelvb") - .label("labelkc", "labelvd") - .detail("detailk1", "detailv1") - .detail("detailk2", "detailv21\ndetailv22") - .detail("detailk3", "v1\nv2\nv3\n") - .build(); - - String represented = an1.toString(); - assertThat(represented).isEqualTo("session: test-session\n" + - "[Sun Sep 13 07:26:40 CDT 2020]\n" + - "details:\n" + - " detailk1: detailv1\n" + - " detailk2: \n" + - " detailv21\n" + - " detailv22\n" + - " detailk3: \n" + - " v1\n" + - " v2\n" + - " v3\n" + - "labels:\n" + - " layer: Scenario\n" + - " labelka: labelvb\n" + - " labelkc: labelvd\n"); - - } + // Disabled until the feature is properly merged into main +// @Test +// public void testBasicAnnotation() { +// +// Annotation an1 = Annotation.newBuilder() +// .session("test-session") +// .at(time) +// .layer(Layer.Scenario) +// .label("labelka", "labelvb") +// .label("labelkc", "labelvd") +// .detail("detailk1", "detailv1") +// .detail("detailk2", "detailv21\ndetailv22") +// .detail("detailk3", "v1\nv2\nv3\n") +// .build(); +// +// String represented = an1.toString(); +// assertThat(represented).isEqualTo("session: test-session\n" + +// "[Sun Sep 13 07:26:40 CDT 2020]\n" + +// "details:\n" + +// " detailk1: detailv1\n" + +// " detailk2: \n" + +// " detailv21\n" + +// " detailv22\n" + +// " detailk3: \n" + +// " v1\n" + +// " v2\n" + +// " v3\n" + +// "labels:\n" + +// " layer: Scenario\n" + +// " labelka: labelvb\n" + +// " labelkc: labelvd\n"); +// +// } } \ No newline at end of file From 6248b0e2ab186a31cabacba952368578f3a95456 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Sun, 6 Dec 2020 16:10:39 -0600 Subject: [PATCH 081/164] fix #232 and #235 logfile dir and config --- .../main/java/io/nosqlbench/engine/cli/NBCLI.java | 4 +++- .../engine/core/logging/LoggerConfig.java | 14 ++++++++++++++ 2 files changed, 17 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 ec030e94e..3aa8c720d 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 @@ -89,8 +89,10 @@ public class NBCLI { loggerConfig.setConsoleLevel(NBLogLevel.ERROR); NBCLIOptions globalOptions = new NBCLIOptions(args, NBCLIOptions.Mode.ParseGlobalsOnly); + String sessionName = new SessionNamer().format(globalOptions.getSessionName()); loggerConfig + .setSessionName(sessionName) .setConsoleLevel(globalOptions.getConsoleLogLevel()) .setConsolePattern(globalOptions.getConsoleLoggingPattern()) .setLogfileLevel(globalOptions.getScenarioLogLevel()) @@ -103,6 +105,7 @@ public class NBCLI { logger = LogManager.getLogger("NBCLI"); loggerConfig.purgeOldFiles(LogManager.getLogger("SCENARIO")); logger.info("Configured scenario log at " + loggerConfig.getLogfileLocation()); + logger.debug("Scenario log started"); // Global only processing if (args.length == 0) { @@ -162,7 +165,6 @@ public class NBCLI { } NBCLIOptions options = new NBCLIOptions(args); - String sessionName = new SessionNamer().format(options.getSessionName()); logger = LogManager.getLogger("NBCLI"); NBIO.addGlobalIncludes(options.wantsIncludes()); diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java index 882325897..0338ba8b1 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java @@ -13,12 +13,16 @@ import org.apache.logging.log4j.core.config.ConfigurationSource; import org.apache.logging.log4j.core.config.builder.api.*; import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; +import java.nio.file.attribute.*; + + import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermissions; import java.util.*; import java.util.stream.Collectors; @@ -202,6 +206,16 @@ public class LoggerConfig extends ConfigurationFactory { } public void activate() { + if (!Files.exists(loggerDir)) { + try { + FileAttribute> attrs = PosixFilePermissions.asFileAttribute( + PosixFilePermissions.fromString("rwxrwx---") + ); + Path directory = Files.createDirectory(loggerDir, attrs); + } catch (Exception e) { + throw new RuntimeException("Error while creating directory " + loggerDir.toString() + ": " + e.getMessage(), e); + } + } ConfigurationFactory.setConfigurationFactory(this); } From a06be5fcc953e3b943fde360a3553e84f9298f21 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:49:55 -0600 Subject: [PATCH 082/164] use json for logged annotation form --- .../io/nosqlbench/engine/core/metrics/LoggingAnnotator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java index 4926b64c9..9bcad6c60 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java @@ -28,7 +28,8 @@ public class LoggingAnnotator implements Annotator, ConfigAware { @Override public void recordAnnotation(Annotation annotation) { - annotationsLog.log(level, annotation.toString()); + String inlineForm = annotation.asJson(); + annotationsLog.log(level, inlineForm); } /** From 23a1eb88229ade7c953d664cd9a41e7028eb90c9 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:10 -0600 Subject: [PATCH 083/164] trace core annotations dispatch --- .../io/nosqlbench/engine/core/annotation/Annotators.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java index dbe55a2d1..66a7cd042 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java @@ -96,7 +96,10 @@ public class Annotators { } public static synchronized void recordAnnotation(Annotation annotation) { - getAnnotators().forEach(a -> a.recordAnnotation(annotation)); + for (Annotator annotator : getAnnotators()) { + logger.trace("calling annotator " + annotator.getName()); + annotator.recordAnnotation(annotation); + } } // public static synchronized void recordAnnotation( From cf008d16111431b0abac22bed939de1409d91100 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:16 -0600 Subject: [PATCH 084/164] promote docker feedback to info --- .../src/main/java/io/nosqlbench/engine/docker/DockerHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java index b18a8855b..5f5e1e6c6 100644 --- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java +++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java @@ -45,7 +45,7 @@ public class DockerHelper { } public String startDocker(String IMG, String tag, String name, List ports, List volumeDescList, List envList, List cmdList, String reload, List linkNames) { - logger.debug("Starting docker with img=" + IMG + ", tag=" + tag + ", name=" + name + ", " + + logger.info("Starting docker with img=" + IMG + ", tag=" + tag + ", name=" + name + ", " + "ports=" + ports + ", volumes=" + volumeDescList + ", env=" + envList + ", cmds=" + cmdList + ", reload=" + reload); boolean existingContainer = removeExitedContainers(name); From da87b1c3bd5387536f1ef0075f26441dddd9d402 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:21 -0600 Subject: [PATCH 085/164] bump grafana to 7.3 --- .../src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 64cae718b..ac1f55f42 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 @@ -135,7 +135,7 @@ public class NBCLIOptions { private Scenario.Engine engine = Scenario.Engine.Graalvm; private boolean graaljs_compat = false; private int hdr_digits = 3; - private String docker_grafana_tag = "7.2.2"; + private String docker_grafana_tag = "7.3.4"; private boolean showStackTraces = false; private boolean compileScript = false; private String scriptFile = null; From f1e3adf5180c7a10d78ff20b5eb612a43e7f8f70 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:25 -0600 Subject: [PATCH 086/164] avoid discarding exceptions in docker helper --- .../java/io/nosqlbench/engine/docker/DockerHelper.java | 10 ++++++---- .../nosqlbench/engine/docker/DockerMetricsManager.java | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java index 5f5e1e6c6..dd1bd4e46 100644 --- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java +++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java @@ -155,7 +155,7 @@ public class DockerHelper { logger.error("Unable to contact docker, make sure docker is up and try again."); logger.error("If docker is installed make sure this user has access to the docker group."); logger.error("$ sudo gpasswd -a ${USER} docker && newgrp docker"); - System.exit(1); + throw e; } return false; @@ -178,7 +178,7 @@ public class DockerHelper { logger.error("Unable to contact docker, make sure docker is up and try again."); logger.error("If docker is installed make sure this user has access to the docker group."); logger.error("$ sudo gpasswd -a ${USER} docker && newgrp docker"); - System.exit(1); + throw e; } return false; } @@ -193,7 +193,7 @@ public class DockerHelper { } catch (Exception e) { e.printStackTrace(); logger.error("Unable to contact docker, make sure docker is up and try again."); - System.exit(1); + throw e; } if (runningContainers.size() >= 1) { @@ -204,9 +204,10 @@ public class DockerHelper { if (reload != null) { try { - post(reload, null, false, "reloading config"); + post(reload, null, false, "reload config"); } catch (Exception e) { logger.error(String.format("Unexpected config/state for docker container %s, consider removing the container", name)); + throw e; } } @@ -233,6 +234,7 @@ public class DockerHelper { } catch (InterruptedException e) { logger.error("Error getting docker log and detect start for containerId: " + containerId); e.printStackTrace(); + throw new RuntimeException(e); } } diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java index 3cf593765..bf9262255 100644 --- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java +++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java @@ -228,7 +228,7 @@ public class DockerMetricsManager { logger.error("failed to set permissions on prom backup " + "directory " + userHome + "/.nosqlbench/prometheus)"); e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } try (PrintWriter out = new PrintWriter( @@ -238,11 +238,11 @@ public class DockerMetricsManager { } catch (FileNotFoundException e) { e.printStackTrace(); logger.error("error writing prometheus yaml file to ~/.prometheus"); - System.exit(1); + throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); logger.error("creating file in ~/.prometheus"); - System.exit(1); + throw new RuntimeException(e); } } @@ -302,7 +302,7 @@ public class DockerMetricsManager { logger.error("failed to set permissions on grafana directory " + "directory " + userHome + "/.nosqlbench/grafana)"); e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } } @@ -348,6 +348,7 @@ public class DockerMetricsManager { close(); } catch (IOException e) { e.printStackTrace(); + throw new RuntimeException(e); } } } From ad49337599a87df667d1de4196734bc139393529 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:30 -0600 Subject: [PATCH 087/164] eagerly await activities in separate thread --- .../core/lifecycle/ActivityFinisher.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityFinisher.java diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityFinisher.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityFinisher.java new file mode 100644 index 000000000..233fb30c5 --- /dev/null +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityFinisher.java @@ -0,0 +1,23 @@ +package io.nosqlbench.engine.core.lifecycle; + +public class ActivityFinisher extends Thread { + + private final ActivityExecutor executor; + private final int timeout; + private boolean result; + + public ActivityFinisher(ActivityExecutor executor, int timeout) { + super(executor.getActivityDef().getAlias() + "_finisher"); + this.executor = executor; + this.timeout = timeout; + } + + @Override + public void run() { + result = executor.awaitCompletion(timeout); + } + + public boolean getResult() { + return result; + } +} From 1529f2714e247b067de368e32fcbf1b65bad48cc Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:34 -0600 Subject: [PATCH 088/164] ensure scenario annotations run on exit --- .../core/script/ScenarioShutdownHook.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioShutdownHook.java diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioShutdownHook.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioShutdownHook.java new file mode 100644 index 000000000..a8bb700aa --- /dev/null +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioShutdownHook.java @@ -0,0 +1,20 @@ +package io.nosqlbench.engine.core.script; + +import org.apache.logging.log4j.Logger; + +public class ScenarioShutdownHook extends Thread { + + private final Scenario scenario; + private final Logger logger; + + public ScenarioShutdownHook(Scenario scenario) { + this.scenario = scenario; + logger = scenario.getLogger(); + } + + @Override + public void run() { + scenario.finish(); + } + +} From 5315b8a98af24aecc2b506b5742a04f10a5cd83d Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:38 -0600 Subject: [PATCH 089/164] avoid spamming console with metrics for short sessions --- .../engine/core/lifecycle/ScenariosResults.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java index daa937ceb..85fa585dd 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java @@ -66,8 +66,15 @@ public class ScenariosResults { logger.info("results for scenario: " + scenario); if (oresult != null) { - oresult.reportToLog(); - oresult.reportToConsole(); + oresult.reportElapsedMillis(); + if (oresult.getElapsedMillis() >= 60_000) { + oresult.reportToConsole(); + oresult.reportToLog(); + } else { + logger.info("Metrics suppressed because scenario was less than 1 minute long."); + logger.info("Metrics data is not reliable for short sampling periods."); + logger.info("To get metrics on console, run a longer scenario."); + } } else { logger.error(scenario.getScenarioName() + ": incomplete (missing result)"); } From 0d422b5a5f257058ef86dfe72d75feb9e5aef12a Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:43 -0600 Subject: [PATCH 090/164] add instant and interval annotations --- .../core/lifecycle/ActivityExecutor.java | 102 +++++++++++++----- .../core/lifecycle/ScenarioController.java | 88 ++++++++++++--- .../engine/core/script/Scenario.java | 58 ++++++++-- .../engine/core/script/ScenariosExecutor.java | 12 ++- .../resources/ScenarioExecutorEndpoint.java | 4 +- .../nosqlbench/nb/api/annotations/Span.java | 12 +++ .../annotations/AnnotationBuilderTest.java | 6 +- 7 files changed, 225 insertions(+), 57 deletions(-) create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Span.java diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java index b344f97d1..0cb03994f 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java @@ -18,6 +18,9 @@ import io.nosqlbench.engine.api.activityapi.core.*; import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ParameterMap; import io.nosqlbench.engine.api.activityimpl.input.ProgressCapable; +import io.nosqlbench.engine.core.annotation.Annotators; +import io.nosqlbench.nb.api.Layer; +import io.nosqlbench.nb.api.annotations.Annotation; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; @@ -56,6 +59,10 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen private RuntimeException stoppingException; private final static int waitTime = 10000; + private String sessionId = ""; + private long startedAt = 0L; + private long stoppedAt = 0L; + private String[] annotatedCommand; // private RunState intendedState = RunState.Uninitialized; @@ -63,15 +70,19 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen this.activity = activity; this.activityDef = activity.getActivityDef(); executorService = new ThreadPoolExecutor( - 0, Integer.MAX_VALUE, - 0L, TimeUnit.SECONDS, - new SynchronousQueue<>(), - new IndexedThreadFactory(activity.getAlias(), new ActivityExceptionHandler(this)) + 0, Integer.MAX_VALUE, + 0L, TimeUnit.SECONDS, + new SynchronousQueue<>(), + new IndexedThreadFactory(activity.getAlias(), new ActivityExceptionHandler(this)) ); activity.getActivityDef().getParams().addListener(this); activity.setActivityController(this); } + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + // TODO: Doc how uninitialized activities do not propagate parameter map changes and how // TODO: this is different from preventing modification to uninitialized activities @@ -86,9 +97,22 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen */ public synchronized void startActivity() { logger.info("starting activity " + activity.getAlias() + " for cycles " + activity.getCycleSummary()); + this.annotatedCommand = annotatedCommand; + Annotators.recordAnnotation(Annotation.newBuilder() + .session(sessionId) + .now() + .layer(Layer.Activity) + .label("alias", getActivityDef().getAlias()) + .label("driver", getActivityDef().getActivityType()) + .label("workload", getActivityDef().getParams().getOptionalString("workload").orElse("none")) + .detail("params", getActivityDef().toString()) + .build() + ); + activitylogger.debug("START/before alias=(" + activity.getAlias() + ")"); try { activity.setRunState(RunState.Starting); + this.startedAt = System.currentTimeMillis(); activity.initActivity(); //activity.onActivityDefUpdate(activityDef); } catch (Exception e) { @@ -117,6 +141,17 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen activity.setRunState(RunState.Stopped); logger.info("stopped: " + this.getActivityDef().getAlias() + " with " + motors.size() + " slots"); activitylogger.debug("STOP/after alias=(" + activity.getAlias() + ")"); + Annotators.recordAnnotation(Annotation.newBuilder() + .session(sessionId) + .interval(this.startedAt, this.stoppedAt) + .layer(Layer.Activity) + .label("alias", getActivityDef().getAlias()) + .label("driver", getActivityDef().getActivityType()) + .label("workload", getActivityDef().getParams().getOptionalString("workload").orElse("none")) + .detail("params", getActivityDef().toString()) + .build() + ); + } @@ -179,11 +214,10 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen } } - public boolean requestStopExecutor(int secondsToWait) { + public boolean finishAndShutdownExecutor(int secondsToWait) { activitylogger.debug("REQUEST STOP/before alias=(" + activity.getAlias() + ")"); - - logger.info("Stopping executor for " + activity.getAlias() + " when work completes."); + logger.debug("Stopping executor for " + activity.getAlias() + " when work completes."); executorService.shutdown(); boolean wasStopped = false; @@ -202,6 +236,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen activity.closeAutoCloseables(); activity.setRunState(RunState.Stopped); } + if (stoppingException != null) { logger.trace("an exception caused the activity to stop:" + stoppingException.getMessage()); throw stoppingException; @@ -231,10 +266,10 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen adjustToActivityDef(activity.getActivityDef()); } motors.stream() - .filter(m -> (m instanceof ActivityDefObserver)) + .filter(m -> (m instanceof ActivityDefObserver)) // .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Uninitialized) // .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Starting) - .forEach(m -> ((ActivityDefObserver) m).onActivityDefUpdate(activityDef)); + .forEach(m -> ((ActivityDefObserver) m).onActivityDefUpdate(activityDef)); } } @@ -242,8 +277,27 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen return activityDef; } + /** + * This is the canonical way to wait for an activity to finish. It ties together + * any way that an activity can finish under one blocking call. + * This should be awaited asynchronously from the control layer in separate threads. + * + * TODO: move activity finisher threaad to this class and remove separate implementation + */ public boolean awaitCompletion(int waitTime) { - return requestStopExecutor(waitTime); + boolean finished = finishAndShutdownExecutor(waitTime); + Annotators.recordAnnotation(Annotation.newBuilder() + .session(sessionId) + .interval(startedAt, this.stoppedAt) + .layer(Layer.Activity) + .label("alias", getActivityDef().getAlias()) + .label("driver", getActivityDef().getActivityType()) + .label("workload", getActivityDef().getParams().getOptionalString("workload").orElse("none")) + .detail("params", getActivityDef().toString()) + .build() + ); + + return finished; } public boolean awaitFinish(int timeout) { @@ -267,8 +321,8 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen private String getSlotStatus() { return motors.stream() - .map(m -> m.getSlotStateTracker().getSlotState().getCode()) - .collect(Collectors.joining(",", "[", "]")); + .map(m -> m.getSlotStateTracker().getSlotState().getCode()) + .collect(Collectors.joining(",", "[", "]")); } /** @@ -311,18 +365,18 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen case Running: case Starting: motors.stream() - .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Running) - .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Finished) - .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Starting) - .forEach(m -> { - m.getSlotStateTracker().enterState(RunState.Starting); - executorService.execute(m); - }); + .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Running) + .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Finished) + .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Starting) + .forEach(m -> { + m.getSlotStateTracker().enterState(RunState.Starting); + executorService.execute(m); + }); break; case Stopped: motors.stream() - .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Stopped) - .forEach(Motor::requestStop); + .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Stopped) + .forEach(Motor::requestStop); break; case Finished: case Stopping: @@ -403,7 +457,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen awaited = awaitMotorState(motor, waitTime, pollTime, awaitingState); if (!awaited) { logger.trace("failed awaiting motor " + motor.getSlotId() + " for state in " + - Arrays.asList(awaitingState)); + Arrays.asList(awaitingState)); break; } } @@ -447,8 +501,8 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen boolean awaitedRequiredState = awaitMotorState(m, waitTime, pollTime, awaitingState); if (!awaitedRequiredState) { String error = "Unable to await " + activityDef.getAlias() + - "/Motor[" + m.getSlotId() + "]: from state " + startingState + " to " + m.getSlotStateTracker().getSlotState() - + " after waiting for " + waitTime + "ms"; + "/Motor[" + m.getSlotId() + "]: from state " + startingState + " to " + m.getSlotStateTracker().getSlotState() + + " after waiting for " + waitTime + "ms"; RuntimeException e = new RuntimeException(error); logger.error(error); throw e; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java index 26f0a9540..1cdda63d3 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java @@ -20,6 +20,9 @@ import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ParameterMap; import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter; import io.nosqlbench.engine.api.metrics.ActivityMetrics; +import io.nosqlbench.engine.core.annotation.Annotators; +import io.nosqlbench.nb.api.Layer; +import io.nosqlbench.nb.api.annotations.Annotation; import io.nosqlbench.nb.api.errors.BasicError; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; @@ -38,6 +41,11 @@ public class ScenarioController { private static final Logger scenariologger = LogManager.getLogger("SCENARIO"); private final Map activityExecutors = new ConcurrentHashMap<>(); + private final String sessionId; + + public ScenarioController(String sessionId) { + this.sessionId = sessionId; + } /** * Start an activity, given the activity definition for it. The activity will be known in the scenario @@ -46,9 +54,20 @@ public class ScenarioController { * @param activityDef string in alias=value1;driver=value2;... format */ public synchronized void start(ActivityDef activityDef) { + Annotators.recordAnnotation(Annotation.newBuilder() + .session(sessionId) + .now() + .layer(Layer.Activity) + .label("alias", activityDef.getAlias()) + .detail("command", "start") + .detail("params", activityDef.toString()) + .build()); + + ActivityExecutor activityExecutor = getActivityExecutor(activityDef, true); scenariologger.debug("START " + activityDef.getAlias()); activityExecutor.startActivity(); + } /** @@ -84,6 +103,15 @@ public class ScenarioController { * @param activityDef A definition for an activity to run */ public synchronized void run(int timeout, ActivityDef activityDef) { + Annotators.recordAnnotation(Annotation.newBuilder() + .session(sessionId) + .now() + .layer(Layer.Activity) + .label("alias", activityDef.getAlias()) + .detail("command", "run") + .detail("params", activityDef.toString()) + .build()); + ActivityExecutor activityExecutor = getActivityExecutor(activityDef, true); scenariologger.debug("RUN alias=" + activityDef.getAlias()); scenariologger.debug(" (RUN/START) alias=" + activityDef.getAlias()); @@ -135,6 +163,15 @@ public class ScenarioController { * @param activityDef An activity def, including at least the alias parameter. */ public synchronized void stop(ActivityDef activityDef) { + Annotators.recordAnnotation(Annotation.newBuilder() + .session(sessionId) + .now() + .layer(Layer.Activity) + .label("alias", activityDef.getAlias()) + .detail("command", "stop") + .detail("params", activityDef.toString()) + .build()); + ActivityExecutor activityExecutor = getActivityExecutor(activityDef, false); if (activityExecutor == null) { throw new RuntimeException("could not stop missing activity:" + activityDef); @@ -179,7 +216,7 @@ public class ScenarioController { } ActivityExecutor activityExecutor = getActivityExecutor(alias); ParameterMap params = activityExecutor.getActivityDef().getParams(); - scenariologger.debug("SET ("+alias+"/"+param + ")=(" + value + ")"); + scenariologger.debug("SET (" + alias + "/" + param + ")=(" + value + ")"); params.set(param, value); } @@ -242,25 +279,25 @@ public class ScenarioController { if (executor == null && createIfMissing) { - String activityTypeName = activityDef.getParams().getOptionalString("driver","type").orElse(null); + String activityTypeName = activityDef.getParams().getOptionalString("driver", "type").orElse(null); List knownTypes = ActivityType.FINDER.getAll().stream().map(ActivityType::getName).collect(Collectors.toList()); // Infer the type from either alias or yaml if possible (exactly one matches) - if (activityTypeName==null) { + if (activityTypeName == null) { List matching = knownTypes.stream().filter( n -> activityDef.getParams().getOptionalString("alias").orElse("").contains(n) || activityDef.getParams().getOptionalString("yaml", "workload").orElse("").contains(n) ).collect(Collectors.toList()); - if (matching.size()==1) { - activityTypeName=matching.get(0); + if (matching.size() == 1) { + activityTypeName = matching.get(0); logger.info("param 'type' was inferred as '" + activityTypeName + "' since it was seen in yaml or alias parameter."); } } - if (activityTypeName==null) { + if (activityTypeName == null) { String errmsg = "You must provide a driver= parameter. Valid examples are:\n" + - knownTypes.stream().map(t -> " driver="+t+"\n").collect(Collectors.joining()); + knownTypes.stream().map(t -> " driver=" + t + "\n").collect(Collectors.joining()); throw new BasicError(errmsg); } @@ -345,15 +382,33 @@ public class ScenarioController { * @return true, if all activities completed before the timer expired, false otherwise */ public boolean awaitCompletion(int waitTimeMillis) { - boolean completed = false; - for (ActivityExecutor executor : activityExecutors.values()) { - if (!executor.awaitCompletion(waitTimeMillis)) { - logger.debug("awaiting completion signaled FALSE"); - return false; + boolean completed = true; + long waitstart = System.currentTimeMillis(); + long remaining = waitTimeMillis; + + List finishers = new ArrayList<>(); + for (ActivityExecutor ae : activityExecutors.values()) { + ActivityFinisher finisher = new ActivityFinisher(ae, (int) remaining); + finishers.add(finisher); + finisher.start(); + } + + for (ActivityFinisher finisher : finishers) { + try { + finisher.join(waitTimeMillis); + } catch (InterruptedException ignored) { } } - logger.debug("All activities awaiting completion signaled TRUE"); - return true; + + for (ActivityFinisher finisher : finishers) { + if (!finisher.getResult()) { + logger.debug("finisher for " + finisher.getName() + " did not signal TRUE"); + completed = false; + } + } + + return completed; + } private ActivityDef aliasToDef(String alias) { @@ -364,9 +419,10 @@ public class ScenarioController { } } - public boolean await(Map activityDefMap) { + public boolean await(Map activityDefMap) { return this.awaitActivity(activityDefMap); } + public boolean awaitActivity(Map activityDefMap) { ActivityDef ad = new ActivityDef(new ParameterMap(activityDefMap)); return awaitActivity(ad); @@ -375,6 +431,7 @@ public class ScenarioController { public boolean await(String alias) { return this.awaitActivity(alias); } + public boolean awaitActivity(String alias) { ActivityDef toAwait = aliasToDef(alias); return awaitActivity(toAwait); @@ -383,6 +440,7 @@ public class ScenarioController { public boolean await(ActivityDef activityDef) { return this.awaitActivity(activityDef); } + public boolean awaitActivity(ActivityDef activityDef) { ActivityExecutor activityExecutor = getActivityExecutor(activityDef, false); if (activityExecutor == null) { diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java index a02afe9d6..89b56dd23 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java @@ -56,14 +56,19 @@ import java.util.stream.Collectors; public class Scenario implements Callable { + private final String commandLine; private Logger logger = LogManager.getLogger("SCENARIO"); private State state = State.Scheduled; + private volatile ScenarioShutdownHook scenarioShutdownHook; + private Exception error; + public enum State { Scheduled, Running, Errored, + Interrupted, Finished } @@ -96,7 +101,8 @@ public class Scenario implements Callable { String progressInterval, boolean wantsGraaljsCompatMode, boolean wantsStackTraces, - boolean wantsCompiledScript) { + boolean wantsCompiledScript, + String commandLine) { this.scenarioName = scenarioName; this.scriptfile = scriptfile; this.engine = engine; @@ -104,6 +110,7 @@ public class Scenario implements Callable { this.wantsGraaljsCompatMode = wantsGraaljsCompatMode; this.wantsStackTraces = wantsStackTraces; this.wantsCompiledScript = wantsCompiledScript; + this.commandLine = commandLine; } public Scenario setLogger(Logger logger) { @@ -118,6 +125,7 @@ public class Scenario implements Callable { public Scenario(String name, Engine engine) { this.scenarioName = name; this.engine = engine; + this.commandLine = ""; } public Scenario addScriptText(String scriptText) { @@ -180,7 +188,7 @@ public class Scenario implements Callable { break; } - scenarioController = new ScenarioController(); + scenarioController = new ScenarioController(this.scenarioName); if (!progressInterval.equals("disabled")) { activityProgressIndicator = new ActivityProgressIndicator(scenarioController, progressInterval); } @@ -229,6 +237,9 @@ public class Scenario implements Callable { } public void run() { + scenarioShutdownHook = new ScenarioShutdownHook(this); + Runtime.getRuntime().addShutdownHook(scenarioShutdownHook); + state = State.Running; startedAtMillis = System.currentTimeMillis(); @@ -237,7 +248,6 @@ public class Scenario implements Callable { .session(this.scenarioName) .now() .layer(Layer.Scenario) - .label("scenario", getScenarioName()) .detail("engine", this.engine.toString()) .build() ); @@ -285,14 +295,12 @@ public class Scenario implements Callable { this.state = State.Errored; logger.warn("Error in scenario, shutting down."); this.scenarioController.forceStopScenario(5000, false); + this.error = e; throw new RuntimeException(e); } finally { - if (this.state==State.Running) { - this.state = State.Finished; - } System.out.flush(); System.err.flush(); - endedAtMillis=System.currentTimeMillis(); + endedAtMillis = System.currentTimeMillis(); } } int awaitCompletionTime = 86400 * 365 * 1000; @@ -300,8 +308,38 @@ public class Scenario implements Callable { scenarioController.awaitCompletion(awaitCompletionTime); //TODO: Ensure control flow covers controller shutdown in event of internal error. - logger.debug("scenario completed without errors"); - endedAtMillis=System.currentTimeMillis(); //TODO: Make only one endedAtMillis assignment + Runtime.getRuntime().removeShutdownHook(scenarioShutdownHook); + scenarioShutdownHook = null; + finish(); + } + + public void finish() { + logger.debug("finishing scenario"); + endedAtMillis = System.currentTimeMillis(); //TODO: Make only one endedAtMillis assignment + if (this.state == State.Running) { + this.state = State.Finished; + } + + if (scenarioShutdownHook != null) { + // If this method was called while the shutdown hook is defined, then it means + // that the scenario was ended before the hook was uninstalled normally. + this.state = State.Interrupted; + logger.warn("Scenario was interrupted by process exit, shutting down"); + } + + logger.info("scenario state: " + this.state); + + // We report the scenario state via annotation even for short runs + Annotation annotation = Annotation.newBuilder() + .session(this.scenarioName) + .interval(this.startedAtMillis, endedAtMillis) + .layer(Layer.Scenario) + .label("state", this.state.toString()) + .detail("command_line", this.commandLine) + .build(); + + Annotators.recordAnnotation(annotation); + } public long getStartedAtMillis() { @@ -315,7 +353,7 @@ public class Scenario implements Callable { public ScenarioResult call() { run(); String iolog = scriptEnv.getTimedLog(); - return new ScenarioResult(iolog); + return new ScenarioResult(iolog, this.startedAtMillis, this.endedAtMillis); } @Override diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java index 411c3aea3..a4914ffa5 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java @@ -149,7 +149,8 @@ public class ScenariosExecutor { try { oResult = Optional.of(resultFuture.get()); } catch (Exception e) { - oResult = Optional.of(new ScenarioResult(e)); + long now = System.currentTimeMillis(); + oResult = Optional.of(new ScenarioResult(e, now, now)); } } @@ -182,27 +183,28 @@ public class ScenariosExecutor { if (resultFuture1 == null) { throw new BasicError("Unknown scenario name:" + scenarioName); } + long now = System.currentTimeMillis(); if (resultFuture1.isDone()) { try { return Optional.ofNullable(resultFuture1.get()); } catch (Exception e) { - return Optional.of(new ScenarioResult(e)); + return Optional.of(new ScenarioResult(e, now, now)); } } else if (resultFuture1.isCancelled()) { - return Optional.of(new ScenarioResult(new Exception("result was cancelled."))); + return Optional.of(new ScenarioResult(new Exception("result was cancelled."), now, now)); } return Optional.empty(); } public synchronized void stopScenario(String scenarioName) { - this.stopScenario(scenarioName,false); + this.stopScenario(scenarioName, false); } public synchronized void stopScenario(String scenarioName, boolean rethrow) { Optional pendingScenario = getPendingScenario(scenarioName); if (pendingScenario.isPresent()) { ScenarioController controller = pendingScenario.get().getScenarioController(); - if (controller!=null) { + if (controller != null) { controller.forceStopScenario(0, rethrow); } } else { diff --git a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java index ccf36ce0a..e72d2d0d7 100644 --- a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java +++ b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java @@ -108,8 +108,8 @@ public class ScenarioExecutorEndpoint implements WebServiceObject { "disabled", false, true, - false - ); + false, + cmdList.toString()); scenario.addScriptText(buffer.getParsedScript()); diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Span.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Span.java new file mode 100644 index 000000000..d13e80b14 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Span.java @@ -0,0 +1,12 @@ +package io.nosqlbench.nb.api.annotations; + +public enum Span { + /** + * A span of time of size zero. + */ + instant, + /** + * A span in time for which the start and end are different. + */ + interval +} diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java index fd4dc8549..0f8f92881 100644 --- a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java @@ -26,6 +26,7 @@ public class AnnotationBuilderTest { String represented = an1.toString(); assertThat(represented).isEqualTo("session: test-session\n" + "[2020-09-13T12:26:40Z[GMT]]\n" + + "span:instant\n" + "details:\n" + " detailk1: detailv1\n" + " detailk2: \n" + @@ -38,7 +39,10 @@ public class AnnotationBuilderTest { "labels:\n" + " layer: Scenario\n" + " labelka: labelvb\n" + - " labelkc: labelvd\n"); + " labelkc: labelvd\n" + + " session: test-session\n" + + " span: instant\n" + + " appname: nosqlbench\n"); } From 37f1d010fe73a8b3509be51ca8f751fd72440804 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:52 -0600 Subject: [PATCH 091/164] qualify annotators config in main --- .../src/main/java/io/nosqlbench/engine/cli/NBCLI.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 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 3aa8c720d..895394dba 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 @@ -147,8 +147,11 @@ public class NBCLI { if (metricsAddr != null) { reportGraphiteTo = metricsAddr + ":9109"; - annotatorsConfig = "[{type:'log'},{type:'grafana',baseurl:'http://" + metricsAddr + ":3000/'," + + annotatorsConfig = "[{type:'log',level:'info'},{type:'grafana',baseurl:'http://" + metricsAddr + ":3000" + + "/'," + "tags:'appname:nosqlbench',timeoutms:5000,onerror:'warn'}]"; + } else { + annotatorsConfig = "[{type:'log',level:'info'}]"; } if (args.length > 0 && args[0].toLowerCase().equals("virtdata")) { @@ -333,7 +336,8 @@ public class NBCLI { options.getProgressSpec(), options.wantsGraaljsCompatMode(), options.wantsStackTraces(), - options.wantsCompileScript() + options.wantsCompileScript(), + String.join("\n", args) ); ScriptBuffer buffer = new BasicScriptBuffer() .add(options.getCommands().toArray(new Cmd[0])); @@ -381,7 +385,7 @@ public class NBCLI { scenariosResults.reportToLog(); ShutdownManager.shutdown(); - logger.info(scenariosResults.getExecutionSummary()); +// logger.info(scenariosResults.getExecutionSummary()); if (scenariosResults.hasError()) { Exception exception = scenariosResults.getOne().getException().get(); From a9a1994527cc73e518c07fc8e1d947cc53f1f9d8 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:50:56 -0600 Subject: [PATCH 092/164] move classis metrics log to debug --- .../engine/core/lifecycle/ScenarioResult.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java index 57f6c43d2..56bf419ac 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java @@ -31,23 +31,33 @@ import java.util.concurrent.TimeUnit; public class ScenarioResult { private final static Logger logger = LogManager.getLogger(ScenarioResult.class); + private final long startedAt; + private final long endedAt; private Exception exception; private final String iolog; - public ScenarioResult(String iolog) { + public ScenarioResult(String iolog, long startedAt, long endedAt) { this.iolog = iolog; + this.startedAt = startedAt; + this.endedAt = endedAt; } - public ScenarioResult(Exception e) { + public ScenarioResult(Exception e, long startedAt, long endedAt) { this.iolog = e.getMessage(); + this.startedAt = startedAt; + this.endedAt = endedAt; this.exception = e; } - public void reportToLog() { + public void reportElapsedMillis() { + logger.info("-- SCENARIO TOOK " + getElapsedMillis() + "ms --"); + } - logger.info("-- BEGIN METRICS DETAIL --"); + public void reportToLog() { + logger.debug("-- BEGIN METRICS DETAIL --"); Log4JMetricsReporter reporter = Log4JMetricsReporter.forRegistry(ActivityMetrics.getMetricRegistry()) + .withLoggingLevel(Log4JMetricsReporter.LoggingLevel.DEBUG) .convertDurationsTo(TimeUnit.MICROSECONDS) .convertRatesTo(TimeUnit.SECONDS) .filter(MetricFilter.ALL) @@ -87,4 +97,7 @@ public class ScenarioResult { return this.iolog; } + public long getElapsedMillis() { + return endedAt - startedAt; + } } From 9ca1a47b646478fe8feac5bfd52b222addde1e24 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:51:01 -0600 Subject: [PATCH 093/164] add span semantics to general annotation --- .../grafana/GrafanaMetricsAnnotator.java | 11 +++-- .../nb/api/annotations/Annotation.java | 8 ++++ .../nb/api/annotations/MutableAnnotation.java | 48 +++++++++++++++---- 3 files changed, 56 insertions(+), 11 deletions(-) diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java index 25d50aac6..86b46c0cd 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java @@ -23,7 +23,7 @@ import java.util.function.Supplier; public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { private final static Logger logger = LogManager.getLogger("ANNOTATORS" ); - private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS" ); + //private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS" ); private OnError onError = OnError.Warn; private GrafanaClient client; @@ -45,9 +45,15 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { }); ga.getTags().add("layer:" + annotation.getLayer().toString()); + if (annotation.getStart() == annotation.getEnd()) { + ga.getTags().add("span:instant"); + } else { + ga.getTags().add("span:interval"); + } + Map labels = annotation.getLabels(); - Optional.ofNullable(labels.get("alertId" )) + Optional.ofNullable(labels.get("alertId")) .map(Integer::parseInt).ifPresent(ga::setAlertId); ga.setText(annotation.toString()); @@ -82,7 +88,6 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { // Details - annotationsLog.info("ANNOTATION:" + ga.toString()); GrafanaAnnotation created = this.client.createAnnotation(ga); } catch (Exception e) { diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java index 3d2febfff..70209db61 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java @@ -73,4 +73,12 @@ public interface Annotation { return new AnnotationBuilder(); } + /** + * This should return {@link Span#interval} if the span of time is not an instant, and + * {@link Span#instant}, otherwise. + */ + Span getSpan(); + + String asJson(); + } diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java index 8bcefc917..57d3641b5 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java @@ -1,5 +1,8 @@ package io.nosqlbench.nb.api.annotations; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.annotations.Expose; import io.nosqlbench.nb.api.Layer; import java.time.Instant; @@ -9,13 +12,25 @@ import java.util.*; public class MutableAnnotation implements Annotation { + private final static Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); private String session = "SESSION_UNNAMED"; + + @Expose private Layer layer; + + @Expose private long start = 0L; + + @Expose private long end = 0L; + + @Expose private Map labels = new LinkedHashMap<>(); + + @Expose private Map details = new LinkedHashMap<>(); - private ZoneId zoneid = ZoneId.of("GMT"); + + private final ZoneId zoneid = ZoneId.of("GMT"); public MutableAnnotation( TimeZone timezone, @@ -25,24 +40,28 @@ public class MutableAnnotation implements Annotation { long end, LinkedHashMap labels, LinkedHashMap details) { - this.session = session; - this.layer = layer; - this.start = start; - this.end = end; - this.details = details; - this.labels = labels; + setLabels(labels); + setSession(session); + setLayer(layer); + setStart(start); + setEnd(end); + setDetails(details); + labels.put("appname", "nosqlbench"); } public void setSession(String sessionName) { this.session = sessionName; + this.labels.put("session", sessionName); } public void setStart(long intervalStart) { this.start = intervalStart; + this.labels.put("span", getSpan().toString()); } public void setEnd(long intervalEnd) { this.end = intervalEnd; + this.labels.put("span", getSpan().toString()); } public void setLabels(Map labels) { @@ -80,6 +99,9 @@ public class MutableAnnotation implements Annotation { @Override public Map getLabels() { +// if (!labels.containsKey("span")) { +// labels.put("span",getSpan().toString()); +// } return labels; } @@ -102,6 +124,8 @@ public class MutableAnnotation implements Annotation { sb.append(" - ").append(endTime); } sb.append("]\n"); + + sb.append("span:").append(getSpan()).append("\n"); sb.append("details:\n"); formatMap(sb, getDetails()); sb.append("labels:\n"); @@ -126,8 +150,16 @@ public class MutableAnnotation implements Annotation { }); } - public Annotation asReadOnly() { return this; } + + public Span getSpan() { + return (getStart() == getEnd()) ? Span.instant : Span.interval; + } + + public String asJson() { + String inlineForm = gson.toJson(this); + return inlineForm; + } } From f09335755ce1b9919aeb4a43d893fc49e8693a20 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:51:05 -0600 Subject: [PATCH 094/164] add dashboard for nb4 --- .../dashboards/classic-nb-dashboard.json | 7077 ----------------- .../dashboards/nb4-default-dashboard.json | 1230 +++ .../docker/dashboards/new-nb-dashboard.json | 2198 ++--- 3 files changed, 2344 insertions(+), 8161 deletions(-) delete mode 100644 engine-docker/src/main/resources/docker/dashboards/classic-nb-dashboard.json create mode 100644 engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json diff --git a/engine-docker/src/main/resources/docker/dashboards/classic-nb-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/classic-nb-dashboard.json deleted file mode 100644 index 243ebf231..000000000 --- a/engine-docker/src/main/resources/docker/dashboards/classic-nb-dashboard.json +++ /dev/null @@ -1,7077 +0,0 @@ -{ - "meta": { - "type": "db", - "canSave": true, - "canEdit": true, - "canAdmin": true, - "canStar": true, - "slug": "analysis", - "url": "/d/FEp0TiXik/analysis", - "expires": "0001-01-01T00:00:00Z", - "created": "2019-06-11T16:21:40Z", - "updated": "2019-06-11T16:21:40Z", - "updatedBy": "Anonymous", - "createdBy": "Anonymous", - "version": 1, - "hasAcl": false, - "isFolder": false, - "folderId": 0, - "folderTitle": "General", - "folderUrl": "", - "provisioned": true - }, - "dashboard": { - "id": null, - "__inputs": [ - { - "description": "", - "label": "prometheus", - "name": "DS_PROMETHEUS", - "pluginId": "prometheus", - "pluginName": "Prometheus", - "type": "datasource" - } - ], - "__requires": [ - { - "id": "grafana", - "name": "Grafana", - "type": "grafana", - "version": "5.3.2" - }, - { - "id": "graph", - "name": "Graph", - "type": "panel", - "version": "5.0.0" - }, - { - "id": "prometheus", - "name": "Prometheus", - "type": "datasource", - "version": "5.0.0" - }, - { - "id": "singlestat", - "name": "Singlestat", - "type": "panel", - "version": "5.0.0" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "iteration": 1552332041877, - "links": [], - "panels": [ - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 91, - "panels": [], - "title": "nosqlbench and DSE", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 1 - }, - "id": 95, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_m1_rate\"}", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "main ops", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_m1_rate\"}", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "main success", - "refId": "C" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_m1_rate\"}", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "rampup ops", - "refId": "B" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_m1_rate\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "rampup success", - "refId": "D" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Ops and Successful Ops", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 1 - }, - "id": 93, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_WriteTimeoutException_count\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main write timeout", - "refId": "H" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_ReadTimeoutException_count\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main read timeout", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_OperationTimedOutException_count\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main op timeout", - "refId": "B" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_WriteTimeoutException_count\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup write timeout", - "refId": "C" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_ReadTimeoutException_count\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup read timeout", - "refId": "D" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_OperationTimedOutException_count\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup op timeout", - "refId": "E" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_NoHostAvailableException_count\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "F" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_UnavailableException_count\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "G" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Error Counts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 1 - }, - "id": 97, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_min\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main min", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p50\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main p50", - "refId": "B" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main p75", - "refId": "D" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p95\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main p95", - "refId": "C" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p98\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main p98", - "refId": "E" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main p99", - "refId": "F" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p999\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main p999", - "refId": "G" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_min\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup min", - "refId": "H" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p50\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup p50", - "refId": "I" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup p75", - "refId": "J" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p95\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup p95", - "refId": "K" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup p99", - "refId": "L" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p999\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup p999", - "refId": "M" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max \"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main max", - "refId": "N" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup max", - "refId": "O" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "service time distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 1 - }, - "id": 109, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main max", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup max", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "service time max", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 7 - }, - "id": 99, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main bind p75", - "refId": "C" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main execute p75", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main result p75", - "refId": "B" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main input p75", - "refId": "D" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup bind p75", - "refId": "E" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup execute p75", - "refId": "F" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup result p75", - "refId": "G" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p75\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup input p75", - "refId": "H" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "p75 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 7 - }, - "id": 111, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main bind p99", - "refId": "C" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main execute p99", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main result p99", - "refId": "B" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main input p99", - "refId": "D" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup bind p99", - "refId": "E" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup execute p99", - "refId": "F" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup result p99", - "refId": "G" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup input p99", - "refId": "H" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "p99 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 7 - }, - "id": 98, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_min\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main min tries", - "refId": "H" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p50 \"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main median tries", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p999\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main p999 tries", - "refId": "B" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_max\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "main max tries", - "refId": "C" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_min\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup min tries", - "refId": "D" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p50 \"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup median tries", - "refId": "E" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p999\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup p999 tries", - "refId": "F" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_max\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "rampup max tries", - "refId": "G" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "op tries distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 7 - }, - "id": 101, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_storage_load_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Storage Load / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "decimals": null, - "description": "Read/Write bytes/sec", - "fill": 4, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 13 - }, - "height": "", - "id": 105, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "sort": "current", - "sortDesc": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "minSpan": 4, - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "alias": "/.*Read.*/", - "transform": "negative-Y" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(collectd_disk_disk_octets_read_total{disk=~\".*\\\\d+\"}[$rate])", - "format": "time_series", - "hide": true, - "instant": false, - "intervalFactor": 1, - "legendFormat": "{{instance}} {{disk}} - Reads", - "refId": "A", - "step": 240 - }, - { - "expr": "irate(collectd_disk_disk_octets_write_total{disk=~\".*\\\\d+\"}[$rate])", - "format": "time_series", - "hide": true, - "instant": false, - "intervalFactor": 1, - "legendFormat": "{{instance}} {{disk}} - Writes", - "refId": "B" - }, - { - "expr": "irate(collectd_disk_disk_octets_read_total{disk=~\".*md0\"}[$rate])", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "legendFormat": "{{instance}} {{disk}} - Reads", - "refId": "C", - "step": 240 - }, - { - "expr": "irate(collectd_disk_disk_octets_write_total{disk=~\".*md0\"}[$rate])", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}} {{disk}} - Write", - "refId": "D", - "step": 240 - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Disk Rate / sec", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "Bps", - "label": "IO read (-) / write (+)", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": { - "Recv_bytes_eth2": "#7EB26D", - "Recv_bytes_lo": "#0A50A1", - "Recv_drop_eth2": "#6ED0E0", - "Recv_drop_lo": "#E0F9D7", - "Recv_errs_eth2": "#BF1B00", - "Recv_errs_lo": "#CCA300", - "Trans_bytes_eth2": "#7EB26D", - "Trans_bytes_lo": "#0A50A1", - "Trans_drop_eth2": "#6ED0E0", - "Trans_drop_lo": "#E0F9D7", - "Trans_errs_eth2": "#BF1B00", - "Trans_errs_lo": "#CCA300", - "recv_bytes_lo": "#0A50A1", - "recv_drop_eth0": "#99440A", - "recv_drop_lo": "#967302", - "recv_errs_eth0": "#BF1B00", - "recv_errs_lo": "#890F02", - "trans_bytes_eth0": "#7EB26D", - "trans_bytes_lo": "#0A50A1", - "trans_drop_eth0": "#99440A", - "trans_drop_lo": "#967302", - "trans_errs_eth0": "#BF1B00", - "trans_errs_lo": "#890F02" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "Basic network info per interface", - "fill": 4, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 13 - }, - "id": 103, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "alias": "/.*read.*/", - "transform": "negative-Y" - }, - { - "alias": "/.*lo.*/", - "color": "#7EB26D" - }, - { - "alias": "/.*eth0.*/" - }, - { - "alias": "/.*eth1.*/", - "color": "#6ED0E0" - }, - { - "alias": "/.*eth2.*/", - "color": "#EF843C" - }, - { - "alias": "/.*eth3.*/", - "color": "#E24D42" - }, - { - "alias": "/.*eth4.*/", - "color": "#1F78C1" - }, - { - "alias": "/.*eth5.*/", - "color": "#BA43A9" - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(collectd_interface_if_octets_rx_total[1m]) * 8", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}} {{interface}} read ", - "refId": "A", - "step": 240 - }, - { - "expr": "irate(collectd_interface_if_octets_tx_total[1m]) * 8", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{instance}} {{interface}} write", - "refId": "B", - "step": 240 - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Network Traffic Basic", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": false, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "bps", - "label": "Read (-) / Write (+)", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "pps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 13 - }, - "id": 113, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_cycles_responsetime_count\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "response count", - "refId": "A" - }, - { - "expr": "{__name__=~\"nosqlbench__workloads_.+_cycles_servicetime_count\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "response count", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Cycle Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 19 - }, - "id": 4, - "panels": [], - "title": "Cluster Overview", - "type": "row" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "#d44a3a", - "rgba(237, 129, 40, 0.89)", - "#7eb26d" - ], - "datasource": "prometheus", - "decimals": null, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 0, - "y": 20 - }, - "id": 8, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false - }, - "tableColumn": "", - "targets": [ - { - "expr": "count(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"} >= 0) or vector(0)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "1,1,1999", - "title": "Nodes Up", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 2, - "y": 20 - }, - "id": 9, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false - }, - "tableColumn": "", - "targets": [ - { - "expr": "count(absent(sum(rate(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[2m])))) OR vector(0)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "1,1,1000", - "title": "Nodes Down", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "decimals": 0, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 4, - "y": 20 - }, - "id": 16, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true - }, - "tableColumn": "", - "targets": [ - { - "expr": "sum(irate(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "", - "title": "Compactions / $rate", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 6, - "y": 20 - }, - "id": 10, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true - }, - "tableColumn": "", - "targets": [ - { - "expr": "sum(irate(dse_client_request_latency_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "", - "title": "Requests / $rate", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "decimals": 0, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 9, - "y": 20 - }, - "id": 17, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true - }, - "tableColumn": "", - "targets": [ - { - "expr": "sum(irate(dse_table_dropped_mutations_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "10,100,100000", - "title": "Dropped Messages / $rate", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "decimals": 0, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 12, - "y": 20 - }, - "id": 18, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true - }, - "tableColumn": "", - "targets": [ - { - "expr": "sum(dse_client_connected_native_clients{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"})", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "10,100,100000", - "title": "Clients Connected", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "decimals": 0, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 15, - "y": 20 - }, - "id": 19, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true - }, - "tableColumn": "", - "targets": [ - { - "expr": "sum(irate(dse_client_request_timeouts_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "10,100,100000", - "title": "Client Timeouts / $rate", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "decimals": 0, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 18, - "y": 20 - }, - "id": 20, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true - }, - "tableColumn": "", - "targets": [ - { - "expr": "sum(dse_storage_hints_on_disk_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"})", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "10,100,100000", - "title": "Total Hints", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "prometheus", - "decimals": 0, - "format": "decbytes", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 21, - "y": 20 - }, - "id": 44, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true - }, - "tableColumn": "", - "targets": [ - { - "expr": "sum(dse_table_live_disk_space_used_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"})", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "", - "title": "Live Data Size", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 23 - }, - "id": 14, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 18 - }, - "id": 6, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "expr": "sum(irate(dse_client_request_latency_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by, request_type)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}:{{request_type}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Requests Served / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 18 - }, - "id": 45, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_client_connected_native_clients{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Clients Connected / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 18 - }, - "id": 46, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "expr": "sum(irate(dse_client_request_timeouts_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Client Timeouts / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 27 - }, - "id": 51, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator Read Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 27 - }, - "id": 11, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator Write Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 27 - }, - "id": 21, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator Range Read Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 36 - }, - "id": 22, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator CAS Read Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 36 - }, - "id": 48, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator CAS Read Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 36 - }, - "id": 47, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator View Write Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Coordinator Metrics (no keyspace/table filters apply)", - "type": "row" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 24 - }, - "id": 43, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 19 - }, - "id": 15, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator Table Read Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 19 - }, - "id": 49, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Local Table Read Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 19 - }, - "id": 23, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Local Table Write Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 28 - }, - "id": 52, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Coordinator Table Range Scan Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 28 - }, - "id": 53, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P50 ", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.75, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P75", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P90", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P95", - "refId": "D" - }, - { - "expr": "histogram_quantile(0.99, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P99", - "refId": "E" - }, - { - "expr": "histogram_quantile(0.999, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "$by:{{$by}} P999", - "refId": "F" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Local Table Range Scan Latency / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 28 - }, - "id": 50, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "alias": "/.*Flushes/", - "bars": true, - "lines": false, - "yaxis": 2 - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_table_memtable_off_heap_size{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}} : Off Heap", - "refId": "A" - }, - { - "expr": "sum(dse_table_memtable_on_heap_size{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}} : On Heap", - "refId": "B" - }, - { - "expr": "sum(dse_table_memtable_live_data_size{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}} : Data Size", - "refId": "C" - }, - { - "expr": "sum(idelta(dse_table_memtable_switch_count_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)", - "format": "time_series", - "instant": false, - "intervalFactor": 2, - "legendFormat": "{{$by}} : Flushes", - "refId": "D" - }, - { - "expr": "sum(idelta(dse_table_pending_flushes_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}} : Pending Flushes", - "refId": "E" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Memtable Space $keyspace.$table / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "decimals": 0, - "format": "short", - "label": "Flushes", - "logBase": 1, - "max": null, - "min": "0", - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 37 - }, - "id": 88, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_table_ss_tables_per_read_histogram{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\", quantile=~\".\\\\d+\"}) by (quantile, instance) * 1000", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "Node {{instance}} P{{quantile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "SSTables Per Read / Node", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 37 - }, - "id": 89, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_table_tombstone_scanned_histogram{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\", quantile=~\".\\\\d+\"}) by (quantile, instance) * 1000", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}} : P{{quantile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Tombstones Scanned / Node", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "decimals": null, - "format": "short", - "label": "foo", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Table Metrics", - "type": "row" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 25 - }, - "id": 25, - "panels": [], - "title": "Storage Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 26 - }, - "id": 54, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_table_total_disk_space_used_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Live Disk Space Used / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 26 - }, - "id": 55, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_storage_load_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Storage Load / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 26 - }, - "id": 57, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(irate(dse_storage_total_hints_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Total Hints / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 26 - }, - "id": 58, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_storage_hints_on_disk_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Hints on Disk / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 33 - }, - "id": 39, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 8, - "x": 0, - "y": 21 - }, - "id": 59, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "avg(dse_cql_prepared_statements_ratio{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Prepared Statement Ratio / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percentunit", - "label": null, - "logBase": 1, - "max": "1", - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 8, - "x": 8, - "y": 21 - }, - "id": 60, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_cql_prepared_statements_count{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Prepared Statements / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 8, - "x": 16, - "y": 21 - }, - "id": 61, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_cql_prepared_statements_executed_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{$by}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Executed Prepared Statements / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "CQL Metrics", - "type": "row" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 34 - }, - "id": 41, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 22 - }, - "id": 62, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "dse_jvm_memory_pool_used{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.memory.pools.g1_eden_space.used\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ instance }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "JVM G1 Eden Space Used / node", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 22 - }, - "id": 63, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "dse_jvm_memory_pool_used{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.memory.pools.g1_old_gen.used\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ instance }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "JVM G1 Old Gen Used / node", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 22 - }, - "id": 64, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "dse_jvm_memory_pool_used{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.memory.pools.g1_survivor_space.used\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ instance }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "JVM G1 Survivor Space / node", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 22 - }, - "id": 65, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "increase(dse_jvm_gc_time{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_young_generation.time\"}[$rate])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ instance }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "JVM GC Young Gen / node / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 8, - "x": 0, - "y": 28 - }, - "id": 68, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "increase(dse_jvm_gc_count{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_young_generation.count\"}[$rate])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ instance }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "JVM GC Old Gen Count / node / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 8, - "x": 8, - "y": 28 - }, - "id": 66, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "increase(dse_jvm_gc_time{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_old_generation.time\"}[$rate])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ instance }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "JVM GC Old Gen / node / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 6, - "w": 8, - "x": 16, - "y": 28 - }, - "id": 67, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "increase(dse_jvm_gc_count{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_old_generation.count\"}[$rate])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ instance }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "JVM GC Old Gen Count / node / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "JVM Metrics", - "type": "row" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 35 - }, - "id": 31, - "panels": [], - "title": "Compaction Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 36 - }, - "id": 69, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(dse_compaction_pending_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Pending Compactions / node / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 36 - }, - "id": 70, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Completed Compactions / node / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 36 - }, - "id": 71, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_compaction_bytes_compacted_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Compacted Bytes / node / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 45 - }, - "id": 29, - "panels": [], - "title": "Hint Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 46 - }, - "id": 72, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_hints_hint_delays_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Hint Delays / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 46 - }, - "id": 73, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_hints_hints_succeeded_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Hints Succeeded / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 46 - }, - "id": 74, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_hints_hints_failed_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Hints Failed / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 55 - }, - "id": 37, - "panels": [], - "title": "NodeSync Metrics", - "type": "row" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 56 - }, - "id": 35, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 16 - }, - "id": 77, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_table_repair_jobs_completed_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (table, $by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }} : {{ table }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Repairs Completed / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 16 - }, - "id": 78, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(increase(dse_table_read_repair_requests_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (table, $by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }} : {{ table }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Read Repair Requests / $by / $rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Repair Metrics", - "type": "row" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 57 - }, - "id": 33, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 17 - }, - "id": 79, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(idelta(dse_streaming_incoming_bytes_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Streaming Incoming Bytes / $by / sec", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 17 - }, - "id": 80, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(idelta(dse_streaming_outgoing_bytes_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Streaming Outgoing Bytes / $by / sec", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Streaming Metrics", - "type": "row" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 58 - }, - "id": 27, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 18 - }, - "id": 81, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "avg(dse_cache_hit_rate{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", cache_name=\"chunk_cache\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Chunk Cache Hit Rate / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percentunit", - "label": null, - "logBase": 1, - "max": "1", - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 18 - }, - "id": 82, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "avg(dse_cache_hit_rate{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", cache_name=\"counter_cache\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Counter Cache Hit Rate / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percentunit", - "label": null, - "logBase": 1, - "max": "1", - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 18 - }, - "id": 83, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "avg(dse_cache_hit_rate{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", cache_name=\"key_cache\"}) by ($by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ $by }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Key Cache Hit Rate / $by", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percentunit", - "label": null, - "logBase": 1, - "max": "1", - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Cache Metrics", - "type": "row" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 59 - }, - "id": 85, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "gridPos": { - "h": 10, - "w": 24, - "x": 0, - "y": 29 - }, - "id": 87, - "legend": { - "avg": false, - "current": false, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(rate(dse_thread_pools_completed_tasks{pool_name=~\"tpc_.*\"}[$rate])) by (pool_name, $by)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{pool_name}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "TPC Task Types", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ops", - "label": null, - "logBase": 10, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "TPC Metrics", - "type": "row" - } - ], - "refresh": "30s", - "schemaVersion": 16, - "style": "dark", - "tags": [ - "dse" - ], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": false, - "text": "Node", - "value": "instance" - }, - "hide": 0, - "includeAll": false, - "label": "Group By", - "multi": false, - "name": "by", - "options": [ - { - "selected": false, - "text": "Cluster", - "value": "cluster" - }, - { - "selected": false, - "text": "DC", - "value": "dc" - }, - { - "selected": false, - "text": "Rack", - "value": "rack" - }, - { - "selected": true, - "text": "Node", - "value": "instance" - } - ], - "query": "cluster,dc,rack,instance", - "skipUrlSync": false, - "type": "custom" - }, - { - "allValue": null, - "current": { - "selected": true, - "text": "1m", - "value": "1m" - }, - "hide": 0, - "includeAll": false, - "label": "Rate", - "multi": false, - "name": "rate", - "options": [ - { - "selected": true, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - }, - { - "selected": false, - "text": "10m", - "value": "10m" - }, - { - "selected": false, - "text": "30m", - "value": "30m" - }, - { - "selected": false, - "text": "1h", - "value": "1h" - }, - { - "selected": false, - "text": "6h", - "value": "6h" - }, - { - "selected": false, - "text": "12h", - "value": "12h" - } - ], - "query": "1m,5m,10m,30m,1h,6h,12h", - "skipUrlSync": false, - "type": "custom" - }, - { - "allValue": null, - "current": {}, - "datasource": "prometheus", - "hide": 0, - "includeAll": false, - "label": "Cluster", - "multi": false, - "name": "cluster", - "options": [], - "query": "label_values(collectd_cpu_total, cluster)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": ".*", - "current": {}, - "datasource": "prometheus", - "hide": 0, - "includeAll": true, - "label": "DataCenter", - "multi": false, - "name": "dc", - "options": [], - "query": "label_values(collectd_cpu_total{cluster=~\"$cluster\"}, dc)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": ".*", - "current": {}, - "datasource": "prometheus", - "hide": 0, - "includeAll": true, - "label": "Rack", - "multi": false, - "name": "rack", - "options": [], - "query": "label_values(collectd_cpu_total{cluster=~\"$cluster\", dc=~\"$dc\"}, rack)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": ".*", - "current": {}, - "datasource": "prometheus", - "hide": 0, - "includeAll": true, - "label": "Keyspace", - "multi": false, - "name": "keyspace", - "options": [], - "query": "label_values(dse_table_read_latency{cluster=~\"$cluster\"}, keyspace)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": ".*", - "current": {}, - "datasource": "prometheus", - "hide": 0, - "includeAll": true, - "label": "Table", - "multi": false, - "name": "table", - "options": [], - "query": "label_values(dse_table_read_latency{keyspace=~\"$keyspace\"}, table)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": true - } - ] - }, - "time": { - "from": "now-30m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "NoSQLBench (deprecated)", - "id": null, - "uid": null, - "version": 1 - } -} diff --git a/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json new file mode 100644 index 000000000..4e58484f8 --- /dev/null +++ b/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json @@ -0,0 +1,1230 @@ +{ + "dashboard": { + "annotations": { + "list": [ + { + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "#C0D8FF", + "limit": 100, + "name": "Annotation Focus", + "showIn": 0, + "tags": [ + "appname:nosqlbench", + "layer:$Layer" + ], + "type": "tags" + }, + { + "datasource": "-- Grafana --", + "enable": false, + "hide": false, + "iconColor": "#E0B400", + "limit": 2000, + "matchAny": true, + "name": "All Annotations", + "showIn": 0, + "tags": [ + "appname", + "layer:$Layer" + ], + "type": "tags" + }, + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Basic Dashboard with Annotations for NoSQLBench 4", + "editable": true, + "gnetId": null, + "graphTooltip": 1, + "id": null, + "links": [], + "panels": [ + { + "collapsed": true, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 115, + "panels": [ + { + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 128, + "options": { + "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 3 + }, + "id": 117, + "options": { + "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Ops and Successful Ops", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 3 + }, + "id": 118, + "options": { + "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Error Counts", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 3 + }, + "id": 119, + "options": { + "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Distribution", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 3 + }, + "id": 120, + "options": { + "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Op Tries Distribution", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 121, + "options": { + "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "P75 NB Internals", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 6 + }, + "id": 122, + "options": { + "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "P99 NB Internals", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 6 + }, + "id": 123, + "options": { + "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Range", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 6 + }, + "id": 124, + "options": { + "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Cycle Count", + "transparent": true, + "type": "text" + } + ], + "title": "NoSQLBench Metrics Guide", + "type": "row" + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 91, + "panels": [], + "title": "NoSQLBench Metrics", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 2 + }, + "hiddenSeries": false, + "id": 95, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result{type=\"avg_rate\",avg_of=\"1m\"}", + "interval": "", + "legendFormat": "{{alias}}-allops", + "refId": "C" + }, + { + "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\"}", + "interval": "", + "legendFormat": "{{alias}}-okops", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ops and Successful Ops", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 2 + }, + "hiddenSeries": false, + "id": 93, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"errorcounts.*\"}", + "interval": "", + "legendFormat": "{{alias}}-{{error}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Error Counts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 2 + }, + "hiddenSeries": false, + "id": 97, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\"}", + "hide": false, + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "B" + }, + { + "expr": "cycles_servicetime{type=\"pctile\"}", + "hide": true, + "interval": "", + "legendFormat": "{{alias}}-{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 2 + }, + "hiddenSeries": false, + "id": 98, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "tries{type=\"pctile\"}", + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "op tries distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 8 + }, + "hiddenSeries": false, + "id": 99, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\"}", + "interval": "", + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p75 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "hiddenSeries": false, + "id": 111, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p99 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 8 + }, + "hiddenSeries": false, + "id": 109, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\",pctile=\"0\"}", + "interval": "", + "legendFormat": "{{alias}}-min", + "refId": "B" + }, + { + "expr": "result_success{type=\"pctile\",pctile=\"100\"}", + "interval": "", + "legendFormat": "{{alias}}-max", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time range", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 8 + }, + "hiddenSeries": false, + "id": 113, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "cycles_servicetime{type=\"counter\"}", + "interval": "", + "legendFormat": "{{alias}}-count", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Cycle Count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 26, + "style": "dark", + "tags": [ + "NoSQLBench" + ], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "CLI", + "value": "CLI" + }, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Annotation Filter", + "multi": false, + "name": "Layer", + "options": [ + { + "selected": false, + "text": "NONE", + "value": "NONE" + }, + { + "selected": false, + "text": "CLI", + "value": "CLI" + }, + { + "selected": false, + "text": "Scenario", + "value": "Scenario" + }, + { + "selected": false, + "text": "Script", + "value": "Script" + }, + { + "selected": true, + "text": "Activity", + "value": "Activity" + }, + { + "selected": false, + "text": "Motor", + "value": "Motor" + } + ], + "query": "NONE,CLI,Scenario,Script,Activity,Motor", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "NB4 Dashboard", + "uid": "aIIX1f6Wz", + "version": 6 + } +} diff --git a/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json index 8460ab572..22989c17e 100644 --- a/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json +++ b/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json @@ -1,1105 +1,1135 @@ { "dashboard": { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "id": null, - "links": [], - "panels": [ - { - "collapsed": false, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 115, - "panels": [], - "title": "NoSQLBench Metrics Guide", - "type": "row" - }, - { - "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", - "datasource": null, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 128, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "", - "transparent": true, - "type": "text" - }, - { - "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 3 - }, - "id": 117, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Ops and Successful Ops", - "transparent": true, - "type": "text" - }, - { - "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 3 - }, - "id": 118, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Error Counts", - "transparent": true, - "type": "text" - }, - { - "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 3 - }, - "id": 119, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Distribution", - "transparent": true, - "type": "text" - }, - { - "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 3 - }, - "id": 120, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Op Tries Distribution", - "transparent": true, - "type": "text" - }, - { - "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 6 - }, - "id": 121, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "P75 NB Internals", - "transparent": true, - "type": "text" - }, - { - "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 6 - }, - "id": 122, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "P99 NB Internals", - "transparent": true, - "type": "text" - }, - { - "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 6 - }, - "id": 123, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Range", - "transparent": true, - "type": "text" - }, - { - "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 6 - }, - "id": 124, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Cycle Count", - "transparent": true, - "type": "text" - }, - { - "collapsed": false, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 9 - }, - "id": 91, - "panels": [], - "title": "NoSQLBench Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 10 - }, - "hiddenSeries": false, - "id": 95, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ + "annotations": { + "list": [ { - "expr": "result{type=\"avg_rate\",avg_of=\"1m\"}", - "interval": "", - "legendFormat": "{{alias}}-allops", - "refId": "C" - }, - { - "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\"}", - "interval": "", - "legendFormat": "{{alias}}-okops", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ops and Successful Ops", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 10 - }, - "hiddenSeries": false, - "id": 93, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"errorcounts.*\"}", - "interval": "", - "legendFormat": "{{alias}}-{{error}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Error Counts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 10 - }, - "hiddenSeries": false, - "id": 97, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\"}", - "hide": false, - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "B" - }, - { - "expr": "cycles_servicetime{type=\"pctile\"}", + "datasource": "-- Grafana --", + "enable": true, "hide": true, - "interval": "", - "legendFormat": "{{alias}}-{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true + "iconColor": "#C0D8FF", + "limit": 100, + "name": "Annotation Focus", + "showIn": 0, + "tags": [ + "appname:nosqlbench", + "layer:$Layer" + ], + "type": "tags" }, { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 10 - }, - "hiddenSeries": false, - "id": 98, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "tries{type=\"pctile\"}", - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "op tries distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 16 - }, - "hiddenSeries": false, - "id": 99, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\"}", - "interval": "", - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p75 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 16 - }, - "hiddenSeries": false, - "id": 111, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\"}", - "format": "time_series", + "datasource": "-- Grafana --", + "enable": false, "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p99 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true + "iconColor": "#E0B400", + "limit": 2000, + "matchAny": true, + "name": "All Annotations", + "showIn": 0, + "tags": [ + "appname", + "layer:$Layer" + ], + "type": "tags" }, { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + ] }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} + "description": "Dashboard for NoSQLBench 3", + "editable": true, + "gnetId": null, + "graphTooltip": 1, + "id": null, + "links": [], + "panels": [ + { + "collapsed": true, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 }, - "overrides": [] + "id": 115, + "panels": [], + "title": "NoSQLBench Metrics Guide", + "type": "row" }, - "fill": 2, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 16 - }, - "hiddenSeries": false, - "id": 109, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\",pctile=\"0\"}", - "interval": "", - "legendFormat": "{{alias}}-min", - "refId": "B" + { + "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] }, - { - "expr": "result_success{type=\"pctile\",pctile=\"100\"}", - "interval": "", - "legendFormat": "{{alias}}-max", - "refId": "A" + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 128, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "", + "transparent": true, + "type": "text" + }, + { + "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 3 + }, + "id": 117, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "Ops and Successful Ops", + "transparent": true, + "type": "text" + }, + { + "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 3 + }, + "id": 118, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "Error Counts", + "transparent": true, + "type": "text" + }, + { + "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 3 + }, + "id": 119, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Distribution", + "transparent": true, + "type": "text" + }, + { + "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 3 + }, + "id": 120, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "Op Tries Distribution", + "transparent": true, + "type": "text" + }, + { + "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 121, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "P75 NB Internals", + "transparent": true, + "type": "text" + }, + { + "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 6 + }, + "id": 122, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "P99 NB Internals", + "transparent": true, + "type": "text" + }, + { + "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 6 + }, + "id": 123, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Range", + "transparent": true, + "type": "text" + }, + { + "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 6 + }, + "id": 124, + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "Cycle Count", + "transparent": true, + "type": "text" + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 91, + "panels": [], + "title": "NoSQLBench Metrics", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 10 + }, + "hiddenSeries": false, + "id": 95, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result{type=\"avg_rate\",avg_of=\"1m\"}", + "interval": "", + "legendFormat": "{{alias}}-allops", + "refId": "C" + }, + { + "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\"}", + "interval": "", + "legendFormat": "{{alias}}-okops", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ops and Successful Ops", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time range", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 10 + }, + "hiddenSeries": false, + "id": 93, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"errorcounts.*\"}", + "interval": "", + "legendFormat": "{{alias}}-{{error}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Error Counts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 10 + }, + "hiddenSeries": false, + "id": 97, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\"}", + "hide": false, + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "B" + }, + { + "expr": "cycles_servicetime{type=\"pctile\"}", + "hide": true, + "interval": "", + "legendFormat": "{{alias}}-{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 10 + }, + "hiddenSeries": false, + "id": 98, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "tries{type=\"pctile\"}", + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "op tries distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 16 + }, + "hiddenSeries": false, + "id": 99, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\"}", + "interval": "", + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p75 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 16 + }, + "hiddenSeries": false, + "id": 111, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p99 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 16 + }, + "hiddenSeries": false, + "id": 109, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\",pctile=\"0\"}", + "interval": "", + "legendFormat": "{{alias}}-min", + "refId": "B" + }, + { + "expr": "result_success{type=\"pctile\",pctile=\"100\"}", + "interval": "", + "legendFormat": "{{alias}}-max", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time range", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 16 + }, + "hiddenSeries": false, + "id": 113, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "cycles_servicetime{type=\"counter\"}", + "interval": "", + "legendFormat": "{{alias}}-count", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Cycle Count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null } - ], - "yaxis": { - "align": false, - "alignLevel": null } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 16 - }, - "hiddenSeries": false, - "id": 113, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "cycles_servicetime{type=\"counter\"}", - "interval": "", - "legendFormat": "{{alias}}-count", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cycle Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 25, - "style": "dark", - "tags": [ - "dse" - ], - "templating": { - "list": [] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "NoSQLBench", - "uid": "aIIX1f6Wz", - "version": 3 -} + "refresh": false, + "schemaVersion": 25, + "style": "dark", + "tags": [ + "dse" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "NoSQLBench", + "uid": "aIIX1f6Wz", + "version": 3 + } } From 87f895e0691941bfbe8ab17179591098fbdb708e Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 01:55:11 -0600 Subject: [PATCH 095/164] nb4 rc build --- RELEASENOTES.md | 6 ++++-- .../io/nosqlbench/nb/api/labels/Labeled.java | 7 +++++++ .../nb/api/labels/MutableLabels.java | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/labels/Labeled.java create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/labels/MutableLabels.java diff --git a/RELEASENOTES.md b/RELEASENOTES.md index dc5b172e3..bf5af52e2 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,7 @@ - -- 3d2ff55f (main) auto create apikey +- e4f325c4 (origin/main, main) disable test which is present in feature branch +- 78463838 make main brain build cleanly again +- 608d1f72 Update DOWNLOADS.md +- 3d2ff55f auto create apikey - cfa92eab package organization - 2ab118f4 package organization - a23808b3 update appimage build script for j15 diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/labels/Labeled.java b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/Labeled.java new file mode 100644 index 000000000..90818152c --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/Labeled.java @@ -0,0 +1,7 @@ +package io.nosqlbench.nb.api.labels; + +import java.util.Map; + +public interface Labeled { + public Map getLabels(); +} diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/labels/MutableLabels.java b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/MutableLabels.java new file mode 100644 index 000000000..d26ed0c0c --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/MutableLabels.java @@ -0,0 +1,19 @@ +package io.nosqlbench.nb.api.labels; + +import java.util.HashMap; +import java.util.Map; + +public class MutableLabels extends HashMap implements Labeled { + + public static MutableLabels fromMaps(Map entries) { + MutableLabels mutableLabels = new MutableLabels(); + mutableLabels.putAll(entries); + return mutableLabels; + } + + + @Override + public Map getLabels() { + return this; + } +} From 494becd4868813aa67fd1de3453fa397870e5c11 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Mon, 7 Dec 2020 10:30:58 +0000 Subject: [PATCH 096/164] [maven-release-plugin] prepare release nosqlbench-4.0.1 --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index cf517242a..701093eaa 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.0.1-SNAPSHOT + 4.0.1 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 0d0cce552..0ebd29972 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 6ab08544e..0d8a4eda8 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index b11049d44..6bb15feae 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 2bad65e0e..a60edbef0 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-http/pom.xml b/driver-http/pom.xml index f336d7900..2ad463093 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 1d94240ff..a04a7519b 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index e44edcb54..0a125137d 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-stdout - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index b71dbe3f5..35005e9ad 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index fbdba5650..ce7ae4b0e 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 604bdd10d..3256e675f 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-stdout - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index c5ae29e21..2b0a42507 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 17de21e56..2c2105b39 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench virtdata-userlibs - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 378732418..2b524a984 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench nb-annotations - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench virtdata-userlibs - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index aa81fa9f0..f5260f443 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench engine-docker - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 7d0943820..44fbaac69 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 6af74b22b..8db45fb35 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench drivers-api - 4.0.1-SNAPSHOT + 4.0.1 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.0.1-SNAPSHOT + 4.0.1 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 178702733..bb6c5fc54 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 2d86bf2d3..f84681886 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 4bd7deb56..0760081de 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 5be95850c..7d590945b 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index d46a7c4f6..4ab31aa27 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.0.1-SNAPSHOT + 4.0.1 pom @@ -92,7 +92,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.0.1 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 8cc915f9e..e6dd128d5 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 9eb392cbc..14a96049d 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/nb/pom.xml b/nb/pom.xml index 6830ad4b4..bd40bd1b1 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench engine-cli - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench engine-docs - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench engine-core - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench engine-extensions - 4.0.1-SNAPSHOT + 4.0.1 @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-kafka - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-stdout - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-diag - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-tcp - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-http - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-jmx - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-dsegraph-shaded - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-cql-shaded - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-cqlverify - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench driver-mongodb - 4.0.1-SNAPSHOT + 4.0.1 @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/pom.xml b/pom.xml index f1fe1927d..b63f3e85d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.0.1 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index ea8949990..c408f1999 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 nb-api io.nosqlbench virtdata-lang - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 6313e02dd..c25ea007e 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 1b826c0f7..31db599d1 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 42346d9be..b0d4dd1c1 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench virtdata-lib-basics - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index edc0089b4..a2ffb84cd 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench virtdata-lib-basics - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 3e80ada57..306950121 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 7dc21a0bb..d0d397df8 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.0.1-SNAPSHOT + 4.0.1 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 4d205c4a9..6dbb66b3c 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench virtdata-lib-realer - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench virtdata-api - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench virtdata-lib-random - 4.0.1-SNAPSHOT + 4.0.1 io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 virtdata-lib-basics io.nosqlbench - 4.0.1-SNAPSHOT + 4.0.1 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.0.1-SNAPSHOT + 4.0.1 From 98beb9ed370a7fd8ace1aef0fdbb2ed3b004d409 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Mon, 7 Dec 2020 10:31:05 +0000 Subject: [PATCH 097/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 701093eaa..fee955054 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.0.1 + 4.0.2-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 0ebd29972..9c8b6608a 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 0d8a4eda8..c6e966a26 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 6bb15feae..048ef2c7b 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index a60edbef0..afdb5776e 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 2ad463093..18e157ad5 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index a04a7519b..1beda4170 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 0a125137d..a55b0971c 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-stdout - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 35005e9ad..77f49c46e 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index ce7ae4b0e..e225acb49 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 3256e675f..a43f0dd6f 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-stdout - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 2b0a42507..98215a9c2 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 2c2105b39..f63682b9d 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 2b524a984..beea8a7e1 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench nb-annotations - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index f5260f443..1cee2faed 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench engine-docker - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 44fbaac69..3b83838cc 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 8db45fb35..787577544 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench drivers-api - 4.0.1 + 4.0.2-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.0.1 + 4.0.2-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index bb6c5fc54..7d4bf67a6 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index f84681886..146886192 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 0760081de..6028257b9 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 7d590945b..2b2ee2ec8 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 4ab31aa27..8dfc49c8d 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.0.1 + 4.0.2-SNAPSHOT pom @@ -92,7 +92,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-4.0.1 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index e6dd128d5..b8dd56050 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 14a96049d..6bf769781 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index bd40bd1b1..0df2b392d 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench engine-cli - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench engine-docs - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench engine-core - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench engine-extensions - 4.0.1 + 4.0.2-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-kafka - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-stdout - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-diag - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-tcp - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-http - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-jmx - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-cql-shaded - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-cqlverify - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench driver-mongodb - 4.0.1 + 4.0.2-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/pom.xml b/pom.xml index b63f3e85d..410cb8a3a 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-4.0.1 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index c408f1999..f42e96a01 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index c25ea007e..3e50176d3 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 31db599d1..d17408e13 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index b0d4dd1c1..c6df6b7f1 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index a2ffb84cd..36dc325b2 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 306950121..fbf4ac8d1 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index d0d397df8..0cdbc62d9 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.0.1 + 4.0.2-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 6dbb66b3c..61ff4feb9 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench virtdata-lib-realer - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench virtdata-api - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench virtdata-lib-random - 4.0.1 + 4.0.2-SNAPSHOT io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT virtdata-lib-basics io.nosqlbench - 4.0.1 + 4.0.2-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.0.1 + 4.0.2-SNAPSHOT From 70f22ad8992706241e92bb3c677d4da59eb2a5a6 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:36:22 -0600 Subject: [PATCH 098/164] support J14 or J15 in appimage build --- nb/build-bin.sh | 72 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/nb/build-bin.sh b/nb/build-bin.sh index 3f8fce4d3..4689448d2 100755 --- a/nb/build-bin.sh +++ b/nb/build-bin.sh @@ -29,28 +29,60 @@ fi rsync -av appimage/skel/ "${APPDIR}/" cp target/nb.jar "${APPDIR}/usr/bin/nb.jar" - -if [ ! -d "cache/jre15" ] -then - printf "getting jre once into cache/jre15\n"; - mkdir -p cache - (cd cache && ( - if [ "$BUILD_OPENJ9" = "true" ] - then - wget -c wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz - tar -xf OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz - mv jdk-15.0.1+9-jre jre15 - rm OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz - else - wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz - tar xf OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz - mv jdk-15.0.1+9-jre jre15 - fi - )) -fi +JAVA_VERSION="14" mkdir -p "${APPDIR}/usr/bin/jre" -rsync -av cache/jre15/ "${APPDIR}/usr/bin/jre/" + +if [ "$JAVA_VERSION" == "15" ] +then + if [ ! -d "cache/jre15" ] ; then + printf "getting jre once into cache/jre15\n"; + mkdir -p cache + (cd cache && ( + if [ "$BUILD_OPENJ9" = "true" ] + then + wget -c wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + tar -xf OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + mv jdk-15.0.1+9-jre jre15 + rm OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + else + wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz + tar xf OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz + mv jdk-15.0.1+9-jre jre15 + fi + )) + fi + rsync -av cache/jre15/ "${APPDIR}/usr/bin/jre/" +# Java 14 should run binaries targeted to Java 11 bytecode +elif [ "$JAVA_VERSION" == "14" ] ; then + if [ ! -d "cache/jre14" ] ; then + printf "getting jre once into cache/jre14\n"; + mkdir -p cache + (cd cache && ( + if [ "$BUILD_OPENJ9" = "true" ] + then + wget -c https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk14u-2020-04-27-07-27/OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz + tar xf OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz + mv jdk-14.0.1+7-jre jre14 + rm OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz + else + wget -c https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk14u-2020-04-27-07-27/OpenJDK14U-jre_x64_linux_hotspot_2020-04-27-07-27.tar.gz + tar xf OpenJDK14U-jre_x64_linux_hotspot_2020-04-27-07-27.tar.gz + mv jdk-14.0.1+7-jre jre14 + fi + )) + fi + rsync -av cache/jre14/ "${APPDIR}/usr/bin/jre/" +else + printf "Unknown java version indicated in $0" + exit 2 + # wget -c https://github.com/AdoptOpenJDK/openjdk12-binaries/releases/download/jdk-12.0.2%2B10/OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz + # tar xf OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz + # mv jdk-12.0.2+10-jre jre + # rm OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz +fi + + if [ ! -f "${APPDIR}/AppRun" ] then From d089ff245009603688729da435bdd5c7586a8f4a Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:36:45 -0600 Subject: [PATCH 099/164] document Java version references in project --- devdocs/java_versions.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 devdocs/java_versions.md diff --git a/devdocs/java_versions.md b/devdocs/java_versions.md new file mode 100644 index 000000000..538a2b734 --- /dev/null +++ b/devdocs/java_versions.md @@ -0,0 +1,18 @@ +# Java Version Updates + +This is a list of all the places that the Java version is referenced in +the NoSQLBench project. If you change versions or need to do +version-specific troubleshooting, this list will help. + +- In the Dockerfile, in the parent image "FROM" tag. + [here](../Dockerfile) +- In the Maven pom files, under `...`, `... + `, `...` + [here](../mvn-defaults/pom.xml) +- In some cases, a Maven variable '...` is used. + [here](../mvn-defaults/pom.xml) +- In the nb appimage build scripts under nb/build-bin.sh. + [here](../nb/build-bin.sh) +- In the github actions workflows for the Java runtime version + From 2bfe24eb9b787cab69901b7eb072fb5984d04f08 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:37:28 -0600 Subject: [PATCH 100/164] backport auto pre-releases on -rc branches --- scripts/release-perform.sh | 7 ++++++- scripts/release-prepare.sh | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/release-perform.sh b/scripts/release-perform.sh index 131d8e446..2ae4aae49 100755 --- a/scripts/release-perform.sh +++ b/scripts/release-perform.sh @@ -19,10 +19,15 @@ if [[ "${last_release_commit_hash}" = "${GITHUB_SHA}" ]]; then exit 0 fi +PRERELEASE_BRANCH_PATTERN=${PRERELEASE_BRANCH_PATTERN:?PRERELEASE_BRANCH_PATTERN must be provided} # Filter the branch to execute the release on readonly local current_branch=$(git rev-parse --abbrev-ref HEAD) echo "Current branch: ${branch}" -if [[ -n "$RELEASE_BRANCH_NAME" && ! "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then +if [[ -n "$RELEASE_BRANCH_NAME" && "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then + echo "Building for release branch $RELEASE_BRANCH_NAME" +elif [[ -n "${current_branch}" && "${current_branch}" == *"${PRERELEASE_BRANCH_PATTERN}"* ]]; then + echo "Building prerelease for branch $RELEASE_BRANCH_NAME" +else echo "Skipping for ${current_branch} branch" exit 0 fi diff --git a/scripts/release-prepare.sh b/scripts/release-prepare.sh index 033b461a1..ea84d7ea8 100755 --- a/scripts/release-prepare.sh +++ b/scripts/release-prepare.sh @@ -6,12 +6,18 @@ GIT_RELEASE_BOT_NAME=${GIT_RELEASE_BOT_NAME:?GIT_RELEASE_BOT_NAME must be provid GITHUB_SHA=${GITHUB_SHA:?GITHUB_SHA must be provided} GITHUB_REF=${GITHUB_REF:?GITHUB_REF must be provided} RELEASE_BRANCH_NAME=${RELEASE_BRANCH_NAME:?RELEASE_BRANCH_NAME 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 "$RELEASE_BRANCH_NAME" && ! "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then +if [[ -n "$RELEASE_BRANCH_NAME" && "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then + echo "Building for release branch $RELEASE_BRANCH_NAME" +elif [[ -n "${current_branch}" && "${current_branch}" == *"${PRERELEASE_BRANCH_PATTERN}"* ]]; then + echo "Building prerelease for branch $RELEASE_BRANCH_NAME" +else echo "Skipping for ${current_branch} branch" exit 0 fi From daea786c1f9cb1f2d4526fd199aee0db548e2765 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:38:19 -0600 Subject: [PATCH 101/164] leave source and targets at J11 and runtime at J14 for NB3 --- mvn-defaults/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 42b5c62aa..b3acd02d7 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -506,8 +506,8 @@ true - 15 - 15 + 11 + 11 From 8cce0173ff30bb1a0dc8fa9a7ffdad834a9f504c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:41:12 -0600 Subject: [PATCH 102/164] backport auto pre-release on -rc branches --- .github/workflows/release.yml | 49 ++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8757d8361..fdad4a3d0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-18.04 steps: - - name: checkout repo + - name: checkout repo uses: actions/checkout@v2 - name: setup java @@ -87,7 +87,8 @@ jobs: - name: prepare release run: scripts/release-prepare.sh env: - RELEASE_BRANCH_NAME: "main" + RELEASE_BRANCH_NAME: "main" + PRERELEASE_BRANCH_PATTERN: "-rc" GIT_RELEASE_BOT_NAME: "nb-droid" GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} @@ -103,7 +104,7 @@ jobs: - name: bundle integration test logs run: | pwd - ls -l + find nb mkdir -p itlogs/nb cp -R nb/logs itlogs/nb @@ -138,22 +139,34 @@ jobs: mkdir staging cp nb/target/nb.jar nb/target/nb staging - - name: upload artifacts - uses: actions/upload-artifact@v1 - with: - name: binaries - path: staging + - name: upload artifacts + uses: actions/upload-artifact@v1 + with: + name: binaries + path: staging - - name: docker push - uses: docker/build-push-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: nosqlbench/nosqlbench - tags: latest, ${{ env.RELEASE_VERSION }} - tag_with_ref: false + - name: select release type from branch name + run: | + current_branch=$(git rev-parse --abbrev-ref HEAD) + if [[ ${current_branch} == *"-rc"* ]] + then + echo "PRERELEASE=true" >> $GITHUB_ENV + echo "DOCKER_TAGS='"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV + else + echo "PRERELEASE=false" >> $GITHUB_ENV + echo "DOCKER_TAGS='latest,"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV + fi - - name: bundle guidebook + - name: docker push + uses: docker/build-push-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: nosqlbench/nosqlbench + tags: ${{ env.DOCKER_TAGS }} + tag_with_ref: false + + - name: bundle guidebook run: mkdir guidebook && cp -R nb/target/guidebook guidebook - name: upload guidebook @@ -171,7 +184,7 @@ jobs: tag_name: ${{ env.RELEASE_TAGNAME }} release_name: Release ${{ env.RELEASE_TAGNAME }} draft: false - prerelease: false + prerelease: ${{ env.PRERELEASE }} body: ${{ steps.prepare_summary.outputs.release_summary }} - name: upload nb.jar From 89c15d381c352062f7716c0c820b5cf323d78d05 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:41:16 -0600 Subject: [PATCH 103/164] backport github breaking change fixes --- .github/workflows/release.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fdad4a3d0..4d1662b7a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,8 +27,10 @@ jobs: - name: capture tty for gpg run: | - echo "::set-env name=TTY::"$(tty) - echo "::set-env name=GPG_TTY::"$(tty) + echo "TTY="$(tty) >> $GITHUB_ENV + echo "GPG_TTY="$(tty) >> $GITHUB_ENV + # echo "::set-env name=TTY::"$(tty) + # echo "::set-env name=GPG_TTY::"$(tty) - name: initialize gpg run: | @@ -70,9 +72,12 @@ jobs: NEXT_MINOR_VERSION=$(( MINOR_VERSION+1)) NEXT_SNAPSHOT="${BASE_VERSION}.${NEXT_MINOR_VERSION}-SNAPSHOT" RELEASE_TAGNAME="nosqlbench-${RELEASE_VERSION}" - echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" - echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" - echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" + echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT}" >> $GITHUB_ENV + echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV + echo "RELEASE_TAGNAME=${RELEASE_TAGNAME}" >> $GITHUB_ENV + # echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" + # echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" + # echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" - name: prepare release summary id: prepare_summary From 3f4d130496b9b9123c1ccbf62d6f563f27e046ef Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:41:20 -0600 Subject: [PATCH 104/164] build NB3 with J14 --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4d1662b7a..f32de1586 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - name: setup java uses: actions/setup-java@v1 with: - java-version: '15' + java-version: '14' java-package: jdk architecture: x64 From 040db4782fa42b92f2f36c8dc69f2e81db0396cd Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:41:27 -0600 Subject: [PATCH 105/164] backport github actions breaking change fix --- .nosqlbench/grafana_apikey | 1 + .../ratelimits/InlineTokenPool.java | 376 +++++++++++ sort_docs/design/opstate.puml | 61 ++ sort_docs/eb_iterates_cycles.puml | 29 + sort_docs/eb_iterates_cycles.svg | 221 +++++++ sort_docs/eb_iterates_phases.puml | 42 ++ sort_docs/eb_iterates_phases.svg | 284 ++++++++ sort_docs/eb_latency_details.puml | 38 ++ sort_docs/eb_latency_terms.puml | 30 + sort_docs/eb_latency_terms.svg | 235 +++++++ sort_docs/op_state_nomnoml.png | Bin 0 -> 59238 bytes sort_docs/opstate_nomnoml.svg | 78 +++ sort_docs/package_layout.md | 7 + sort_docs/parts.puml | 0 sort_docs/rate_limiter_design.puml | 82 +++ sort_docs/ratelimiter_timelines.puml | 47 ++ sort_docs/research/multivariate.svg | 540 ++++++++++++++++ sort_docs/research/op_tracking.svg | 611 ++++++++++++++++++ sort_docs/testseq_early.png | Bin 0 -> 25703 bytes sort_docs/testseq_early.puml | 45 ++ sort_docs/testseq_late.png | Bin 0 -> 25478 bytes sort_docs/testseq_late.puml | 51 ++ sort_docs/todo.md | 16 + 23 files changed, 2794 insertions(+) create mode 100644 .nosqlbench/grafana_apikey create mode 100644 engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/InlineTokenPool.java create mode 100644 sort_docs/design/opstate.puml create mode 100644 sort_docs/eb_iterates_cycles.puml create mode 100644 sort_docs/eb_iterates_cycles.svg create mode 100644 sort_docs/eb_iterates_phases.puml create mode 100644 sort_docs/eb_iterates_phases.svg create mode 100644 sort_docs/eb_latency_details.puml create mode 100644 sort_docs/eb_latency_terms.puml create mode 100644 sort_docs/eb_latency_terms.svg create mode 100644 sort_docs/op_state_nomnoml.png create mode 100644 sort_docs/opstate_nomnoml.svg create mode 100644 sort_docs/package_layout.md create mode 100644 sort_docs/parts.puml create mode 100644 sort_docs/rate_limiter_design.puml create mode 100644 sort_docs/ratelimiter_timelines.puml create mode 100644 sort_docs/research/multivariate.svg create mode 100644 sort_docs/research/op_tracking.svg create mode 100644 sort_docs/testseq_early.png create mode 100644 sort_docs/testseq_early.puml create mode 100644 sort_docs/testseq_late.png create mode 100644 sort_docs/testseq_late.puml create mode 100644 sort_docs/todo.md diff --git a/.nosqlbench/grafana_apikey b/.nosqlbench/grafana_apikey new file mode 100644 index 000000000..11d760aed --- /dev/null +++ b/.nosqlbench/grafana_apikey @@ -0,0 +1 @@ +eyJrIjoibVFjRkV5Z096VHE0MjhXYk1RM2p1cnFuUkhQMXVZNGwiLCJuIjoibm9zcWxiZW5jaC0xMC4xMC4xMDAuNTItMTYwNzMxMDE2MDM0OCIsImlkIjoxfQ== \ No newline at end of file diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/InlineTokenPool.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/InlineTokenPool.java new file mode 100644 index 000000000..dfbfc8f36 --- /dev/null +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/InlineTokenPool.java @@ -0,0 +1,376 @@ +/* + * + * Copyright 2016 jshook + * 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.activityapi.ratelimits; + +import com.codahale.metrics.Timer; +import io.nosqlbench.engine.api.activityimpl.ActivityDef; +import io.nosqlbench.engine.api.metrics.ActivityMetrics; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.LockSupport; +import java.util.concurrent.locks.ReentrantLock; + +import static io.nosqlbench.engine.api.util.Colors.*; + +/** + *

Synopsis

+ * + * This TokenPool represents a finite quantity which can be + * replenished with regular refills. Extra tokens that do not fit + * within the active token pool are saved in a waiting token pool and + * used to backfill when allowed according to the backfill rate. + * + * A detailed explanation for how this works will be included + * at @link "http://docs.nosqlbench.io/" under dev notes. + * + *

This is the basis for the token-based rate limiters in + * NB. This mechanism is easily adaptable to bursting + * capability as well as a degree of stricter timing at speed. + * Various methods for doing this in a lock free way were + * investigated, but the intrinsic locks provided by synchronized + * method won out for now. This may be revisited when EB is + * retrofitted for J11. + *

+ */ +public class InlineTokenPool { + + private final static Logger logger = LogManager.getLogger(InlineTokenPool.class); + + public static final double MIN_CONCURRENT_OPS = 5; + + // Size limit of active pool + private long maxActivePoolSize; + // Size limit of burst pool incremental above active pool + private long maxBurstPoolSize; + // Size limit of total active tokens which can be waiting in active pool, considering burst + private long maxActiveAndBurstSize; + + // Ratio of speed relative to base speed at which bursting is allowed + private double burstRatio; + + // TODO Consider removing volatile after investigating + + // The active number of tokens (ns) available for consumers + private volatile long activePool; + // The tokens which were not claimed on time, and were moved into the waitime (reserve) pool + private volatile long waitingPool; + // How many tokens (ns) represent passage of time for a single op, given the op rate + private long nanosPerOp; + + // The nanotime of the last refill + private volatile long lastRefillAt; + // metrics for refill + private final Timer refillTimer; + // update rate for refiller + private final long interval = (long) 1E6; + + + private RateSpec rateSpec; +// private long debugTrigger=0L; +// private long debugRate=1000000000; + + // Total number of thread blocks that occured since this token pool was started + private long blocks = 0L; + + private final Lock lock = new ReentrantLock(); + private final Condition lockheld = lock.newCondition(); + + /** + * This constructor tries to pick reasonable defaults for the token pool for + * a given rate spec. The active pool must be large enough to contain one + * op worth of time, and the burst ratio + * + * @param rateSpec a {@link RateSpec} + */ + public InlineTokenPool(RateSpec rateSpec, ActivityDef def) { + ByteBuffer logbuf = getBuffer(); + apply(rateSpec); + logger.debug("initialized token pool: " + this.toString() + " for rate:" + rateSpec.toString()); + this.refillTimer = ActivityMetrics.timer(def, "tokenfiller"); + } + + public InlineTokenPool(long poolsize, double burstRatio, ActivityDef def) { + ByteBuffer logbuf = getBuffer(); + this.maxActivePoolSize = poolsize; + this.burstRatio = burstRatio; + this.maxActiveAndBurstSize = (long) (maxActivePoolSize * burstRatio); + this.maxBurstPoolSize = maxActiveAndBurstSize - maxActivePoolSize; + this.refillTimer = ActivityMetrics.timer(def, "tokenfiller"); + } + + /** + * Change the settings of this token pool, and wake any blocked callers + * just in case it allows them to proceed. + * + * @param rateSpec The rate specifier. + */ + public synchronized void apply(RateSpec rateSpec) { + this.rateSpec = rateSpec; + // maxActivePool is set to the higher of 1M or however many nanos are needed for 2 ops to be buffered + this.maxActivePoolSize = Math.max((long) 1E6, (long) ((double) rateSpec.getNanosPerOp() * MIN_CONCURRENT_OPS)); + this.maxActiveAndBurstSize = (long) (maxActivePoolSize * rateSpec.getBurstRatio()); + this.burstRatio = rateSpec.getBurstRatio(); + + this.maxBurstPoolSize = maxActiveAndBurstSize - maxActivePoolSize; + this.nanosPerOp = rateSpec.getNanosPerOp(); + notifyAll(); + } + + + public double getBurstRatio() { + return burstRatio; + } + + /** + * Take tokens up to amt tokens form the pool and report + * the amount of token removed. + * + * @param amt tokens requested + * @return actual number of tokens removed, greater to or equal to zero + */ + public synchronized long takeUpTo(long amt) { + long take = Math.min(amt, activePool); + activePool -= take; + return take; + } + + /** + * wait for the given number of tokens to be available, and then remove + * them from the pool. + * + * @return the total number of tokens untaken, including wait tokens + */ + public long blockAndTake() { + synchronized (this) { + if (activePool >= nanosPerOp) { + activePool -= nanosPerOp; + return waitingPool + activePool; + } + } + while (true) { + if (lock.tryLock()) { + try { + while (activePool < nanosPerOp) { + dorefill(); + } + lockheld.signal(); + lockheld.signal(); + } finally { + lock.unlock(); + } + } else { + try { + lockheld.await(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } +// while (activePool < nanosPerOp) { +// blocks++; +// //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset); +// try { +// wait(); +//// wait(maxActivePoolSize / 1000000, (int) maxActivePoolSize % 1000000); +// } catch (InterruptedException ignored) { +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// //System.out.println("waited for " + amt + "/" + activePool + " tokens"); +// } +// //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset); +// +// activePool -= nanosPerOp; +// return waitingPool + activePool; + } + + public synchronized long blockAndTakeOps(long ops) { + long totalNanosNeeded = ops * nanosPerOp; + while (activePool < totalNanosNeeded) { + blocks++; + //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset); + try { + wait(); +// wait(maxActivePoolSize / 1000000, (int) maxActivePoolSize % 1000000); + } catch (InterruptedException ignored) { + } catch (Exception e) { + throw new RuntimeException(e); + } + //System.out.println("waited for " + amt + "/" + activePool + " tokens"); + } + //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset); + + activePool -= totalNanosNeeded; + return waitingPool + activePool; + } + + public synchronized long blockAndTake(long tokens) { + while (activePool < tokens) { + //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset); + try { + wait(); +// wait(maxActivePoolSize / 1000000, (int) maxActivePoolSize % 1000000); + } catch (InterruptedException ignored) { + } catch (Exception e) { + throw new RuntimeException(e); + } + //System.out.println("waited for " + amt + "/" + activePool + " tokens"); + } + //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset); + + activePool -= tokens; + return waitingPool + activePool; + } + + public long getWaitTime() { + return activePool + waitingPool; + } + + public long getWaitPool() { + return waitingPool; + } + + public long getActivePool() { + return activePool; + } + + /** + * Add the given number of new tokens to the pool, forcing any amount + * that would spill over the current pool size into the wait token pool, but + * moving up to the configured burst tokens back from the wait token pool + * otherwise. + * + * The amount of backfilling that occurs is controlled by the backfill ratio, + * based on the number of tokens submitted. This causes normalizes the + * backfilling rate to the fill rate, so that it is not sensitive to refill + * scheduling. + * + * @param newTokens The number of new tokens to add to the token pools + * @return the total number of tokens in all pools + */ + public synchronized long refill(long newTokens) { + boolean debugthis = false; +// long debugAt = System.nanoTime(); +// if (debugAt>debugTrigger+debugRate) { +// debugTrigger=debugAt; +// debugthis=true; +// } + + long needed = Math.max(maxActivePoolSize - activePool, 0L); + long allocatedToActivePool = Math.min(newTokens, needed); + activePool += allocatedToActivePool; + + + // overflow logic + long allocatedToOverflowPool = newTokens - allocatedToActivePool; + waitingPool += allocatedToOverflowPool; + + // backfill logic + double refillFactor = Math.min((double) newTokens / maxActivePoolSize, 1.0D); + long burstFillAllowed = (long) (refillFactor * maxBurstPoolSize); + + burstFillAllowed = Math.min(maxActiveAndBurstSize - activePool, burstFillAllowed); + long burstFill = Math.min(burstFillAllowed, waitingPool); + + waitingPool -= burstFill; + activePool += burstFill; + + if (debugthis) { + System.out.print(this); + System.out.print(ANSI_BrightBlue + " adding=" + allocatedToActivePool); + if (allocatedToOverflowPool > 0) { + System.out.print(ANSI_Red + " OVERFLOW:" + allocatedToOverflowPool + ANSI_Reset); + } + if (burstFill > 0) { + System.out.print(ANSI_BrightGreen + " BACKFILL:" + burstFill + ANSI_Reset); + } + System.out.println(); + } + + //System.out.println(this); + notifyAll(); + + return activePool + waitingPool; + } + + @Override + public String toString() { + return "Tokens: active=" + activePool + "/" + maxActivePoolSize + + String.format( + " (%3.1f%%)A (%3.1f%%)B ", + (((double) activePool / (double) maxActivePoolSize) * 100.0), + (((double) activePool / (double) maxActiveAndBurstSize) * 100.0)) + " waiting=" + waitingPool + + " blocks=" + blocks + + " rateSpec:" + ((rateSpec != null) ? rateSpec.toString() : "NULL"); + } + + public RateSpec getRateSpec() { + return rateSpec; + } + + public synchronized long restart() { + long wait = activePool + waitingPool; + activePool = 0L; + waitingPool = 0L; + return wait; + } + + private ByteBuffer getBuffer() { + RandomAccessFile image = null; + try { + image = new RandomAccessFile("tokenbucket.binlog", "rw"); + ByteBuffer mbb = image.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, image.length()); + return mbb; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public synchronized void dorefill() { + lastRefillAt = System.nanoTime(); + long nextRefillTime = lastRefillAt + interval; + long thisRefillTime = System.nanoTime(); + while (thisRefillTime < nextRefillTime) { +// while (thisRefillTime < lastRefillAt + interval) { + long parkfor = Math.max(nextRefillTime - thisRefillTime, 0L); + //System.out.println(ANSI_Blue + "parking for " + parkfor + "ns" + ANSI_Reset); + LockSupport.parkNanos(parkfor); + thisRefillTime = System.nanoTime(); + } + +// this.times[iteration]=thisRefillTime; + long delta = thisRefillTime - lastRefillAt; +// this.amounts[iteration]=delta; + lastRefillAt = thisRefillTime; + + //System.out.println(this); + refill(delta); + refillTimer.update(delta, TimeUnit.NANOSECONDS); +// iteration++; + + } + + +} diff --git a/sort_docs/design/opstate.puml b/sort_docs/design/opstate.puml new file mode 100644 index 000000000..eb6be73d4 --- /dev/null +++ b/sort_docs/design/opstate.puml @@ -0,0 +1,61 @@ +@startuml +scale 600 width +[*] --> TrackedOp : track() + + TrackedOp: setCycle(cycle) + TrackedOp: setWaitTime(delay) + TrackedOp: start() + TrackedOp: + TrackedOp: setData(data) + TrackedOp: getData() + TrackedOp: skip(reason) + +State InProtocol { + + TrackedOp --> StartedOp : start() + + StartedOp: getCycle() + StartedOp: setData(data) + StartedOp: getData() + StartedOp: succeed(status) + StartedOp: + StartedOp: retry() + StartedOp: fail(status) + StartedOp: getStartedAtNanos() + StartedOp: getCurrentServiceTimeNanos() + StartedOp: getCurrentResponseTimeNanos() + + StartedOp -> StartedOp : retry() + + StartedOp --> SucceededOp : succeed() + SucceededOp: getCycle() + SucceededOp: getResult() + SucceededOp: getTries() + SucceededOp: getStartedAtNanos() + SucceededOp: getServiceTimeNanos() + SucceededOp: getResponseTimeNanos() + + StartedOp --> FailedOp: fail() + FailedOp: getCycle() + FailedOp: getResult() + FailedOp: getTries() + FailedOp: getStartedAtNanos() + FailedOp: getServiceTimeNanos() + FailedOp: getResponseTimeNanos() +} + +TrackedOp --> SkippedOp : skip() +SkippedOp: getSkippedReason() +SkippedOp: +SkippedOp: getCycle() +SkippedOp: getResult() +SkippedOp: getStartedAtNanos() +SkippedOp: getData() +SkippedOp: setData(data) + + +SucceededOp --> [*] +FailedOp --> [*] +SkippedOp --> [*] + +@enduml \ No newline at end of file diff --git a/sort_docs/eb_iterates_cycles.puml b/sort_docs/eb_iterates_cycles.puml new file mode 100644 index 000000000..15d22bfca --- /dev/null +++ b/sort_docs/eb_iterates_cycles.puml @@ -0,0 +1,29 @@ +@startuml + +Participant Input as i +Participant Thread as t +Participant Action as a + +== acquire input == + +group TIMER read-input + t -> i : get segment(stride) + activate i + t <- i : [stride] + deactivate i +end + +group TIMER strides + + loop over cycle values in segment + group TIMER cycle & phase + t -> a : runCycle(cycle) + activate a + t <- a : result + deactivate a + end +end + +end # strides + +@enduml \ No newline at end of file diff --git a/sort_docs/eb_iterates_cycles.svg b/sort_docs/eb_iterates_cycles.svg new file mode 100644 index 000000000..d7e447ca2 --- /dev/null +++ b/sort_docs/eb_iterates_cycles.svg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + Input + + + Input + + + Thread + + + Thread + + + Action + + + Action + + + + + + + + acquire input + + + + TIMER read-input + + + + get segment(stride) + + + + <cycle segment>[stride] + + + + TIMER strides + + + + loop + + [over cycle + values in segment] + + + + TIMER cycle + & phase + + + + runCycle(cycle) + + + + result + + + \ No newline at end of file diff --git a/sort_docs/eb_iterates_phases.puml b/sort_docs/eb_iterates_phases.puml new file mode 100644 index 000000000..ff3d1c82a --- /dev/null +++ b/sort_docs/eb_iterates_phases.puml @@ -0,0 +1,42 @@ +@startuml + +Participant Input as i +Participant Thread as t +Participant Action as a + +== acquire input data == + +group TIMER read-input + t -> i : get segment(stride) + activate i + t <- i : [stride] + deactivate i +end + +group TIMER strides + + loop over cycle values in segment + group TIMER cycle + group TIMER phase + t -> a : runCycle(cycle) + activate a + t <- a : result + deactivate a + end + +== additional phases == + +group TIMER phase + loop until phases complete + t -> a : runPhase(cycle) + activate a + t <- a : result + deactivate a +end +end +end +end + +end # strides + +@enduml \ No newline at end of file diff --git a/sort_docs/eb_iterates_phases.svg b/sort_docs/eb_iterates_phases.svg new file mode 100644 index 000000000..577addfd1 --- /dev/null +++ b/sort_docs/eb_iterates_phases.svg @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Input + + + Input + + + Thread + + + Thread + + + Action + + + Action + + + + + + + + + acquire input + data + + + + TIMER read-input + + + + get segment(stride) + + + + <cycle segment>[stride] + + + + TIMER strides + + + + loop + + [over cycle + values in segment] + + + + TIMER cycle + + + + TIMER phase + + + + runCycle(cycle) + + + + result + + + + + + additional + phases + + + + TIMER phase + + + + loop + + [until phases + complete] + + + + runPhase(cycle) + + + + result + + + \ No newline at end of file diff --git a/sort_docs/eb_latency_details.puml b/sort_docs/eb_latency_details.puml new file mode 100644 index 000000000..9081a4928 --- /dev/null +++ b/sort_docs/eb_latency_details.puml @@ -0,0 +1,38 @@ +@startuml +Participant user as u +Participant client as c +Participant resource as cr +Participant transport as t +Participant server as s + +group responsetime + u -> c: request + activate c #Black + group waittime + c -> cr: wait + activate cr #Yellow + note left of cr: client\nwaits\nfor\nresource + cr -> c: + deactivate cr + end + + group servicetime + c ->> t: request + activate t #Red + group servertime + t ->> s: request + deactivate t + activate s #Blue + note right of s: server\nprocesses\nrequest + s ->> t: response + deactivate s + activate t #Red + end + t ->> c: response + deactivate t + end + c -> u: response + deactivate c +end + +@enduml \ No newline at end of file diff --git a/sort_docs/eb_latency_terms.puml b/sort_docs/eb_latency_terms.puml new file mode 100644 index 000000000..c7f6d336a --- /dev/null +++ b/sort_docs/eb_latency_terms.puml @@ -0,0 +1,30 @@ +@startuml +Participant user as u +Participant client as c +Participant resource as cr +Participant server as s + +group responsetime + u -> c: request + activate c #Black +' note left of c: user\nwaits\nfor\nresponse + group waittime + c -> cr: wait + activate cr #Yellow + note right of cr: client\nwaits\nfor\nresource + cr -> c: + deactivate cr + end + + group servicetime + c ->> s: request + activate s #Blue + note right of s: server\nprocesses\nrequest + s ->> c: response + deactivate s + end + c -> u: response + deactivate c +end + +@enduml \ No newline at end of file diff --git a/sort_docs/eb_latency_terms.svg b/sort_docs/eb_latency_terms.svg new file mode 100644 index 000000000..ccfe22776 --- /dev/null +++ b/sort_docs/eb_latency_terms.svg @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + user + + + user + + + client + + + client + + + resource + + + resource + + + server + + + server + + + + + + + responsetime + + + + request + + + + waittime + + + + wait + + + + client + + waits + + for + + resource + + + + + + servicetime + + + + + request + + + + server + + processes + + request + + + + + response + + + + response + + + \ No newline at end of file diff --git a/sort_docs/op_state_nomnoml.png b/sort_docs/op_state_nomnoml.png new file mode 100644 index 0000000000000000000000000000000000000000..fbeea86f5ed1b1964f9cdd6f3636e8788eadd548 GIT binary patch literal 59238 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�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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + track + start + skip + retry + succeed + fail + + tracked + + started + + succeeded + + failed + + skipped + \ No newline at end of file diff --git a/sort_docs/package_layout.md b/sort_docs/package_layout.md new file mode 100644 index 000000000..2705d7f51 --- /dev/null +++ b/sort_docs/package_layout.md @@ -0,0 +1,7 @@ +- io.nosqlbench.engine. +- io.nosqlbench.extensions. +- io.nosqlbench.activitytypes. + +- io.nosqlbench.virtdata. +- io.nosqlbench.virtdata.library. +- io.nosqlbench.docs. ... \ No newline at end of file diff --git a/sort_docs/parts.puml b/sort_docs/parts.puml new file mode 100644 index 000000000..e69de29bb diff --git a/sort_docs/rate_limiter_design.puml b/sort_docs/rate_limiter_design.puml new file mode 100644 index 000000000..8a97ff202 --- /dev/null +++ b/sort_docs/rate_limiter_design.puml @@ -0,0 +1,82 @@ +@startuml + +Participant "Calling\nThread" as t +Participant "Limiter\nlogic" as l +Participant "Allocated\nnanos" as a +Participant "Elapsed\nnanos" as e +Participant "Clock\nSource" as c + +t -> l : acquire(nanos) + +group allocate start time +l -> a : getAndIncrement(nanos) +activate a #black +note over l,a + **allocated** is an atomic accumulator + which represents scheduled time. Each + op causes it to be atomically incremented + by a time slice of nanos. +end note +a -> l : +deactivate a +end + +group calculate delay (cached) +l -> e : get() +activate e +note over e + **elapsed** is an + atomic register + which caches + system time. +end note +e -> l : +deactivate e +l -> l : delay = \nelapsed - scheduled_at + +note right + **delay** measures external delay + that causes an op to fire after + the ideal time. **positive delay** + thus means the rate limiter doesn't + need to impose its own blocking delay + in order to ensure delay>=0. +end note + +end + +group if delay<0 (cached) +note over l,c + If delay<0, then this operation is too soon according + to the cached clock value. Since this could be stale + and cause us to block needlessly, we update the cached + clock value and recompute delay. +end note +l -> c : get() (~25ns) +activate c #orange +c -> l : +deactivate c + +l -> e : store() +activate e #black +e -> l +deactivate e +l -> l : delay = \nelapsed - scheduled_at + +group if delay<0 (updated) + l->l: sleep(-delay);\ndelay=0 + note right + If delay is negative, we sleep + in the calling thread and + set delay=0 + end note + activate l + deactivate l +end + +end + +l->t: + + +@enduml \ No newline at end of file diff --git a/sort_docs/ratelimiter_timelines.puml b/sort_docs/ratelimiter_timelines.puml new file mode 100644 index 000000000..649d74a43 --- /dev/null +++ b/sort_docs/ratelimiter_timelines.puml @@ -0,0 +1,47 @@ +@startuml +scale 100 as 100 pixels + +Title Rate Limiter - **Timelines** + +robust "typical" as W1 +@W1 +0 is past +100 is allocated #yellow +200 is scheduled #lightgreen +632 is now #lightblue +W1@100 <-> @200: schedule\ndelay +W1@200 <-> @632: + +robust "no waittime" as W2 +@W2 +0 is past +200 is allocated #yellow +200.000001 is scheduled #lightgreen +632 is now #lightblue + +robust "caughtup" as W3 +@W3 +0 is past +100 is allocated #yellow +200.000001 is scheduled #lightgreen +232 is now #lightblue + +robust "ahead" as W4 +@W4 +0 is past +100 is allocated #yellow +200.000001 is scheduled #lightgreen +232 is now #lightblue + +concise "perfect ops" as O +@O +0 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op +@enduml diff --git a/sort_docs/research/multivariate.svg b/sort_docs/research/multivariate.svg new file mode 100644 index 000000000..a7f619f7a --- /dev/null +++ b/sort_docs/research/multivariate.svg @@ -0,0 +1,540 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + SCORE + value + throughput + latency + PARAMS + + + + + + + + + + + + + RESULT + ccph + async + threads + + + PARAMS + + + + + VALUE + + + + + + + + result + function + R(P) + value + function + V(R) + + V(R(P)) + + diff --git a/sort_docs/research/op_tracking.svg b/sort_docs/research/op_tracking.svg new file mode 100644 index 000000000..d46906623 --- /dev/null +++ b/sort_docs/research/op_tracking.svg @@ -0,0 +1,611 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + op + tracker + + + + + + + + + + scenario + + + + + + + activity + + + + input + + + + async + count + + + + stride + tracker + + + + cycle + segment + + + + + + + thread + + + diff --git a/sort_docs/testseq_early.png b/sort_docs/testseq_early.png new file mode 100644 index 0000000000000000000000000000000000000000..df14d6361284e87b5e337fc07679e527385965a9 GIT binary patch literal 25703 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 + +@E +500 is unseen #white +@500 <-> @732: **error** = 232 +A -> C + +@S +0 is idle #grey +100 is scheduled #orange +600 is unscheduled #white +@500 <-> @600: **scheduling_delay** =\nelapsed - scheduled = -100 + +@A +300 is unallocated #white +@300 <-> @500: **wait_time** =\nelapsed - allocated = 200 + +concise "Ops" as O +@O +0 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op +@enduml diff --git a/sort_docs/testseq_late.png b/sort_docs/testseq_late.png new file mode 100644 index 0000000000000000000000000000000000000000..95c894b08a83e6338079b754d2765b4fabd24b1f GIT binary patch literal 25478 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 C + +@632 +C is future #white +E->C + +@A +@100 <-> @500: **wait_time** =\nelapsed - allocated = 400 +@E +@500 <-> @632: **error** = 132 +@S +@200 <-> @500: **scheduling_delay** =\nelapsed - scheduled = 300 + +concise "Ops" as O +@O +0 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op ++100 is op +@enduml diff --git a/sort_docs/todo.md b/sort_docs/todo.md new file mode 100644 index 000000000..a173147ef --- /dev/null +++ b/sort_docs/todo.md @@ -0,0 +1,16 @@ +- convert core input to be equivalent + of `input=type:interval,cycles:N[..M]` +- Add doc support for input, input filters, outputs, output filters +- Build metadata scaffolding for parameters, so unused parameters may be + warned about. + - parameters should be part of the activity API + - parameters should not re-trigger def observers for non-change + evhandler + - parameters across all subsystems should be discoverable or + enumerable +- make stride auto-sizing uniformly apply after sequencing +- reimplement core activity and scenario logic as async/reactor with + monitors +- convert to Java 9 +- add activity library commands +- add --list-input-filters and --list-output-filters \ No newline at end of file From 2148a24c0a5522fd3f6dea4b1fa35d958d4a2e5c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:42:51 -0600 Subject: [PATCH 106/164] Stabilize NB3 builds --- RELEASENOTES.md | 83 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 29 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index ba35d0396..7fce76402 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,29 +1,54 @@ -- 1e958a7e (HEAD -> main) simplify logger naming for core systems -- 1382d33d argsfiles and statedirs -- b5901679 environment and sys prop support -- fd74ccba move common topics to resources base -- 6a8dfef1 qualify grafana docker with tag -- 2830d070 simple workload improvements -- b9607d07 make argsfiles use double dash -- a9b0dc9d argsfile support -- f702736f (HEAD -> main) flatten maps in OpTemplates to allow map consumers -- 4a9fa81b pull Named service up -- 574a89e7 pull ConfigAware api up -- 71195d0a http release fixes -- 3fa89ebc partial work for --args -- 262df571 improved error messages -- 453b1b2c extract ratio from optemplate before construction -- dcf458c4 annotation progress -- 7017b6cd add SplitLongs function -- 0758670f add nb clients module -- 1dbf36c4 add grafana annotation client -- 120d9761 remove warning for speculative defaults -- c78f1e92 typos and minor fixes -- f3f1b8f4 add annotations design sketch -- 394580d6 more idea sketches -- 9e5972f5 comment cleanup -- 06edfcc9 fix NPE when binding has undefined value -- 510746b7 improve mismatched scenario name feedback -- 735b32e1 add illustrative test for EpochMillisToJavaLocalDate -- 2390f253 Initial Migration of DSE Graph -- 2275573c Update Readme +- 040db478 backport github actions breaking change fix +- 3f4d1304 build NB3 with J14 +- 89c15d38 backport github breaking change fixes +- 8cce0173 backport auto pre-release on -rc branches +- daea786c leave source and targets at J11 and runtime at J14 for NB3 +- 2bfe24eb backport auto pre-releases on -rc branches +- d089ff24 document Java version references in project +- 70f22ad8 support J14 or J15 in appimage build +- e4f325c4 disable test which is present in feature branch +- 8a0b326f (origin/dependabot/maven/mvn-defaults/jetty.version-9.4.35.v20201120) Bump jetty.version in /mvn-defaults +- 78463838 make main brain build cleanly again +- 608d1f72 Update DOWNLOADS.md +- 3d2ff55f auto create apikey +- cfa92eab package organization +- 2ab118f4 package organization +- a23808b3 update appimage build script for j15 +- 7b0e37ab add metrics manifest to polyglot +- 7e6aa1a2 bump source and target to Java 15 +- 2752fa50 bump major version to 4.0.0-SNAPSHOT +- 7e880b91 experimental grammar +- 3f65a054 console friendly metrics summary +- 146686e0 simplify custom logging configuration +- d0592454 typos, alignment, cruft +- 45307081 backfill missing default +- b7c24642 centralize log4j2 and slf4j stub config +- 2215fc94 typos, alignment, cruft +- 0ef26c82 update logger deps for dsegraph +- 975ea40d merge fixups +- ae419a26 logging annotator module +- 6c0632fb grafana annotator module +- 317ffab4 api for annotations +- c2cec235 allow configurable delimiter in params parser +- a09efbe9 consolidate to log4j2 +- 6a523dc4 remove slf4j +- 67eefbbe fix activity run state bug +- a88d0376 docker-metrics improvements +- 667fbdba add log4j2 programmatic configuration +- 60fa0529 add default log4j configs +- a3e0739a add FixedValues for double +- fa85704b add SPI impl selector field 'selector' +- 4996d206 config API improvements +- e0498ff2 docs updates +- e9d2b489 environment API improvements +- 897a8389 generalize log level to NB +- a97db87f include JSON support in project API +- 2c09b8ae typos, culling, and alignment +- a3a51381 update inactive coords +- 83136139 generalize op source +- 089a29d8 grafana api tokens +- e6e70f71 support DoubleToIntFunction in function matrix +- 52b029f8 typos, culling, and alignment +- 4d65dc62 update inactive coords +- 55edec53 add ToByteBuffer binding function +- 93e10e6a config model improvements From 82d5e0219f72b47c9acf70c7c09e6bace1c0feab Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:48:57 -0600 Subject: [PATCH 107/164] fix workload typo --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f32de1586..c5705bad3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-18.04 steps: - - name: checkout repo + - name: checkout repo uses: actions/checkout@v2 - name: setup java From d740078c088dbad0b2286cb31bf166648fe2c544 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 13:49:37 -0600 Subject: [PATCH 108/164] fixing build --- RELEASENOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7fce76402..c4f543b74 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,3 +1,4 @@ +- force build - 040db478 backport github actions breaking change fix - 3f4d1304 build NB3 with J14 - 89c15d38 backport github breaking change fixes From 3fa958c933271575b3333fbba60c9a5bef543fa4 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:19:40 -0600 Subject: [PATCH 109/164] update docker actions and add sanity check --- .github/workflows/release.yml | 150 ++++++++++++++++++++-------------- 1 file changed, 87 insertions(+), 63 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5705bad3..93122a8c8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -144,34 +144,58 @@ jobs: mkdir staging cp nb/target/nb.jar nb/target/nb staging - - name: upload artifacts - uses: actions/upload-artifact@v1 - with: - name: binaries - path: staging + - name: upload artifacts + uses: actions/upload-artifact@v1 + with: + name: binaries + path: staging - - name: select release type from branch name - run: | - current_branch=$(git rev-parse --abbrev-ref HEAD) - if [[ ${current_branch} == *"-rc"* ]] - then - echo "PRERELEASE=true" >> $GITHUB_ENV - echo "DOCKER_TAGS='"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV - else - echo "PRERELEASE=false" >> $GITHUB_ENV - echo "DOCKER_TAGS='latest,"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV - fi + - name: select release type from branch name + run: | + current_branch=$(git rev-parse --abbrev-ref HEAD) + if [[ ${current_branch} == *"-rc"* ]] + then + echo "PRERELEASE=true" >> $GITHUB_ENV + echo "DOCKER_TAGS='nosqlbench/nosqlbench:"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV + else + echo "PRERELEASE=false" >> $GITHUB_ENV + echo "DOCKER_TAGS='nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:"${{ env + .RELEASE_VERSION }}"'" >> $GITHUB_ENV + fi - - name: docker push - uses: docker/build-push-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: nosqlbench/nosqlbench - tags: ${{ env.DOCKER_TAGS }} - tag_with_ref: false + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 - - name: bundle guidebook + - name: docker hub login + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: docker build + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + pull: true + push: false + load: true + tags: ${{ env.DOCKER_TAGS }} + + - name: sanity check docker image + run: | + docker run --rm -i -t nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version + + - name: docker push + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + pull: true + push: true + tags: ${{ env.DOCKER_TAGS }} + + - name: bundle guidebook run: mkdir guidebook && cp -R nb/target/guidebook guidebook - name: upload guidebook @@ -219,49 +243,49 @@ jobs: runs-on: ubuntu-18.04 steps: - - name: set git username - run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" + - name: set git username + run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" - - name: set git email - run: git config --global user.name "${{ secrets.NBDROID_NAME }}" + - name: set git email + run: git config --global user.name "${{ secrets.NBDROID_NAME }}" - - name: download guidebook - uses: actions/download-artifact@v1 - with: - name: guidebook - path: guidebook + - name: download guidebook + uses: actions/download-artifact@v1 + with: + name: guidebook + path: guidebook - - run: ls -la + - run: ls -la - - name: clone nosqlbench-docs - env: - NBDROID_NAME: ${{ secrets.NBDROID_NAME }} - NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} - run: | - git clone https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git nosqlbench-docs - cd nosqlbench-docs - echo "files listing" - find . - git remote set-url origin https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git - git remote -v + - name: clone nosqlbench-docs + env: + NBDROID_NAME: ${{ secrets.NBDROID_NAME }} + NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} + run: | + git clone https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git nosqlbench-docs + cd nosqlbench-docs + echo "files listing" + find . + git remote set-url origin https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git + git remote -v - - name: push changes - env: - NBDROID_NAME: ${{ secrets.NBDROID_NAME }} - NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} - run: | - rsync -av --delete guidebook/guidebook/ nosqlbench-docs/docs/ - echo "docs.nosqlbench.io" > nosqlbench-docs/docs/CNAME - cd nosqlbench-docs - git add docs - git add -u - CHANGES=$(git status --porcelain 2>/dev/null| wc -l) - echo "found $CHANGES to push for doc updates" - if (( $CHANGES > 0 )) - then - git commit -m"docs update for $GITHUB_REF" - git push - fi + - name: push changes + env: + NBDROID_NAME: ${{ secrets.NBDROID_NAME }} + NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} + run: | + rsync -av --delete guidebook/guidebook/ nosqlbench-docs/docs/ + echo "docs.nosqlbench.io" > nosqlbench-docs/docs/CNAME + cd nosqlbench-docs + git add docs + git add -u + CHANGES=$(git status --porcelain 2>/dev/null| wc -l) + echo "found $CHANGES to push for doc updates" + if (( $CHANGES > 0 )) + then + git commit -m"docs update for $GITHUB_REF" + git push + fi From d00a50f1aa799370813a2bae2d0f47014cce25e7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:19:59 -0600 Subject: [PATCH 110/164] test build scripts --- RELEASENOTES.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index c4f543b74..e70442ac3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,7 @@ -- force build +- 3fa958c9 (HEAD -> main, origin/main) update docker actions and add sanity check +- d740078c fixing build +- 82d5e021 fix workload typo +- 2148a24c Stabilize NB3 builds - 040db478 backport github actions breaking change fix - 3f4d1304 build NB3 with J14 - 89c15d38 backport github breaking change fixes From 2b17cdccfcfa66a79c957ced76007bfed29ba2e2 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:34:01 -0600 Subject: [PATCH 111/164] fix broken autoformat --- .github/workflows/release.yml | 474 +++++++++++++++++----------------- 1 file changed, 237 insertions(+), 237 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 93122a8c8..d31ebf525 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,282 +10,282 @@ jobs: runs-on: ubuntu-18.04 steps: - - name: checkout repo - uses: actions/checkout@v2 + - name: checkout repo + uses: actions/checkout@v2 - - name: setup java - uses: actions/setup-java@v1 - with: - java-version: '14' - java-package: jdk - architecture: x64 + - name: setup java + uses: actions/setup-java@v1 + with: + java-version: '14' + java-package: jdk + architecture: x64 - - name: avoid release loop - run: scripts/avoid-release-loop.sh - env: - GIT_RELEASE_BOT_NAME: "nb-droid" + - name: avoid release loop + run: scripts/avoid-release-loop.sh + env: + GIT_RELEASE_BOT_NAME: "nb-droid" - - name: capture tty for gpg - run: | - echo "TTY="$(tty) >> $GITHUB_ENV - echo "GPG_TTY="$(tty) >> $GITHUB_ENV - # echo "::set-env name=TTY::"$(tty) - # echo "::set-env name=GPG_TTY::"$(tty) + - name: capture tty for gpg + run: | + echo "TTY="$(tty) >> $GITHUB_ENV + echo "GPG_TTY="$(tty) >> $GITHUB_ENV + # echo "::set-env name=TTY::"$(tty) + # echo "::set-env name=GPG_TTY::"$(tty) - - name: initialize gpg - run: | - set -x - echo "${{ secrets.GITHUB_GPG_KEY }}" | base64 -d > private.key - gpg --import --batch ./private.key - rm ./private.key - echo "gnupg files:" - ls -l ~/.gnupg/ + - name: initialize gpg + run: | + set -x + echo "${{ secrets.GITHUB_GPG_KEY }}" | base64 -d > private.key + gpg --import --batch ./private.key + rm ./private.key + echo "gnupg files:" + ls -l ~/.gnupg/ - - name: set git username - run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" + - name: set git username + run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" - - name: set git email - run: git config --global user.name "${{ secrets.NBDROID_NAME }}" + - name: set git email + run: git config --global user.name "${{ secrets.NBDROID_NAME }}" - - name: free disk space - run: | - sudo swapoff -a - sudo rm -f /swapfile - sudo apt clean - docker rmi $(docker image ls -aq) - df -h + - name: free disk space + run: | + sudo swapoff -a + sudo rm -f /swapfile + sudo apt clean + docker rmi $(docker image ls -aq) + df -h - - name: Cache Maven packages - uses: actions/cache@v1 - with: - path: ~/.m2 - key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-m2 + - name: Cache Maven packages + uses: actions/cache@v1 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 - - name: read versions - run: | - set -x - CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - RELEASE_VERSION=${CURRENT_VERSION%%-SNAPSHOT} - BASE_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f1-2) - MINOR_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f3) - NEXT_MINOR_VERSION=$(( MINOR_VERSION+1)) - NEXT_SNAPSHOT="${BASE_VERSION}.${NEXT_MINOR_VERSION}-SNAPSHOT" - RELEASE_TAGNAME="nosqlbench-${RELEASE_VERSION}" - echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT}" >> $GITHUB_ENV - echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV - echo "RELEASE_TAGNAME=${RELEASE_TAGNAME}" >> $GITHUB_ENV - # echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" - # echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" - # echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" + - name: read versions + run: | + set -x + CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + RELEASE_VERSION=${CURRENT_VERSION%%-SNAPSHOT} + BASE_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f1-2) + MINOR_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f3) + NEXT_MINOR_VERSION=$(( MINOR_VERSION+1)) + NEXT_SNAPSHOT="${BASE_VERSION}.${NEXT_MINOR_VERSION}-SNAPSHOT" + RELEASE_TAGNAME="nosqlbench-${RELEASE_VERSION}" + echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT}" >> $GITHUB_ENV + echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV + echo "RELEASE_TAGNAME=${RELEASE_TAGNAME}" >> $GITHUB_ENV + # echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" + # echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" + # echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" - - name: prepare release summary - id: prepare_summary - run: | - #summary=$(scripts/release-notes.sh) - summary=$(cat RELEASENOTES.md) - summary="${summary//'%'/'%25'}" - summary="${summary//$'\n'/'%0A'}" - summary="${summary//$'\r'/'%0D'}" - echo "::set-output name=release_summary::$summary" + - name: prepare release summary + id: prepare_summary + run: | + #summary=$(scripts/release-notes.sh) + summary=$(cat RELEASENOTES.md) + summary="${summary//'%'/'%25'}" + summary="${summary//$'\n'/'%0A'}" + summary="${summary//$'\r'/'%0D'}" + echo "::set-output name=release_summary::$summary" - - name: prepare release - run: scripts/release-prepare.sh - env: - RELEASE_BRANCH_NAME: "main" - PRERELEASE_BRANCH_PATTERN: "-rc" - GIT_RELEASE_BOT_NAME: "nb-droid" - GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} - ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} - GPG_ENABLED: "true" - GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} - GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} - GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} - MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} - MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} + - name: prepare release + run: scripts/release-prepare.sh + env: + RELEASE_BRANCH_NAME: "main" + PRERELEASE_BRANCH_PATTERN: "-rc" + GIT_RELEASE_BOT_NAME: "nb-droid" + GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} + ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} + GPG_ENABLED: "true" + GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} + GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} + GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} + MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} + MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} - - name: bundle integration test logs - run: | - pwd - find nb - mkdir -p itlogs/nb - cp -R nb/logs itlogs/nb + - name: bundle integration test logs + run: | + pwd + find nb + mkdir -p itlogs/nb + cp -R nb/logs itlogs/nb - - name: upload integration test logs - uses: actions/upload-artifact@v1 - with: - name: itlogs - path: itlogs + - name: upload integration test logs + uses: actions/upload-artifact@v1 + with: + name: itlogs + path: itlogs - - name: perform release - run: scripts/release-perform.sh - continue-on-error: true - env: - RELEASE_BRANCH_NAME: "main" - GIT_RELEASE_BOT_NAME: "nb-droid" - GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} - ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} - GPG_ENABLED: "true" - GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} - GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} - GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} - MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} - MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} + - name: perform release + run: scripts/release-perform.sh + continue-on-error: true + env: + RELEASE_BRANCH_NAME: "main" + GIT_RELEASE_BOT_NAME: "nb-droid" + GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} + ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} + GPG_ENABLED: "true" + GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} + GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} + GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} + MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} + MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} - - name: bundle artifacts - run: | - pwd - ls -l - mkdir staging - cp nb/target/nb.jar nb/target/nb staging + - name: bundle artifacts + run: | + pwd + ls -l + mkdir staging + cp nb/target/nb.jar nb/target/nb staging - - name: upload artifacts - uses: actions/upload-artifact@v1 - with: - name: binaries - path: staging + - name: upload artifacts + uses: actions/upload-artifact@v1 + with: + name: binaries + path: staging - - name: select release type from branch name - run: | - current_branch=$(git rev-parse --abbrev-ref HEAD) - if [[ ${current_branch} == *"-rc"* ]] - then - echo "PRERELEASE=true" >> $GITHUB_ENV - echo "DOCKER_TAGS='nosqlbench/nosqlbench:"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV - else - echo "PRERELEASE=false" >> $GITHUB_ENV - echo "DOCKER_TAGS='nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:"${{ env - .RELEASE_VERSION }}"'" >> $GITHUB_ENV - fi + - name: select release type from branch name + run: | + current_branch=$(git rev-parse --abbrev-ref HEAD) + if [[ ${current_branch} == *"-rc"* ]] + then + echo "PRERELEASE=true" >> $GITHUB_ENV + echo "DOCKER_TAGS='nosqlbench/nosqlbench:"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV + else + echo "PRERELEASE=false" >> $GITHUB_ENV + echo "DOCKER_TAGS='nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:"${{ env + .RELEASE_VERSION }}"'" >> $GITHUB_ENV + fi - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 - - name: docker hub login - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + - name: docker hub login + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - - name: docker build - uses: docker/build-push-action@v2 - with: - context: . - file: Dockerfile - pull: true - push: false - load: true - tags: ${{ env.DOCKER_TAGS }} + - name: docker build + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + pull: true + push: false + load: true + tags: ${{ env.DOCKER_TAGS }} - - name: sanity check docker image - run: | - docker run --rm -i -t nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version + - name: sanity check docker image + run: | + docker run --rm -i -t nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version - - name: docker push - uses: docker/build-push-action@v2 - with: - context: . - file: Dockerfile - pull: true - push: true - tags: ${{ env.DOCKER_TAGS }} + - name: docker push + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + pull: true + push: true + tags: ${{ env.DOCKER_TAGS }} - - name: bundle guidebook - run: mkdir guidebook && cp -R nb/target/guidebook guidebook + - name: bundle guidebook + run: mkdir guidebook && cp -R nb/target/guidebook guidebook - - name: upload guidebook - uses: actions/upload-artifact@v1 - with: - name: guidebook - path: guidebook + - name: upload guidebook + uses: actions/upload-artifact@v1 + with: + name: guidebook + path: guidebook - - name: create release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ env.RELEASE_TAGNAME }} - release_name: Release ${{ env.RELEASE_TAGNAME }} - draft: false - prerelease: ${{ env.PRERELEASE }} - body: ${{ steps.prepare_summary.outputs.release_summary }} + - name: create release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.RELEASE_TAGNAME }} + release_name: Release ${{ env.RELEASE_TAGNAME }} + draft: false + prerelease: ${{ env.PRERELEASE }} + body: ${{ steps.prepare_summary.outputs.release_summary }} - - name: upload nb.jar - id: upload-nb-jar - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: nb/target/nb.jar - asset_name: nb.jar - asset_content_type: application/octet-stream + - name: upload nb.jar + id: upload-nb-jar + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: nb/target/nb.jar + asset_name: nb.jar + asset_content_type: application/octet-stream - - name: upload nb binary - id: upload-nb-binary - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: nb/target/nb - asset_name: nb - asset_content_type: application/octet-stream + - name: upload nb binary + id: upload-nb-binary + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: nb/target/nb + asset_name: nb + asset_content_type: application/octet-stream docs: needs: release runs-on: ubuntu-18.04 steps: - - name: set git username - run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" + - name: set git username + run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" - - name: set git email - run: git config --global user.name "${{ secrets.NBDROID_NAME }}" + - name: set git email + run: git config --global user.name "${{ secrets.NBDROID_NAME }}" - - name: download guidebook - uses: actions/download-artifact@v1 - with: - name: guidebook - path: guidebook + - name: download guidebook + uses: actions/download-artifact@v1 + with: + name: guidebook + path: guidebook - - run: ls -la + - run: ls -la - - name: clone nosqlbench-docs - env: - NBDROID_NAME: ${{ secrets.NBDROID_NAME }} - NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} - run: | - git clone https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git nosqlbench-docs - cd nosqlbench-docs - echo "files listing" - find . - git remote set-url origin https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git - git remote -v + - name: clone nosqlbench-docs + env: + NBDROID_NAME: ${{ secrets.NBDROID_NAME }} + NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} + run: | + git clone https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git nosqlbench-docs + cd nosqlbench-docs + echo "files listing" + find . + git remote set-url origin https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git + git remote -v - - name: push changes - env: - NBDROID_NAME: ${{ secrets.NBDROID_NAME }} - NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} - run: | - rsync -av --delete guidebook/guidebook/ nosqlbench-docs/docs/ - echo "docs.nosqlbench.io" > nosqlbench-docs/docs/CNAME - cd nosqlbench-docs - git add docs - git add -u - CHANGES=$(git status --porcelain 2>/dev/null| wc -l) - echo "found $CHANGES to push for doc updates" - if (( $CHANGES > 0 )) - then - git commit -m"docs update for $GITHUB_REF" - git push - fi + - name: push changes + env: + NBDROID_NAME: ${{ secrets.NBDROID_NAME }} + NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} + run: | + rsync -av --delete guidebook/guidebook/ nosqlbench-docs/docs/ + echo "docs.nosqlbench.io" > nosqlbench-docs/docs/CNAME + cd nosqlbench-docs + git add docs + git add -u + CHANGES=$(git status --porcelain 2>/dev/null| wc -l) + echo "found $CHANGES to push for doc updates" + if (( $CHANGES > 0 )) + then + git commit -m"docs update for $GITHUB_REF" + git push + fi From c119ec141559ff70ffaa8847ecd22522dc489823 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:34:29 -0600 Subject: [PATCH 112/164] test build scripts --- RELEASENOTES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e70442ac3..79bdc8142 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,6 @@ -- 3fa958c9 (HEAD -> main, origin/main) update docker actions and add sanity check +- 2b17cdcc (HEAD -> main) fix broken autoformat +- d00a50f1 (origin/main) test build scripts +- 3fa958c9 update docker actions and add sanity check - d740078c fixing build - 82d5e021 fix workload typo - 2148a24c Stabilize NB3 builds From 6048be95cb437da85eea96bda4a97592f09f3c6e Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:37:04 -0600 Subject: [PATCH 113/164] fix broken autoformat --- .github/workflows/release.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d31ebf525..f8c293d66 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -159,8 +159,7 @@ jobs: echo "DOCKER_TAGS='nosqlbench/nosqlbench:"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV else echo "PRERELEASE=false" >> $GITHUB_ENV - echo "DOCKER_TAGS='nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:"${{ env - .RELEASE_VERSION }}"'" >> $GITHUB_ENV + echo "DOCKER_TAGS='nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV fi - name: Set up Docker Buildx From 633cbea79daaad7dbbe1f2b82498808359335fa7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:37:14 -0600 Subject: [PATCH 114/164] test build scripts --- RELEASENOTES.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 79bdc8142..9f7f17cda 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,7 @@ -- 2b17cdcc (HEAD -> main) fix broken autoformat -- d00a50f1 (origin/main) test build scripts +- 6048be95 (HEAD -> main) fix broken autoformat +- c119ec14 (origin/main) test build scripts +- 2b17cdcc fix broken autoformat +- d00a50f1 test build scripts - 3fa958c9 update docker actions and add sanity check - d740078c fixing build - 82d5e021 fix workload typo From ecaeab142a0f8c3265f92306b2c2cb0b662bd61c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:41:17 -0600 Subject: [PATCH 115/164] build testing --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f8c293d66..22b361c34 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -156,13 +156,13 @@ jobs: if [[ ${current_branch} == *"-rc"* ]] then echo "PRERELEASE=true" >> $GITHUB_ENV - echo "DOCKER_TAGS='nosqlbench/nosqlbench:"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV else echo "PRERELEASE=false" >> $GITHUB_ENV - echo "DOCKER_TAGS='nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:"${{ env.RELEASE_VERSION }}"'" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV fi - - name: Set up Docker Buildx + - name: Setup docker buildx uses: docker/setup-buildx-action@v1 - name: docker hub login From 17251bb6026bad752dd3affdb1d88df5ac9adec1 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:41:25 -0600 Subject: [PATCH 116/164] build testing --- RELEASENOTES.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9f7f17cda..ecbb96694 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,7 @@ -- 6048be95 (HEAD -> main) fix broken autoformat -- c119ec14 (origin/main) test build scripts +- ecaeab14 (HEAD -> main) build testing +- 633cbea7 (origin/main) test build scripts +- 6048be95 fix broken autoformat +- c119ec14 test build scripts - 2b17cdcc fix broken autoformat - d00a50f1 test build scripts - 3fa958c9 update docker actions and add sanity check From e334e4562a5e2fadb1b6eb483f675be667d4c6b0 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:45:53 -0600 Subject: [PATCH 117/164] build testing --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 22b361c34..8c8133c0d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -160,7 +160,7 @@ jobs: else echo "PRERELEASE=false" >> $GITHUB_ENV echo "DOCKER_TAGS=nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV - fi + fi - name: Setup docker buildx uses: docker/setup-buildx-action@v1 From 0fb043e3aed93c62035b15fc7c5657bed9dd2dfd Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 14:45:57 -0600 Subject: [PATCH 118/164] build testing --- RELEASENOTES.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index ecbb96694..b2e6866e4 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,7 @@ -- ecaeab14 (HEAD -> main) build testing -- 633cbea7 (origin/main) test build scripts +- e334e456 (HEAD -> main) build testing +- 17251bb6 (origin/main) build testing +- ecaeab14 build testing +- 633cbea7 test build scripts - 6048be95 fix broken autoformat - c119ec14 test build scripts - 2b17cdcc fix broken autoformat From d865c03c70da1f117bf747cc9f0a87a76ce8f6a6 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 17:46:00 -0600 Subject: [PATCH 119/164] make perf sensitive test less sensitive --- .../engine/core/script/AsyncScriptIntegrationTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java index 5662373dd..8ab46e3ea 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java @@ -175,7 +175,7 @@ public class AsyncScriptIntegrationTests { "logs/histostats.csv")); String logdata = strings.stream().collect(Collectors.joining("\n")); assertThat(logdata).contains("min,p25,p50,p75,p90,p95,"); - assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3); + assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(2); } @Test From 3b4ecaca0f090acee43c976f0da3b04c7ba51350 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 17:46:43 -0600 Subject: [PATCH 120/164] build testing --- RELEASENOTES.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b2e6866e4..faca36f0b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,7 @@ -- e334e456 (HEAD -> main) build testing -- 17251bb6 (origin/main) build testing +- d865c03c (HEAD -> main, origin/main) make perf sensitive test less sensitive +- 0fb043e3 build testing +- e334e456 build testing +- 17251bb6 build testing - ecaeab14 build testing - 633cbea7 test build scripts - 6048be95 fix broken autoformat From 5abb2da773e975214c83cc43a54335c5e286199c Mon Sep 17 00:00:00 2001 From: nb-droid Date: Mon, 7 Dec 2020 23:56:43 +0000 Subject: [PATCH 121/164] [maven-release-plugin] prepare release nosqlbench-4.0.0 --- docsys/pom.xml | 6 ++--- driver-cql-shaded/pom.xml | 6 ++--- driver-cqlverify/pom.xml | 6 ++--- driver-diag/pom.xml | 6 ++--- driver-dsegraph-shaded/pom.xml | 13 ++++------- driver-http/pom.xml | 6 ++--- driver-jmx/pom.xml | 6 ++--- driver-kafka/pom.xml | 6 ++--- driver-mongodb/pom.xml | 6 ++--- driver-stdout/pom.xml | 6 ++--- driver-tcp/pom.xml | 8 +++---- driver-web/pom.xml | 6 ++--- drivers-api/pom.xml | 6 ++--- engine-api/pom.xml | 10 ++++---- engine-cli/pom.xml | 6 ++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 +++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 8 +++---- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 8 +++---- nb/pom.xml | 42 ++++++++++++++++------------------ pom.xml | 4 ++-- 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 ++++++------- 34 files changed, 117 insertions(+), 126 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 7eebb773c..7e5dc9d44 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 4.0.0 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 7db495c03..38df9e73d 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index fa0ca8512..fa57e1002 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 806dbf7b5..031bdae02 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index fdf041a23..b0db08b39 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -1,12 +1,10 @@ - + 4.0.0 io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -25,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 @@ -237,8 +235,7 @@ - + io.nosqlbench.engine.cli.NBCLI diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 9664f160d..1ea3ab509 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 54280f347..6dfb9b86e 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index d30e3b1f3..84fbd6592 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 0957359b1..2599ce8e5 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 7ef528d72..d72700f7a 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index cd329ff8d..df32a3d6d 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 5a20d1e09..07ee184ee 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index e82e035bc..ab177f941 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-userlibs - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index cf11ea2f7..1e719e348 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench nb-annotations - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-userlibs - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 451f496da..04a00cfb7 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-docker - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 390edc0aa..c46f59d84 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 59d3a5640..20f31ccef 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 4.0.0 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.0.0-SNAPSHOT + 4.0.0 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 97db59a7d..fad6e5465 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 9d15529d8..31279c6da 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 3e628ac58..07ddf66d3 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index e96b5a2cd..9e392b334 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 3285a1086..ad3aad6b3 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -1,11 +1,9 @@ - + 4.0.0 io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 pom @@ -95,7 +93,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.0.0 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 69e28547f..3fd356bf5 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 43ec01752..a963ad059 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -1,13 +1,11 @@ - + 4.0.0 mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -33,7 +31,7 @@ io.nosqlbench nb-annotations - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/nb/pom.xml b/nb/pom.xml index a7fb4f804..b1d2c81f3 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -1,13 +1,11 @@ - + 4.0.0 mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -26,31 +24,31 @@ io.nosqlbench engine-rest - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-cli - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-docs - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-core - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench engine-extensions - 4.0.0-SNAPSHOT + 4.0.0 @@ -62,67 +60,67 @@ io.nosqlbench driver-web - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-kafka - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-diag - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-tcp - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-http - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-jmx - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-dsegraph-shaded - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-cql-shaded - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-cqlverify - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench driver-mongodb - 4.0.0-SNAPSHOT + 4.0.0 @@ -259,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.0.0-SNAPSHOT + 4.0.0 @@ -313,7 +311,7 @@ maven-enforcer-plugin - + diff --git a/pom.xml b/pom.xml index 6df766ae1..1c1e9e9ce 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.0.0 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 47d79cb23..3bcd6e425 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 nb-api io.nosqlbench virtdata-lang - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index a55f473ff..15e90d5c2 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 70ee7b286..fd5746fea 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 33701045b..a9b946651 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index db6f7bd2f..8bf958b91 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 5b8949cb7..83ff35ac9 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index dd826699a..f37e1e38e 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 8ae260df5..a6011ff1d 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-realer - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench virtdata-lib-random - 4.0.0-SNAPSHOT + 4.0.0 io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 virtdata-lib-basics io.nosqlbench - 4.0.0-SNAPSHOT + 4.0.0 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.0.0-SNAPSHOT + 4.0.0 From f9e509dd2570b900b6934a8ae09032cdab47f451 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 18:21:29 -0600 Subject: [PATCH 122/164] correct pom version for NB3 branch --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqld4/pom.xml | 8 +++---- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 +++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 ++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 +++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 2 +- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 38 +++++++++++++++++----------------- pom.xml | 2 +- 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 +++++++------- 35 files changed, 114 insertions(+), 114 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 7eebb773c..addd7fe67 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 7db495c03..caff96fff 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-cqld4/pom.xml b/driver-cqld4/pom.xml index a7ed99184..d70a761e7 100644 --- a/driver-cqld4/pom.xml +++ b/driver-cqld4/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT @@ -61,7 +61,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT compile diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index fa0ca8512..68fac6e23 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 806dbf7b5..304172733 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index fdf041a23..f1451a003 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -6,7 +6,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -25,13 +25,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 9664f160d..10bf110de 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 54280f347..00337427d 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index d30e3b1f3..e4c8065d0 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 0957359b1..85fa3ac0b 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 7ef528d72..8447148d9 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index cd329ff8d..9d23bd505 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 5a20d1e09..34e38784a 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index e82e035bc..0f81c8e90 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index cf11ea2f7..1cd98c9b1 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench nb-annotations - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 451f496da..463f8ae94 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench engine-docker - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 390edc0aa..451c83f02 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 59d3a5640..b957998b5 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench drivers-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 97db59a7d..2a91cc20c 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 9d15529d8..e2a68f43f 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 3e628ac58..d87c5fcf0 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index e96b5a2cd..4373bc771 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 3285a1086..3bea940b6 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -5,7 +5,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT pom diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 69e28547f..73f57f5b4 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 43ec01752..a874199c9 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -33,7 +33,7 @@ io.nosqlbench nb-annotations - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index a7fb4f804..44322a546 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -26,31 +26,31 @@ io.nosqlbench engine-rest - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench engine-cli - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench engine-docs - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench engine-core - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench engine-extensions - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT @@ -62,67 +62,67 @@ io.nosqlbench driver-web - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-kafka - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-stdout - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-diag - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-tcp - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-http - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-jmx - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-cql-shaded - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-cqlverify - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench driver-mongodb - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT @@ -246,7 +246,7 @@ io.nosqlbench driver-cqld4 - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT @@ -259,7 +259,7 @@ io.nosqlbench driver-mongodb - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/pom.xml b/pom.xml index 6df766ae1..4d307dc9b 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT mvn-defaults diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 47d79cb23..710855c82 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index a55f473ff..21ed67d3e 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 70ee7b286..4f5324cd0 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 33701045b..5d134970b 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index db6f7bd2f..2d4714a74 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 5b8949cb7..7f19ce429 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index dd826699a..fb5c46681 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 8ae260df5..53113ce74 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench virtdata-lib-realer - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench virtdata-api - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench virtdata-lib-random - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT virtdata-lib-basics io.nosqlbench - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.0.0-SNAPSHOT + 3.12.157-SNAPSHOT From 93e2675902881207ab1f4a8ac4a4a8930e21d2c0 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 18:33:42 -0600 Subject: [PATCH 123/164] reset version for nb3 --- RELEASENOTES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index faca36f0b..19cd881bb 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,6 @@ -- d865c03c (HEAD -> main, origin/main) make perf sensitive test less sensitive +- f9e509dd correct pom version for NB3 branch +- 3b4ecaca build testing +- d865c03c make perf sensitive test less sensitive - 0fb043e3 build testing - e334e456 build testing - 17251bb6 build testing From 0c01e5b3a728295797d7041413c2e33428b0b433 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Tue, 8 Dec 2020 01:49:03 +0000 Subject: [PATCH 124/164] [maven-release-plugin] prepare release nosqlbench-3.12.157 --- docsys/pom.xml | 6 ++--- driver-cql-shaded/pom.xml | 6 ++--- driver-cqlverify/pom.xml | 6 ++--- driver-diag/pom.xml | 6 ++--- driver-dsegraph-shaded/pom.xml | 13 ++++------- driver-http/pom.xml | 6 ++--- driver-jmx/pom.xml | 6 ++--- driver-kafka/pom.xml | 6 ++--- driver-mongodb/pom.xml | 6 ++--- driver-stdout/pom.xml | 6 ++--- driver-tcp/pom.xml | 8 +++---- driver-web/pom.xml | 6 ++--- drivers-api/pom.xml | 6 ++--- engine-api/pom.xml | 10 ++++---- engine-cli/pom.xml | 6 ++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 +++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 8 +++---- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 8 +++---- nb/pom.xml | 42 ++++++++++++++++------------------ pom.xml | 4 ++-- 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 ++++++------- 34 files changed, 117 insertions(+), 126 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index addd7fe67..cfd503722 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.157-SNAPSHOT + 3.12.157 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index caff96fff..8290a1298 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 68fac6e23..36e0b5082 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 304172733..8de4463b5 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index f1451a003..897522958 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -1,12 +1,10 @@ - + 4.0.0 io.nosqlbench mvn-defaults - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -25,13 +23,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 @@ -237,8 +235,7 @@ - + io.nosqlbench.engine.cli.NBCLI diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 10bf110de..0ff8c4e4c 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 00337427d..d60b14d2a 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index e4c8065d0..814679ae1 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-stdout - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 85fa3ac0b..4cf9adab2 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 8447148d9..51cc09638 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 9d23bd505..e49d9e9fc 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-stdout - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 34e38784a..1a4617a97 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 0f81c8e90..5644d62e3 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench virtdata-userlibs - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 1cd98c9b1..e8884a792 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench nb-annotations - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench virtdata-userlibs - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 463f8ae94..6da0de95c 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench engine-docker - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 451c83f02..1fb71a8c5 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index b957998b5..43da62793 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench drivers-api - 3.12.157-SNAPSHOT + 3.12.157 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 3.12.157-SNAPSHOT + 3.12.157 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 2a91cc20c..f1611d657 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index e2a68f43f..b791f022b 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index d87c5fcf0..c365ba7d8 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 4373bc771..d139c2e69 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 3bea940b6..41cc6b7b4 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -1,11 +1,9 @@ - + 4.0.0 io.nosqlbench mvn-defaults - 3.12.157-SNAPSHOT + 3.12.157 pom @@ -95,7 +93,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.157 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 73f57f5b4..1a4ed2c96 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index a874199c9..91d462733 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -1,13 +1,11 @@ - + 4.0.0 mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -33,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/nb/pom.xml b/nb/pom.xml index 44322a546..b8fe9921f 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -1,13 +1,11 @@ - + 4.0.0 mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -26,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench engine-cli - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench engine-docs - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench engine-core - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench engine-extensions - 3.12.157-SNAPSHOT + 3.12.157 @@ -62,67 +60,67 @@ io.nosqlbench driver-web - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-kafka - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-stdout - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-diag - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-tcp - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-http - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-jmx - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-dsegraph-shaded - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-cql-shaded - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-cqlverify - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench driver-mongodb - 3.12.157-SNAPSHOT + 3.12.157 @@ -259,7 +257,7 @@ io.nosqlbench driver-mongodb - 3.12.157-SNAPSHOT + 3.12.157 @@ -313,7 +311,7 @@ maven-enforcer-plugin - + diff --git a/pom.xml b/pom.xml index 4d307dc9b..23fc6a28f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.157 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 710855c82..6fa49f112 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 nb-api io.nosqlbench virtdata-lang - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 21ed67d3e..fdab2781f 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 4f5324cd0..229625885 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 5d134970b..6f03deea9 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench virtdata-lib-basics - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 2d4714a74..c76d43567 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench virtdata-lib-basics - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 7f19ce429..a20843b6d 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index fb5c46681..f536c5819 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.157-SNAPSHOT + 3.12.157 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 53113ce74..fe9667f06 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench virtdata-lib-realer - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench virtdata-api - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench virtdata-lib-random - 3.12.157-SNAPSHOT + 3.12.157 io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 virtdata-lib-basics io.nosqlbench - 3.12.157-SNAPSHOT + 3.12.157 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.157-SNAPSHOT + 3.12.157 From b15a8bb90556584f4dcc7412b0dd6f4bee4c2c86 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Tue, 8 Dec 2020 01:49:10 +0000 Subject: [PATCH 125/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index cfd503722..bdf2e880d 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.157 + 3.12.158-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 8290a1298..245fd3e74 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 36e0b5082..b94ca41c4 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 8de4463b5..84c42e6cd 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 897522958..9d5d743f8 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 0ff8c4e4c..198dc0b37 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index d60b14d2a..5ee53d967 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 814679ae1..6f0faa9ed 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-stdout - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 4cf9adab2..1cf4b94a2 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 51cc09638..f8df289cb 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index e49d9e9fc..be9d339eb 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-stdout - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 1a4617a97..11fbd001a 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 5644d62e3..9b6efaea7 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index e8884a792..cf0c0076a 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench nb-annotations - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 6da0de95c..0edf257d6 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench engine-docker - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 1fb71a8c5..17939e4fb 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 43da62793..16c52475a 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench drivers-api - 3.12.157 + 3.12.158-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 3.12.157 + 3.12.158-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index f1611d657..d94a8b0f6 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index b791f022b..e4124ef77 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index c365ba7d8..2af07873d 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index d139c2e69..745c55266 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 41cc6b7b4..57ff08417 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 3.12.157 + 3.12.158-SNAPSHOT pom @@ -93,7 +93,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-3.12.157 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 1a4ed2c96..ce053cd57 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 91d462733..5648e89cd 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index b8fe9921f..890779ad7 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench engine-cli - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench engine-docs - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench engine-core - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench engine-extensions - 3.12.157 + 3.12.158-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-kafka - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-stdout - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-diag - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-tcp - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-http - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-jmx - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-cql-shaded - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-cqlverify - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench driver-mongodb - 3.12.157 + 3.12.158-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/pom.xml b/pom.xml index 23fc6a28f..124af6087 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-3.12.157 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 6fa49f112..9c4a19bcc 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index fdab2781f..7728f8636 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 229625885..014a28de1 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 6f03deea9..f294ba5e2 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index c76d43567..4e7c10a1f 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index a20843b6d..83dd94f2c 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index f536c5819..1b14ee6b3 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.157 + 3.12.158-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index fe9667f06..7c2140152 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench virtdata-lib-realer - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench virtdata-api - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench virtdata-lib-random - 3.12.157 + 3.12.158-SNAPSHOT io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT virtdata-lib-basics io.nosqlbench - 3.12.157 + 3.12.158-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.157 + 3.12.158-SNAPSHOT From b23338583ef0fffa82dffe6e1c10bb867efaa792 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 20:19:08 -0600 Subject: [PATCH 126/164] make docker test non-pty --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8c8133c0d..e835c049f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -183,7 +183,7 @@ jobs: - name: sanity check docker image run: | - docker run --rm -i -t nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version + docker run --rm nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version - name: docker push uses: docker/build-push-action@v2 From 9c7f87b881a35d41b54340a22a116110e2d5fc72 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 20:19:22 -0600 Subject: [PATCH 127/164] fix build issue --- RELEASENOTES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 19cd881bb..2c9fb84e6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,3 +1,5 @@ +- b2333858 (HEAD -> main) make docker test non-pty +- 93e26759 (origin/main) reset version for nb3 - f9e509dd correct pom version for NB3 branch - 3b4ecaca build testing - d865c03c make perf sensitive test less sensitive From 4f6fbf01f495520ae771d62506519e97a04b7648 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 20:30:50 -0600 Subject: [PATCH 128/164] reorder build steps --- .github/workflows/release.yml | 93 ++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e835c049f..a10f5ff2f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -47,6 +47,10 @@ jobs: - name: set git email run: git config --global user.name "${{ secrets.NBDROID_NAME }}" + + + + - name: free disk space run: | sudo swapoff -a @@ -89,7 +93,19 @@ jobs: summary="${summary//$'\r'/'%0D'}" echo "::set-output name=release_summary::$summary" - - name: prepare release + - name: select release type from branch name + run: | + current_branch=$(git rev-parse --abbrev-ref HEAD) + if [[ ${current_branch} == *"-rc"* ]] + then + echo "PRERELEASE=true" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV + else + echo "PRERELEASE=false" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV + fi + + - name: prepare Maven release run: scripts/release-prepare.sh env: RELEASE_BRANCH_NAME: "main" @@ -106,6 +122,29 @@ jobs: MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} + - name: Setup docker buildx + uses: docker/setup-buildx-action@v1 + + - name: docker hub login + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: docker test build + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + pull: true + push: false + load: true + tags: ${{ env.DOCKER_TAGS }} + + - name: sanity check docker image + run: | + docker run --rm nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version + - name: bundle integration test logs run: | pwd @@ -119,8 +158,7 @@ jobs: name: itlogs path: itlogs - - - name: perform release + - name: perform Maven release run: scripts/release-perform.sh continue-on-error: true env: @@ -150,42 +188,7 @@ jobs: name: binaries path: staging - - name: select release type from branch name - run: | - current_branch=$(git rev-parse --abbrev-ref HEAD) - if [[ ${current_branch} == *"-rc"* ]] - then - echo "PRERELEASE=true" >> $GITHUB_ENV - echo "DOCKER_TAGS=nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV - else - echo "PRERELEASE=false" >> $GITHUB_ENV - echo "DOCKER_TAGS=nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV - fi - - - name: Setup docker buildx - uses: docker/setup-buildx-action@v1 - - - name: docker hub login - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: docker build - uses: docker/build-push-action@v2 - with: - context: . - file: Dockerfile - pull: true - push: false - load: true - tags: ${{ env.DOCKER_TAGS }} - - - name: sanity check docker image - run: | - docker run --rm nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version - - - name: docker push + - name: docker push to hub uses: docker/build-push-action@v2 with: context: . @@ -203,8 +206,8 @@ jobs: name: guidebook path: guidebook - - name: create release - id: create_release + - name: create github release + id: create_github_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -215,24 +218,24 @@ jobs: prerelease: ${{ env.PRERELEASE }} body: ${{ steps.prepare_summary.outputs.release_summary }} - - name: upload nb.jar + - name: upload nb.jar to github release id: upload-nb-jar uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - upload_url: ${{ steps.create_release.outputs.upload_url }} + upload_url: ${{ steps.create_github_release.outputs.upload_url }} asset_path: nb/target/nb.jar asset_name: nb.jar asset_content_type: application/octet-stream - - name: upload nb binary + - name: upload nb binary to github release id: upload-nb-binary uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - upload_url: ${{ steps.create_release.outputs.upload_url }} + upload_url: ${{ steps.create_github_release.outputs.upload_url }} asset_path: nb/target/nb asset_name: nb asset_content_type: application/octet-stream From 3771fcc7948e94e9dd35941c8f938e5412c11d3a Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 20:31:09 -0600 Subject: [PATCH 129/164] test release build --- RELEASENOTES.md | 75 ++----------------------------------------------- 1 file changed, 3 insertions(+), 72 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 2c9fb84e6..45c02288e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,72 +1,3 @@ -- b2333858 (HEAD -> main) make docker test non-pty -- 93e26759 (origin/main) reset version for nb3 -- f9e509dd correct pom version for NB3 branch -- 3b4ecaca build testing -- d865c03c make perf sensitive test less sensitive -- 0fb043e3 build testing -- e334e456 build testing -- 17251bb6 build testing -- ecaeab14 build testing -- 633cbea7 test build scripts -- 6048be95 fix broken autoformat -- c119ec14 test build scripts -- 2b17cdcc fix broken autoformat -- d00a50f1 test build scripts -- 3fa958c9 update docker actions and add sanity check -- d740078c fixing build -- 82d5e021 fix workload typo -- 2148a24c Stabilize NB3 builds -- 040db478 backport github actions breaking change fix -- 3f4d1304 build NB3 with J14 -- 89c15d38 backport github breaking change fixes -- 8cce0173 backport auto pre-release on -rc branches -- daea786c leave source and targets at J11 and runtime at J14 for NB3 -- 2bfe24eb backport auto pre-releases on -rc branches -- d089ff24 document Java version references in project -- 70f22ad8 support J14 or J15 in appimage build -- e4f325c4 disable test which is present in feature branch -- 8a0b326f (origin/dependabot/maven/mvn-defaults/jetty.version-9.4.35.v20201120) Bump jetty.version in /mvn-defaults -- 78463838 make main brain build cleanly again -- 608d1f72 Update DOWNLOADS.md -- 3d2ff55f auto create apikey -- cfa92eab package organization -- 2ab118f4 package organization -- a23808b3 update appimage build script for j15 -- 7b0e37ab add metrics manifest to polyglot -- 7e6aa1a2 bump source and target to Java 15 -- 2752fa50 bump major version to 4.0.0-SNAPSHOT -- 7e880b91 experimental grammar -- 3f65a054 console friendly metrics summary -- 146686e0 simplify custom logging configuration -- d0592454 typos, alignment, cruft -- 45307081 backfill missing default -- b7c24642 centralize log4j2 and slf4j stub config -- 2215fc94 typos, alignment, cruft -- 0ef26c82 update logger deps for dsegraph -- 975ea40d merge fixups -- ae419a26 logging annotator module -- 6c0632fb grafana annotator module -- 317ffab4 api for annotations -- c2cec235 allow configurable delimiter in params parser -- a09efbe9 consolidate to log4j2 -- 6a523dc4 remove slf4j -- 67eefbbe fix activity run state bug -- a88d0376 docker-metrics improvements -- 667fbdba add log4j2 programmatic configuration -- 60fa0529 add default log4j configs -- a3e0739a add FixedValues for double -- fa85704b add SPI impl selector field 'selector' -- 4996d206 config API improvements -- e0498ff2 docs updates -- e9d2b489 environment API improvements -- 897a8389 generalize log level to NB -- a97db87f include JSON support in project API -- 2c09b8ae typos, culling, and alignment -- a3a51381 update inactive coords -- 83136139 generalize op source -- 089a29d8 grafana api tokens -- e6e70f71 support DoubleToIntFunction in function matrix -- 52b029f8 typos, culling, and alignment -- 4d65dc62 update inactive coords -- 55edec53 add ToByteBuffer binding function -- 93e10e6a config model improvements +- 4f6fbf01 (HEAD -> main) reorder build steps +- 9c7f87b8 fix build issue +- b2333858 make docker test non-pty From d92a964fedbe853be94006345bbfb2c00e9c5903 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Tue, 8 Dec 2020 03:24:12 +0000 Subject: [PATCH 130/164] [maven-release-plugin] prepare release nosqlbench-3.12.158 --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index bdf2e880d..d154b2aa2 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.158-SNAPSHOT + 3.12.158 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 245fd3e74..00f5e245d 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index b94ca41c4..73b16127f 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 84c42e6cd..1859cbf8d 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 9d5d743f8..17e02c677 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 198dc0b37..2aee8ebe5 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 5ee53d967..7728a81a0 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 6f0faa9ed..2b9a5521a 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-stdout - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 1cf4b94a2..97cc07446 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index f8df289cb..38ece49e8 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index be9d339eb..c1db571e0 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-stdout - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 11fbd001a..5e97e0239 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 9b6efaea7..76f49df46 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench virtdata-userlibs - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index cf0c0076a..90a9fe1ce 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench nb-annotations - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench virtdata-userlibs - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 0edf257d6..1f723276b 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench engine-docker - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 17939e4fb..50c22fbc4 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 16c52475a..668b9fe79 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench drivers-api - 3.12.158-SNAPSHOT + 3.12.158 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 3.12.158-SNAPSHOT + 3.12.158 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index d94a8b0f6..4189f61d5 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index e4124ef77..8f397b882 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 2af07873d..d6d8a79ad 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 745c55266..997eb2be1 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 57ff08417..b899cb371 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 3.12.158-SNAPSHOT + 3.12.158 pom @@ -93,7 +93,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.158 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index ce053cd57..6a425392a 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 5648e89cd..45f787e34 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/nb/pom.xml b/nb/pom.xml index 890779ad7..f370bd4b1 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench engine-cli - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench engine-docs - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench engine-core - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench engine-extensions - 3.12.158-SNAPSHOT + 3.12.158 @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-kafka - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-stdout - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-diag - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-tcp - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-http - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-jmx - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-dsegraph-shaded - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-cql-shaded - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-cqlverify - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench driver-mongodb - 3.12.158-SNAPSHOT + 3.12.158 @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/pom.xml b/pom.xml index 124af6087..e2b22271f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.158 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 9c4a19bcc..494951fcb 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 nb-api io.nosqlbench virtdata-lang - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 7728f8636..9903bdec5 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 014a28de1..56c7372d8 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index f294ba5e2..e7df131ff 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench virtdata-lib-basics - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 4e7c10a1f..e396de6fe 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench virtdata-lib-basics - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 83dd94f2c..26b88117b 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 1b14ee6b3..c81f2e5d6 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.158-SNAPSHOT + 3.12.158 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 7c2140152..9b02aeec3 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench virtdata-lib-realer - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench virtdata-api - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench virtdata-lib-random - 3.12.158-SNAPSHOT + 3.12.158 io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 virtdata-lib-basics io.nosqlbench - 3.12.158-SNAPSHOT + 3.12.158 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.158-SNAPSHOT + 3.12.158 From 5f13cb3cf6bc019cfc111f3ba337228eb29cf7bc Mon Sep 17 00:00:00 2001 From: nb-droid Date: Tue, 8 Dec 2020 03:24:19 +0000 Subject: [PATCH 131/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index d154b2aa2..74b4de48b 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.158 + 3.12.159-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 00f5e245d..7502653df 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 73b16127f..ec57b082b 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 1859cbf8d..49e9a5fd1 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 17e02c677..8ce0c2f3f 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 2aee8ebe5..8377364d0 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 7728a81a0..2e566a289 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 2b9a5521a..f8c1400ac 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-stdout - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 97cc07446..8599fa838 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 38ece49e8..e162769ee 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index c1db571e0..fad5155f4 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-stdout - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 5e97e0239..e8c3d8779 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 76f49df46..6c92115db 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 90a9fe1ce..d2232c8bd 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench nb-annotations - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 1f723276b..1f710b397 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench engine-docker - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 50c22fbc4..fdaa85807 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 668b9fe79..784302e7f 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench drivers-api - 3.12.158 + 3.12.159-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 3.12.158 + 3.12.159-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 4189f61d5..923ff7c84 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 8f397b882..191b3c503 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index d6d8a79ad..e4d72fb03 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 997eb2be1..356e376da 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index b899cb371..c9242760e 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 3.12.158 + 3.12.159-SNAPSHOT pom @@ -93,7 +93,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-3.12.158 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 6a425392a..8f7c504cc 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 45f787e34..1ede5b00a 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index f370bd4b1..9628c1aaa 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench engine-cli - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench engine-docs - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench engine-core - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench engine-extensions - 3.12.158 + 3.12.159-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-kafka - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-stdout - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-diag - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-tcp - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-http - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-jmx - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-cql-shaded - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-cqlverify - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench driver-mongodb - 3.12.158 + 3.12.159-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/pom.xml b/pom.xml index e2b22271f..94a9dd7ca 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-3.12.158 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 494951fcb..ed6474dfd 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 9903bdec5..ba3301d8d 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 56c7372d8..94d16c9d6 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index e7df131ff..0321981af 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index e396de6fe..0b77a033e 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 26b88117b..bfc8537fc 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index c81f2e5d6..ec69561e7 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.158 + 3.12.159-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 9b02aeec3..45002677c 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench virtdata-lib-realer - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench virtdata-api - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench virtdata-lib-random - 3.12.158 + 3.12.159-SNAPSHOT io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT virtdata-lib-basics io.nosqlbench - 3.12.158 + 3.12.159-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.158 + 3.12.159-SNAPSHOT From 5272aa4911152902628d20662ad7702e620624c4 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 7 Dec 2020 21:59:04 -0600 Subject: [PATCH 132/164] test build reordering --- RELEASENOTES.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 45c02288e..e69de29bb 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,3 +0,0 @@ -- 4f6fbf01 (HEAD -> main) reorder build steps -- 9c7f87b8 fix build issue -- b2333858 make docker test non-pty From 6070647cf6815db0a58819e33a7d4bb4533ed35b Mon Sep 17 00:00:00 2001 From: nb-droid Date: Tue, 8 Dec 2020 04:07:35 +0000 Subject: [PATCH 133/164] [maven-release-plugin] prepare release nosqlbench-3.12.159 --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 74b4de48b..f14f60158 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.159-SNAPSHOT + 3.12.159 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 7502653df..df744c120 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index ec57b082b..d1edb1cc0 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 49e9a5fd1..859884ee8 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 8ce0c2f3f..5f885be25 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 8377364d0..9d1d0d1e9 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 2e566a289..5abf3cc0c 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index f8c1400ac..863d45dc8 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-stdout - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 8599fa838..728126e4f 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index e162769ee..ebc89cf7c 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index fad5155f4..da0e368fd 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-stdout - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index e8c3d8779..c9e3e24c5 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 6c92115db..fa53fabcd 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench virtdata-userlibs - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index d2232c8bd..5e31c5ba8 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench nb-annotations - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench virtdata-userlibs - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 1f710b397..c217785c5 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench engine-docker - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index fdaa85807..61699dd42 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 784302e7f..bc0843076 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench drivers-api - 3.12.159-SNAPSHOT + 3.12.159 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 3.12.159-SNAPSHOT + 3.12.159 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 923ff7c84..36ae6fc01 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 191b3c503..66495b223 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index e4d72fb03..3e18be801 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 356e376da..3d55ed267 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index c9242760e..3dc922420 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 3.12.159-SNAPSHOT + 3.12.159 pom @@ -93,7 +93,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.159 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 8f7c504cc..012248902 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 1ede5b00a..2460bc101 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/nb/pom.xml b/nb/pom.xml index 9628c1aaa..e8ebeacfe 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench engine-cli - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench engine-docs - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench engine-core - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench engine-extensions - 3.12.159-SNAPSHOT + 3.12.159 @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-kafka - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-stdout - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-diag - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-tcp - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-http - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-jmx - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-dsegraph-shaded - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-cql-shaded - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-cqlverify - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench driver-mongodb - 3.12.159-SNAPSHOT + 3.12.159 @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/pom.xml b/pom.xml index 94a9dd7ca..f8da72c3a 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-3.12.159 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index ed6474dfd..3540e2601 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 nb-api io.nosqlbench virtdata-lang - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index ba3301d8d..c0b078440 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 94d16c9d6..755463a40 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 0321981af..cb5bcbc97 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench virtdata-lib-basics - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 0b77a033e..003a0e3b0 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench virtdata-lib-basics - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index bfc8537fc..3ff74c78b 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index ec69561e7..938a00714 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.159-SNAPSHOT + 3.12.159 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 45002677c..05f4d49f4 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench virtdata-lib-realer - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench virtdata-api - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench virtdata-lib-random - 3.12.159-SNAPSHOT + 3.12.159 io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 virtdata-lib-basics io.nosqlbench - 3.12.159-SNAPSHOT + 3.12.159 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.159-SNAPSHOT + 3.12.159 From cbe2c51b23d0faf0ff28eb782e14bd2f68da5cb7 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Tue, 8 Dec 2020 04:07:41 +0000 Subject: [PATCH 134/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index f14f60158..1d8744a79 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 3.12.159 + 3.12.160-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index df744c120..455a6769e 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index d1edb1cc0..0c6827e29 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 859884ee8..c251fb3ea 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 5f885be25..1737368c2 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 9d1d0d1e9..21500ad1a 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 5abf3cc0c..efd475d99 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 863d45dc8..2790b180e 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-stdout - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 728126e4f..c22d56037 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index ebc89cf7c..7c112009f 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index da0e368fd..43a4349ff 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-stdout - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index c9e3e24c5..bdcf5f5ac 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index fa53fabcd..0a7a6fce0 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 5e31c5ba8..4ef4e27aa 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench nb-annotations - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench virtdata-userlibs - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index c217785c5..d21d57308 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench engine-docker - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 61699dd42..05532cf79 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index bc0843076..51e02fed3 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench drivers-api - 3.12.159 + 3.12.160-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 3.12.159 + 3.12.160-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 36ae6fc01..ebbeb5fa4 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 66495b223..1044de514 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 3e18be801..afd0d9a16 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 3d55ed267..d1d8b01c6 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 3dc922420..f0c771c23 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 3.12.159 + 3.12.160-SNAPSHOT pom @@ -93,7 +93,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-3.12.159 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 012248902..b7921e8e2 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 2460bc101..1d4853a47 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index e8ebeacfe..e90c14f99 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench engine-cli - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench engine-docs - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench engine-core - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench engine-extensions - 3.12.159 + 3.12.160-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-kafka - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-stdout - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-diag - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-tcp - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-http - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-jmx - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-cql-shaded - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-cqlverify - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench driver-mongodb - 3.12.159 + 3.12.160-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/pom.xml b/pom.xml index f8da72c3a..21183db09 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-3.12.159 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 3540e2601..a6e944b9d 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index c0b078440..c7a86f3b1 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 755463a40..59f52c38e 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index cb5bcbc97..115f5f4e2 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 003a0e3b0..03180bb5c 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench virtdata-lib-basics - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 3ff74c78b..142a532a9 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 938a00714..8ebba9b05 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 3.12.159 + 3.12.160-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 05f4d49f4..f34cb4e79 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench virtdata-lib-realer - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench virtdata-api - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench virtdata-lib-random - 3.12.159 + 3.12.160-SNAPSHOT io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT virtdata-lib-basics io.nosqlbench - 3.12.159 + 3.12.160-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 3.12.159 + 3.12.160-SNAPSHOT From fa78e27fc0943a1b1d602fc137989c5eb979b4ec Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 11:33:36 -0600 Subject: [PATCH 135/164] set NB4 to Java 15 --- .github/workflows/release.yml | 434 ++++++++++-------- Dockerfile | 2 +- devdocs/java_versions.md | 18 + .../dashboards/nb4-default-dashboard.json | 84 +++- mvn-defaults/pom.xml | 2 - nb/build-bin.sh | 72 ++- 6 files changed, 367 insertions(+), 245 deletions(-) create mode 100644 devdocs/java_versions.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5e51ee217..f11fca49e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,205 +10,235 @@ jobs: runs-on: ubuntu-18.04 steps: - - name: checkout repo - uses: actions/checkout@v2 + - name: checkout repo + uses: actions/checkout@v2 - - name: setup java - uses: actions/setup-java@v1 - with: - java-version: '15' - java-package: jdk - architecture: x64 + - name: setup java + uses: actions/setup-java@v1 + with: + java-version: '15' + java-package: jdk + architecture: x64 - - name: avoid release loop - run: scripts/avoid-release-loop.sh - env: - GIT_RELEASE_BOT_NAME: "nb-droid" + - name: avoid release loop + run: scripts/avoid-release-loop.sh + env: + GIT_RELEASE_BOT_NAME: "nb-droid" - - name: capture tty for gpg - run: | - echo "TTY="$(tty) >> $GITHUB_ENV - echo "GPG_TTY="$(tty) >> $GITHUB_ENV - # echo "::set-env name=TTY::"$(tty) - # echo "::set-env name=GPG_TTY::"$(tty) + - name: capture tty for gpg + run: | + echo "TTY="$(tty) >> $GITHUB_ENV + echo "GPG_TTY="$(tty) >> $GITHUB_ENV + # echo "::set-env name=TTY::"$(tty) + # echo "::set-env name=GPG_TTY::"$(tty) - - name: initialize gpg - run: | - set -x - echo "${{ secrets.GITHUB_GPG_KEY }}" | base64 -d > private.key - gpg --import --batch ./private.key - rm ./private.key - echo "gnupg files:" - ls -l ~/.gnupg/ + - name: initialize gpg + run: | + set -x + echo "${{ secrets.GITHUB_GPG_KEY }}" | base64 -d > private.key + gpg --import --batch ./private.key + rm ./private.key + echo "gnupg files:" + ls -l ~/.gnupg/ - - name: set git username - run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" + - name: set git username + run: git config --global user.email "${{ secrets.NBDROID_EMAIL }}" - - name: set git email - run: git config --global user.name "${{ secrets.NBDROID_NAME }}" - - - name: free disk space - run: | - sudo swapoff -a - sudo rm -f /swapfile - sudo apt clean - docker rmi $(docker image ls -aq) - df -h - - - name: Cache Maven packages - uses: actions/cache@v1 - with: - path: ~/.m2 - key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-m2 - - - name: read versions - run: | - set -x - CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - RELEASE_VERSION=${CURRENT_VERSION%%-SNAPSHOT} - BASE_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f1-2) - MINOR_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f3) - NEXT_MINOR_VERSION=$(( MINOR_VERSION+1)) - NEXT_SNAPSHOT="${BASE_VERSION}.${NEXT_MINOR_VERSION}-SNAPSHOT" - RELEASE_TAGNAME="nosqlbench-${RELEASE_VERSION}" - echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT}" >> $GITHUB_ENV - echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV - echo "RELEASE_TAGNAME=${RELEASE_TAGNAME}" >> $GITHUB_ENV - # echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" - # echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" - # echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" - - - name: prepare release summary - id: prepare_summary - run: | - #summary=$(scripts/release-notes.sh) - summary=$(cat RELEASENOTES.md) - summary="${summary//'%'/'%25'}" - summary="${summary//$'\n'/'%0A'}" - summary="${summary//$'\r'/'%0D'}" - echo "::set-output name=release_summary::$summary" - - - name: prepare release - run: scripts/release-prepare.sh - env: - RELEASE_BRANCH_NAME: "main" - PRERELEASE_BRANCH_PATTERN: "-rc" - GIT_RELEASE_BOT_NAME: "nb-droid" - GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} - ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} - GPG_ENABLED: "true" - GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} - GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} - GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} - MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} - MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} - - - name: bundle integration test logs - run: | - pwd - find nb - mkdir -p itlogs/nb - cp -R nb/logs itlogs/nb - - - name: upload integration test logs - uses: actions/upload-artifact@v1 - with: - name: itlogs - path: itlogs + - name: set git email + run: git config --global user.name "${{ secrets.NBDROID_NAME }}" - - name: perform release - run: scripts/release-perform.sh - continue-on-error: true - env: - RELEASE_BRANCH_NAME: "main" - GIT_RELEASE_BOT_NAME: "nb-droid" - GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} - ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} - GPG_ENABLED: "true" - GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} - GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} - GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} - MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} - MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} - - name: bundle artifacts - run: | - pwd - ls -l - mkdir staging - cp nb/target/nb.jar nb/target/nb staging - - name: upload artifacts - uses: actions/upload-artifact@v1 - with: - name: binaries - path: staging - - name: docker push - uses: docker/build-push-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: nosqlbench/nosqlbench - tags: latest, ${{ env.RELEASE_VERSION }} - tag_with_ref: false + - name: free disk space + run: | + sudo swapoff -a + sudo rm -f /swapfile + sudo apt clean + docker rmi $(docker image ls -aq) + df -h - - name: bundle guidebook - run: mkdir guidebook && cp -R nb/target/guidebook guidebook + - name: Cache Maven packages + uses: actions/cache@v1 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 - - name: upload guidebook - uses: actions/upload-artifact@v1 - with: - name: guidebook - path: guidebook + - name: read versions + run: | + set -x + CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + RELEASE_VERSION=${CURRENT_VERSION%%-SNAPSHOT} + BASE_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f1-2) + MINOR_VERSION=$(echo "$RELEASE_VERSION" | cut -d'.' -f3) + NEXT_MINOR_VERSION=$(( MINOR_VERSION+1)) + NEXT_SNAPSHOT="${BASE_VERSION}.${NEXT_MINOR_VERSION}-SNAPSHOT" + RELEASE_TAGNAME="nosqlbench-${RELEASE_VERSION}" + echo "NEXT_SNAPSHOT=${NEXT_SNAPSHOT}" >> $GITHUB_ENV + echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV + echo "RELEASE_TAGNAME=${RELEASE_TAGNAME}" >> $GITHUB_ENV + # echo "::set-env name=NEXT_SNAPSHOT::${NEXT_SNAPSHOT}" + # echo "::set-env name=RELEASE_VERSION::${RELEASE_VERSION}" + # echo "::set-env name=RELEASE_TAGNAME::${RELEASE_TAGNAME}" - - name: select release type from branch name - run: | - current_branch=$(git rev-parse --abbrev-ref HEAD) - if [[ ${current_branch} == *"-rc"* ]] - then echo "PRERELEASE=true" >> $GITHUB_ENV - else echo "PRERELEASE=false" >> $GITHUB_ENV - fi + - name: prepare release summary + id: prepare_summary + run: | + #summary=$(scripts/release-notes.sh) + summary=$(cat RELEASENOTES.md) + summary="${summary//'%'/'%25'}" + summary="${summary//$'\n'/'%0A'}" + summary="${summary//$'\r'/'%0D'}" + echo "::set-output name=release_summary::$summary" - - name: create release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ env.RELEASE_TAGNAME }} - release_name: Release ${{ env.RELEASE_TAGNAME }} - draft: false - prerelease: ${{ env.PRERELEASE }} - body: ${{ steps.prepare_summary.outputs.release_summary }} + - name: select release type from branch name + run: | + current_branch=$(git rev-parse --abbrev-ref HEAD) + if [[ ${current_branch} == *"-rc"* ]] + then + echo "PRERELEASE=true" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV + else + echo "PRERELEASE=false" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:latest,nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }}" >> $GITHUB_ENV + fi - - name: upload nb.jar - id: upload-nb-jar - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: nb/target/nb.jar - asset_name: nb.jar - asset_content_type: application/octet-stream + - name: prepare Maven release + run: scripts/release-prepare.sh + env: + RELEASE_BRANCH_NAME: "main" + PRERELEASE_BRANCH_PATTERN: "-rc" + GIT_RELEASE_BOT_NAME: "nb-droid" + GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} + ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} + GPG_ENABLED: "true" + GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} + GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} + GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} + MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} + MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} - - name: upload nb binary - id: upload-nb-binary - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: nb/target/nb - asset_name: nb - asset_content_type: application/octet-stream + - name: Setup docker buildx + uses: docker/setup-buildx-action@v1 + + - name: docker hub login + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: docker test build + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + pull: true + push: false + load: true + tags: ${{ env.DOCKER_TAGS }} + + - name: sanity check docker image + run: | + docker run --rm nosqlbench/nosqlbench:${{ env.RELEASE_VERSION }} --version + + - name: bundle integration test logs + run: | + pwd + find nb + mkdir -p itlogs/nb + cp -R nb/logs itlogs/nb + + - name: upload integration test logs + uses: actions/upload-artifact@v1 + with: + name: itlogs + path: itlogs + + - name: perform Maven release + run: scripts/release-perform.sh + continue-on-error: true + env: + RELEASE_BRANCH_NAME: "main" + GIT_RELEASE_BOT_NAME: "nb-droid" + GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }} + ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }} + GPG_ENABLED: "true" + GPG_KEY_ID: ${{ secrets.GITHUB_GPG_KEY_ID }} + GPG_KEY: ${{ secrets.GITHUB_GPG_KEY }} + GPG_SERVER_NAME: ${{ secrets.GPG_SERVER_NAME }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_REPO_SERVER_ID: ${{ secrets.MAVEN_REPO_SERVER_ID }} + MAVEN_REPO_SERVER_USERNAME: ${{ secrets.MVN_REPO_PRIVATE_REPO_USER }} + MAVEN_REPO_SERVER_PASSWORD: ${{ secrets.MVN_REPO_PRIVATE_REPO_PASSWORD }} + + - name: bundle artifacts + run: | + pwd + ls -l + mkdir staging + cp nb/target/nb.jar nb/target/nb staging + + - name: upload artifacts + uses: actions/upload-artifact@v1 + with: + name: binaries + path: staging + + - name: docker push to hub + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + pull: true + push: true + tags: ${{ env.DOCKER_TAGS }} + + - name: bundle guidebook + run: mkdir guidebook && cp -R nb/target/guidebook guidebook + + - name: upload guidebook + uses: actions/upload-artifact@v1 + with: + name: guidebook + path: guidebook + + - name: create github release + id: create_github_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.RELEASE_TAGNAME }} + release_name: Release ${{ env.RELEASE_TAGNAME }} + draft: false + prerelease: ${{ env.PRERELEASE }} + body: ${{ steps.prepare_summary.outputs.release_summary }} + + - name: upload nb.jar to github release + id: upload-nb-jar + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_github_release.outputs.upload_url }} + asset_path: nb/target/nb.jar + asset_name: nb.jar + asset_content_type: application/octet-stream + + - name: upload nb binary to github release + id: upload-nb-binary + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_github_release.outputs.upload_url }} + asset_path: nb/target/nb + asset_name: nb + asset_content_type: application/octet-stream docs: needs: release @@ -224,8 +254,8 @@ jobs: - name: download guidebook uses: actions/download-artifact@v1 with: - name: guidebook - path: guidebook + name: guidebook + path: guidebook - run: ls -la @@ -234,30 +264,30 @@ jobs: NBDROID_NAME: ${{ secrets.NBDROID_NAME }} NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} run: | - git clone https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git nosqlbench-docs - cd nosqlbench-docs - echo "files listing" - find . - git remote set-url origin https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git - git remote -v + git clone https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git nosqlbench-docs + cd nosqlbench-docs + echo "files listing" + find . + git remote set-url origin https://${{secrets.NBDROID_NAME}}:${{secrets.NBDROID_TOKEN}}@github.com/nosqlbench/nosqlbench-docs.git + git remote -v - name: push changes env: NBDROID_NAME: ${{ secrets.NBDROID_NAME }} NBDROID_TOKEN: ${{ secrets.NBDROID_TOKEN }} run: | - rsync -av --delete guidebook/guidebook/ nosqlbench-docs/docs/ - echo "docs.nosqlbench.io" > nosqlbench-docs/docs/CNAME - cd nosqlbench-docs - git add docs - git add -u - CHANGES=$(git status --porcelain 2>/dev/null| wc -l) - echo "found $CHANGES to push for doc updates" - if (( $CHANGES > 0 )) - then - git commit -m"docs update for $GITHUB_REF" - git push - fi + rsync -av --delete guidebook/guidebook/ nosqlbench-docs/docs/ + echo "docs.nosqlbench.io" > nosqlbench-docs/docs/CNAME + cd nosqlbench-docs + git add docs + git add -u + CHANGES=$(git status --porcelain 2>/dev/null| wc -l) + echo "found $CHANGES to push for doc updates" + if (( $CHANGES > 0 )) + then + git commit -m"docs update for $GITHUB_REF" + git push + fi diff --git a/Dockerfile b/Dockerfile index 80d12e4f5..9d384545d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:14-alpine +FROM openjdk:15-alpine RUN apk --no-cache add curl COPY nb/target/nb.jar nb.jar diff --git a/devdocs/java_versions.md b/devdocs/java_versions.md new file mode 100644 index 000000000..538a2b734 --- /dev/null +++ b/devdocs/java_versions.md @@ -0,0 +1,18 @@ +# Java Version Updates + +This is a list of all the places that the Java version is referenced in +the NoSQLBench project. If you change versions or need to do +version-specific troubleshooting, this list will help. + +- In the Dockerfile, in the parent image "FROM" tag. + [here](../Dockerfile) +- In the Maven pom files, under `...`, `... + `, `...` + [here](../mvn-defaults/pom.xml) +- In some cases, a Maven variable '...` is used. + [here](../mvn-defaults/pom.xml) +- In the nb appimage build scripts under nb/build-bin.sh. + [here](../nb/build-bin.sh) +- In the github actions workflows for the Java runtime version + diff --git a/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json index 4e58484f8..141fec10a 100644 --- a/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json +++ b/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json @@ -47,6 +47,7 @@ "gnetId": null, "graphTooltip": 1, "id": null, + "iteration": 1607447891116, "links": [], "panels": [ { @@ -371,13 +372,13 @@ "steppedLine": false, "targets": [ { - "expr": "result{type=\"avg_rate\",avg_of=\"1m\"}", + "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-allops", "refId": "C" }, { - "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\"}", + "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-okops", "refId": "A" @@ -475,7 +476,7 @@ "steppedLine": false, "targets": [ { - "expr": "{__name__=~\"errorcounts.*\"}", + "expr": "{__name__=~\"errorcounts.*\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-{{error}}", "refId": "B" @@ -574,18 +575,18 @@ "steppedLine": false, "targets": [ { - "expr": "result_success{type=\"pctile\"}", + "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", "hide": false, "interval": "", "legendFormat": "{{alias}}-p{{pctile}}", "refId": "B" }, { - "expr": "cycles_servicetime{type=\"pctile\"}", - "hide": true, + "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", + "hide": false, "interval": "", - "legendFormat": "{{alias}}-{{pctile}}", - "refId": "A" + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "C" } ], "thresholds": [], @@ -680,7 +681,7 @@ "steppedLine": false, "targets": [ { - "expr": "tries{type=\"pctile\"}", + "expr": "tries{type=\"pctile\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-p{{pctile}}", "refId": "A" @@ -778,7 +779,7 @@ "steppedLine": false, "targets": [ { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\"}", + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", "refId": "A" @@ -877,7 +878,7 @@ "steppedLine": false, "targets": [ { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\"}", + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\",alias=\"$Alias\"}", "format": "time_series", "hide": false, "instant": false, @@ -981,13 +982,13 @@ "steppedLine": false, "targets": [ { - "expr": "result_success{type=\"pctile\",pctile=\"0\"}", + "expr": "result_success{type=\"pctile\",pctile=\"0\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-min", "refId": "B" }, { - "expr": "result_success{type=\"pctile\",pctile=\"100\"}", + "expr": "result_success{type=\"pctile\",pctile=\"100\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-max", "refId": "A" @@ -1085,7 +1086,7 @@ "steppedLine": false, "targets": [ { - "expr": "cycles_servicetime{type=\"counter\"}", + "expr": "cycles_servicetime{type=\"counter\",alias=\"$Alias\"}", "interval": "", "legendFormat": "{{alias}}-count", "refId": "C" @@ -1145,9 +1146,52 @@ { "allValue": null, "current": { - "selected": false, - "text": "CLI", - "value": "CLI" + "selected": true, + "tags": [], + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "prometheus", + "definition": "{appname=\"nosqlbench\"}", + "error": null, + "hide": 0, + "includeAll": true, + "label": "Alias", + "multi": true, + "name": "Alias", + "options": [ + { + "selected": true, + "text": "All", + "value": "$__all" + }, + { + "selected": false, + "text": "DIAG0", + "value": "DIAG0" + } + ], + "query": "{appname=\"nosqlbench\"}", + "refresh": 0, + "regex": "/.*alias=\"(\\w+)\".*/", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "selected": true, + "text": "Script", + "value": "Script" }, "error": null, "hide": 0, @@ -1172,12 +1216,12 @@ "value": "Scenario" }, { - "selected": false, + "selected": true, "text": "Script", "value": "Script" }, { - "selected": true, + "selected": false, "text": "Activity", "value": "Activity" }, @@ -1225,6 +1269,6 @@ "timezone": "", "title": "NB4 Dashboard", "uid": "aIIX1f6Wz", - "version": 6 + "version": 10 } } diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 8dfc49c8d..1a0b4fde4 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -11,8 +11,6 @@ UTF-8 nosqlbench - - 1.2.0 1.14 diff --git a/nb/build-bin.sh b/nb/build-bin.sh index 3f8fce4d3..d0acc8183 100755 --- a/nb/build-bin.sh +++ b/nb/build-bin.sh @@ -29,28 +29,60 @@ fi rsync -av appimage/skel/ "${APPDIR}/" cp target/nb.jar "${APPDIR}/usr/bin/nb.jar" - -if [ ! -d "cache/jre15" ] -then - printf "getting jre once into cache/jre15\n"; - mkdir -p cache - (cd cache && ( - if [ "$BUILD_OPENJ9" = "true" ] - then - wget -c wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz - tar -xf OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz - mv jdk-15.0.1+9-jre jre15 - rm OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz - else - wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz - tar xf OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz - mv jdk-15.0.1+9-jre jre15 - fi - )) -fi +JAVA_VERSION="15" mkdir -p "${APPDIR}/usr/bin/jre" -rsync -av cache/jre15/ "${APPDIR}/usr/bin/jre/" + +if [ "$JAVA_VERSION" == "15" ] +then + if [ ! -d "cache/jre15" ] ; then + printf "getting jre once into cache/jre15\n"; + mkdir -p cache + (cd cache && ( + if [ "$BUILD_OPENJ9" = "true" ] + then + wget -c wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + tar -xf OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + mv jdk-15.0.1+9-jre jre15 + rm OpenJDK15U-jre_x64_linux_openj9_linuxXL_2020-11-19-07-04.tar.gz + else + wget -c https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2020-11-19-07-04/OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz + tar xf OpenJDK15U-jre_x64_linux_hotspot_2020-11-19-07-04.tar.gz + mv jdk-15.0.1+9-jre jre15 + fi + )) + fi + rsync -av cache/jre15/ "${APPDIR}/usr/bin/jre/" +# Java 14 should run binaries targeted to Java 11 bytecode +elif [ "$JAVA_VERSION" == "14" ] ; then + if [ ! -d "cache/jre14" ] ; then + printf "getting jre once into cache/jre14\n"; + mkdir -p cache + (cd cache && ( + if [ "$BUILD_OPENJ9" = "true" ] + then + wget -c https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk14u-2020-04-27-07-27/OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz + tar xf OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz + mv jdk-14.0.1+7-jre jre14 + rm OpenJDK14U-jre_x64_linux_openj9_linuxXL_2020-04-27-07-27.tar.gz + else + wget -c https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk14u-2020-04-27-07-27/OpenJDK14U-jre_x64_linux_hotspot_2020-04-27-07-27.tar.gz + tar xf OpenJDK14U-jre_x64_linux_hotspot_2020-04-27-07-27.tar.gz + mv jdk-14.0.1+7-jre jre14 + fi + )) + fi + rsync -av cache/jre14/ "${APPDIR}/usr/bin/jre/" +else + printf "Unknown java version indicated in $0" + exit 2 + # wget -c https://github.com/AdoptOpenJDK/openjdk12-binaries/releases/download/jdk-12.0.2%2B10/OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz + # tar xf OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz + # mv jdk-12.0.2+10-jre jre + # rm OpenJDK12U-jre_x64_linux_hotspot_12.0.2_10.tar.gz +fi + + if [ ! -f "${APPDIR}/AppRun" ] then From 6d514cb644627e1524dbb2692f4c96a4fddd5a60 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 13:16:33 -0600 Subject: [PATCH 136/164] bump middle version number to required java version '15' --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 2 +- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 2 +- 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 +++++++-------- 34 files changed, 109 insertions(+), 109 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index fee955054..6cc1c6bf7 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 9c8b6608a..8b67ea668 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index c6e966a26..060e25d1f 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 048ef2c7b..ad34f43fc 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index afdb5776e..837013d64 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 18e157ad5..6cef1456b 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 1beda4170..50175afe6 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index a55b0971c..13c5702f8 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-stdout - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 77f49c46e..aec776f45 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index e225acb49..87a13a112 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index a43f0dd6f..ec52ff3f2 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-stdout - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 98215a9c2..b9748d1bc 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index f63682b9d..2fddd31eb 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index beea8a7e1..4cf32e487 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench nb-annotations - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 1cee2faed..5956e3794 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench engine-docker - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 3b83838cc..24a77823e 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index 787577544..f3b816118 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench drivers-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 7d4bf67a6..402278839 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 146886192..7b077293b 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 6028257b9..b62ef9a46 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 2b2ee2ec8..6e335a978 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 1a0b4fde4..13598ce9a 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT pom diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index b8dd56050..1ac6f35aa 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 6bf769781..9d976f906 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index 0df2b392d..5d90c9956 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench engine-cli - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench engine-docs - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench engine-core - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench engine-extensions - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-kafka - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-stdout - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-diag - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-tcp - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-http - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-jmx - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-cql-shaded - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-cqlverify - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench driver-mongodb - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/pom.xml b/pom.xml index 410cb8a3a..45a48fc3d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT mvn-defaults diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index f42e96a01..7d511c9c9 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 3e50176d3..9c826d104 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index d17408e13..cffc03a05 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index c6df6b7f1..2f2b2d6a0 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 36dc325b2..712df08ba 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index fbf4ac8d1..c7c603ff5 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 0cdbc62d9..a32e78f1a 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 61ff4feb9..55ad7c811 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench virtdata-lib-realer - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench virtdata-api - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench virtdata-lib-random - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT virtdata-lib-basics io.nosqlbench - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.0.2-SNAPSHOT + 4.15.3-SNAPSHOT From 4dab9b89114676a88b4a9d86837ee7cc6c592eda Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 13:17:21 -0600 Subject: [PATCH 137/164] move annotations enums to package --- .../src/main/java/io/nosqlbench/engine/cli/NBCLI.java | 2 +- .../engine/core/lifecycle/ActivityExecutor.java | 8 ++++---- .../engine/core/lifecycle/ScenarioController.java | 2 +- .../java/io/nosqlbench/engine/core/script/Scenario.java | 2 +- .../java/io/nosqlbench/nb/api/annotations/Annotation.java | 2 -- .../nosqlbench/nb/api/annotations/AnnotationBuilder.java | 4 +--- .../io/nosqlbench/nb/api/annotations/BuilderFacets.java | 2 -- .../io/nosqlbench/nb/api/{ => annotations}/Layer.java | 8 ++++---- .../nosqlbench/nb/api/annotations/MutableAnnotation.java | 1 - .../nb/api/annotations/AnnotationBuilderTest.java | 1 - 10 files changed, 12 insertions(+), 20 deletions(-) rename nb-api/src/main/java/io/nosqlbench/nb/api/{ => annotations}/Layer.java (73%) 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 895394dba..fe9b1cd57 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 @@ -21,7 +21,7 @@ import io.nosqlbench.engine.core.script.ScenariosExecutor; import io.nosqlbench.engine.core.script.ScriptParams; import io.nosqlbench.engine.docker.DockerMetricsManager; import io.nosqlbench.nb.api.annotations.Annotation; -import io.nosqlbench.nb.api.Layer; +import io.nosqlbench.nb.api.annotations.Layer; import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; import io.nosqlbench.nb.api.errors.BasicError; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java index 0cb03994f..eef48bf63 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java @@ -19,7 +19,7 @@ import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ParameterMap; import io.nosqlbench.engine.api.activityimpl.input.ProgressCapable; import io.nosqlbench.engine.core.annotation.Annotators; -import io.nosqlbench.nb.api.Layer; +import io.nosqlbench.nb.api.annotations.Layer; import io.nosqlbench.nb.api.annotations.Annotation; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; @@ -55,13 +55,13 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen private final List> motors = new ArrayList<>(); private final Activity activity; private final ActivityDef activityDef; - private ExecutorService executorService; + private final ExecutorService executorService; private RuntimeException stoppingException; private final static int waitTime = 10000; private String sessionId = ""; private long startedAt = 0L; - private long stoppedAt = 0L; + private final long stoppedAt = 0L; private String[] annotatedCommand; // private RunState intendedState = RunState.Uninitialized; @@ -255,7 +255,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen public synchronized void handleParameterMapUpdate(ParameterMap parameterMap) { if (activity instanceof ActivityDefObserver) { - ((ActivityDefObserver) activity).onActivityDefUpdate(activityDef); + activity.onActivityDefUpdate(activityDef); } // An activity must be initialized before the motors and other components are diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java index 1cdda63d3..e096e3cb7 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java @@ -21,7 +21,7 @@ import io.nosqlbench.engine.api.activityimpl.ParameterMap; import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter; import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.core.annotation.Annotators; -import io.nosqlbench.nb.api.Layer; +import io.nosqlbench.nb.api.annotations.Layer; import io.nosqlbench.nb.api.annotations.Annotation; import io.nosqlbench.nb.api.errors.BasicError; import org.apache.logging.log4j.Logger; diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java index 89b56dd23..4e5e84976 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java @@ -25,7 +25,7 @@ import io.nosqlbench.engine.core.lifecycle.ScenarioController; import io.nosqlbench.engine.core.lifecycle.ScenarioResult; import io.nosqlbench.engine.core.annotation.Annotators; import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings; -import io.nosqlbench.nb.api.Layer; +import io.nosqlbench.nb.api.annotations.Layer; import io.nosqlbench.nb.api.annotations.Annotation; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java index 70209db61..728e20ada 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java @@ -1,7 +1,5 @@ package io.nosqlbench.nb.api.annotations; -import io.nosqlbench.nb.api.Layer; - import java.util.Map; /** diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java index 90c43b068..fa8ecc510 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java @@ -1,7 +1,5 @@ package io.nosqlbench.nb.api.annotations; -import io.nosqlbench.nb.api.Layer; - import java.time.ZoneId; import java.util.LinkedHashMap; import java.util.TimeZone; @@ -13,7 +11,7 @@ public class AnnotationBuilder implements BuilderFacets.All { private final LinkedHashMap labels = new LinkedHashMap<>(); private final LinkedHashMap details = new LinkedHashMap<>(); private Layer layer; - private TimeZone timezone = TimeZone.getTimeZone(ZoneId.of("GMT")); + private final TimeZone timezone = TimeZone.getTimeZone(ZoneId.of("GMT")); @Override public AnnotationBuilder layer(Layer layer) { diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java index ebee085b0..466613ec6 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java @@ -1,7 +1,5 @@ package io.nosqlbench.nb.api.annotations; -import io.nosqlbench.nb.api.Layer; - public interface BuilderFacets { interface All extends diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Layer.java similarity index 73% rename from nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java rename to nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Layer.java index 459358995..1264ac94d 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Layer.java @@ -1,4 +1,4 @@ -package io.nosqlbench.nb.api; +package io.nosqlbench.nb.api.annotations; public enum Layer { @@ -10,13 +10,13 @@ public enum Layer { /** * Events which describe scenario execution, such as parameters, - * lifecycle events, and critical errors + * lifecycle events, interruptions, and critical errors */ Scenario, /** - * Events which describe scripting details, such as extensions, - * sending programmatic annotations, or critical errors + * Events which describe scripting details, such as commands, + * extension usages, sending programmatic annotations, or critical errors */ Script, diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java index 57d3641b5..95f1a0df0 100644 --- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java @@ -3,7 +3,6 @@ package io.nosqlbench.nb.api.annotations; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.Expose; -import io.nosqlbench.nb.api.Layer; import java.time.Instant; import java.time.ZoneId; diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java index 0f8f92881..de77b36fc 100644 --- a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java +++ b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java @@ -1,6 +1,5 @@ package io.nosqlbench.nb.api.annotations; -import io.nosqlbench.nb.api.Layer; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; From 17ed4c1efc91d6612d2b7e33524162c8f12544b7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 15:46:33 -0600 Subject: [PATCH 138/164] annotator and dashboard fixes --- .../grafana/GrafanaMetricsAnnotator.java | 59 +- .../engine/core/annotation/Annotators.java | 8 +- .../core/lifecycle/ActivityExecutor.java | 6 +- .../core/lifecycle/ScenarioController.java | 3 +- .../engine/core/ActivityExecutorTest.java | 6 +- .../dashboards/nb4-default-dashboard.json | 1274 ---------------- .../docker/dashboards/nb4-new-dashboard.json | 1279 +++++++++++++++++ .../docker/dashboards/new-nb-dashboard.json | 1135 --------------- 8 files changed, 1324 insertions(+), 2446 deletions(-) delete mode 100644 engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json create mode 100644 engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json delete mode 100644 engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java index 86b46c0cd..8d23039b2 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java @@ -19,10 +19,10 @@ import java.util.Optional; import java.util.function.Function; import java.util.function.Supplier; -@Service(value = Annotator.class, selector = "grafana" ) +@Service(value = Annotator.class, selector = "grafana") public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { - private final static Logger logger = LogManager.getLogger("ANNOTATORS" ); + private final static Logger logger = LogManager.getLogger("ANNOTATORS"); //private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS" ); private OnError onError = OnError.Warn; @@ -62,28 +62,28 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { // Target - Optional.ofNullable(labels.get("type" )) + Optional.ofNullable(labels.get("type")) .ifPresent(ga::setType); - Optional.ofNullable(labels.get("id" )).map(Integer::valueOf) + Optional.ofNullable(labels.get("id")).map(Integer::valueOf) .ifPresent(ga::setId); - Optional.ofNullable(labels.get("alertId" )).map(Integer::valueOf) + Optional.ofNullable(labels.get("alertId")).map(Integer::valueOf) .ifPresent(ga::setAlertId); - Optional.ofNullable(labels.get("dashboardId" )).map(Integer::valueOf) + Optional.ofNullable(labels.get("dashboardId")).map(Integer::valueOf) .ifPresent(ga::setDashboardId); - Optional.ofNullable(labels.get("panelId" )).map(Integer::valueOf) + Optional.ofNullable(labels.get("panelId")).map(Integer::valueOf) .ifPresent(ga::setPanelId); - Optional.ofNullable(labels.get("userId" )).map(Integer::valueOf) + Optional.ofNullable(labels.get("userId")).map(Integer::valueOf) .ifPresent(ga::setUserId); - Optional.ofNullable(labels.get("userName" )) + Optional.ofNullable(labels.get("userName")) .ifPresent(ga::setUserName); - Optional.ofNullable(labels.get("metric" )) + Optional.ofNullable(labels.get("metric")) .ifPresent(ga::setMetric); // Details @@ -115,35 +115,36 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { GrafanaClientConfig gc = new GrafanaClientConfig(); gc.setBaseUri(cfg.param("baseurl", String.class)); - if (cfg.containsKey("tags" )) { + if (cfg.containsKey("tags")) { this.tags = ParamsParser.parse(cfg.param("tags", String.class), false); } - if (cfg.containsKey("username" )) { - if (cfg.containsKey("password" )) { + if (cfg.containsKey("username")) { + if (cfg.containsKey("password")) { gc.basicAuth( cfg.param("username", String.class), cfg.param("password", String.class) ); } else { - gc.basicAuth(cfg.param("username", String.class), "" ); + gc.basicAuth(cfg.param("username", String.class), ""); } } Path keyfilePath = null; - if (cfg.containsKey("apikeyfile" )) { + if (cfg.containsKey("apikeyfile")) { String apikeyfile = cfg.paramEnv("apikeyfile", String.class); keyfilePath = Path.of(apikeyfile); - } else if (cfg.containsKey("apikey" )) { + } else if (cfg.containsKey("apikey")) { gc.addHeaderSource(() -> Map.of("Authorization", "Bearer " + cfg.param("apikey", String.class))); } else { - Optional apikeyLocation = Environment.INSTANCE.interpolate("$NBSTATEDIR/grafana_apikey" ); + Optional apikeyLocation = Environment.INSTANCE + .interpolate(cfg.paramEnv("apikeyfile", String.class)); keyfilePath = apikeyLocation.map(Path::of).orElseThrow(); } if (!Files.exists(keyfilePath)) { - logger.info("Auto-configuring grafana apikey." ); - GrafanaClientConfig apiClientConf = gc.copy().basicAuth("admin", "admin" ); + logger.info("Auto-configuring grafana apikey."); + GrafanaClientConfig apiClientConf = gc.copy().basicAuth("admin", "admin"); GrafanaClient apiClient = new GrafanaClient(apiClientConf); try { String nodeId = SystemId.getNodeId(); @@ -163,7 +164,7 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { ); gc.addHeaderSource(authHeaderSupplier); - this.onError = OnError.valueOfName(cfg.get("onerror" ).toString()); + this.onError = OnError.valueOfName(cfg.get("onerror").toString()); this.client = new GrafanaClient(gc); @@ -174,22 +175,22 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { public ConfigModel getConfigModel() { return new MutableConfigModel(this) .required("baseurl", String.class, - "The base url of the grafana node, like http://localhost:3000/" ) - .defaultto("apikeyfile", "$NBSTATEDIR/grafana_apikey", - "The file that contains the api key, supersedes apikey" ) + "The base url of the grafana node, like http://localhost:3000/") + .defaultto("apikeyfile", "$NBSTATEDIR/grafana/grafana_apikey", + "The file that contains the api key, supersedes apikey") .optional("apikey", String.class, - "The api key to use, supersedes basic username and password" ) + "The api key to use, supersedes basic username and password") .optional("username", String.class, - "The username to use for basic auth" ) + "The username to use for basic auth") .optional("password", String.class, - "The password to use for basic auth" ) + "The password to use for basic auth") .defaultto("tags", "source:nosqlbench", - "The tags that identify the annotations, in k:v,... form" ) + "The tags that identify the annotations, in k:v,... form") // .defaultto("onerror", OnError.Warn) .defaultto("onerror", "warn", - "What to do when an error occurs while posting an annotation" ) + "What to do when an error occurs while posting an annotation") .defaultto("timeoutms", 5000, - "connect and transport timeout for the HTTP client" ) + "connect and transport timeout for the HTTP client") .asReadOnly(); } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java index 66a7cd042..053c0006d 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java @@ -97,8 +97,12 @@ public class Annotators { public static synchronized void recordAnnotation(Annotation annotation) { for (Annotator annotator : getAnnotators()) { - logger.trace("calling annotator " + annotator.getName()); - annotator.recordAnnotation(annotation); + try { + logger.trace("calling annotator " + annotator.getName()); + annotator.recordAnnotation(annotation); + } catch (Exception e) { + logger.error(e); + } } } diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java index eef48bf63..7b5bc6577 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java @@ -61,12 +61,12 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen private final static int waitTime = 10000; private String sessionId = ""; private long startedAt = 0L; - private final long stoppedAt = 0L; + private long stoppedAt = 0L; private String[] annotatedCommand; // private RunState intendedState = RunState.Uninitialized; - public ActivityExecutor(Activity activity) { + public ActivityExecutor(Activity activity, String sessionId) { this.activity = activity; this.activityDef = activity.getActivityDef(); executorService = new ThreadPoolExecutor( @@ -77,6 +77,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen ); activity.getActivityDef().getParams().addListener(this); activity.setActivityController(this); + this.sessionId = sessionId; } public void setSessionId(String sessionId) { @@ -235,6 +236,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen logger.trace("closing auto-closeables"); activity.closeAutoCloseables(); activity.setRunState(RunState.Stopped); + this.stoppedAt=System.currentTimeMillis(); } if (stoppingException != null) { diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java index e096e3cb7..4be729481 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java @@ -302,7 +302,8 @@ public class ScenarioController { } ActivityType activityType = ActivityType.FINDER.getOrThrow(activityTypeName); - executor = new ActivityExecutor(activityType.getAssembledActivity(activityDef, getActivityMap())); + executor = new ActivityExecutor(activityType.getAssembledActivity(activityDef, getActivityMap()), + this.sessionId); activityExecutors.put(activityDef.getAlias(), executor); } return executor; diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java index a0669beb4..d91c12497 100644 --- a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java +++ b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java @@ -52,7 +52,7 @@ public class ActivityExecutorTest { a.setInputDispenserDelegate(idisp); a.setMotorDispenserDelegate(mdisp); - ActivityExecutor ae = new ActivityExecutor(a); + ActivityExecutor ae = new ActivityExecutor(a, "test-restart"); ad.setThreads(1); ae.startActivity(); ae.stopActivity(); @@ -76,7 +76,7 @@ public class ActivityExecutorTest { a.setInputDispenserDelegate(idisp); a.setMotorDispenserDelegate(mdisp); - ActivityExecutor ae = new ActivityExecutor(a); + ActivityExecutor ae = new ActivityExecutor(a, "test-delayed-start"); ad.setThreads(1); ae.startActivity(); ae.awaitCompletion(15000); @@ -101,7 +101,7 @@ public class ActivityExecutorTest { a.setInputDispenserDelegate(idisp); a.setMotorDispenserDelegate(mdisp); - ActivityExecutor ae = new ActivityExecutor(a); + ActivityExecutor ae = new ActivityExecutor(a, "test-new-executor"); ad.setThreads(5); ae.startActivity(); diff --git a/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json deleted file mode 100644 index 141fec10a..000000000 --- a/engine-docker/src/main/resources/docker/dashboards/nb4-default-dashboard.json +++ /dev/null @@ -1,1274 +0,0 @@ -{ - "dashboard": { - "annotations": { - "list": [ - { - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "#C0D8FF", - "limit": 100, - "name": "Annotation Focus", - "showIn": 0, - "tags": [ - "appname:nosqlbench", - "layer:$Layer" - ], - "type": "tags" - }, - { - "datasource": "-- Grafana --", - "enable": false, - "hide": false, - "iconColor": "#E0B400", - "limit": 2000, - "matchAny": true, - "name": "All Annotations", - "showIn": 0, - "tags": [ - "appname", - "layer:$Layer" - ], - "type": "tags" - }, - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "description": "Basic Dashboard with Annotations for NoSQLBench 4", - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "id": null, - "iteration": 1607447891116, - "links": [], - "panels": [ - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 115, - "panels": [ - { - "datasource": null, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 128, - "options": { - "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 3 - }, - "id": 117, - "options": { - "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Ops and Successful Ops", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 3 - }, - "id": 118, - "options": { - "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Error Counts", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 3 - }, - "id": 119, - "options": { - "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Distribution", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 3 - }, - "id": 120, - "options": { - "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Op Tries Distribution", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 6 - }, - "id": 121, - "options": { - "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "P75 NB Internals", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 6 - }, - "id": 122, - "options": { - "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "P99 NB Internals", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 6 - }, - "id": 123, - "options": { - "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Range", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 6 - }, - "id": 124, - "options": { - "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Cycle Count", - "transparent": true, - "type": "text" - } - ], - "title": "NoSQLBench Metrics Guide", - "type": "row" - }, - { - "collapsed": false, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 91, - "panels": [], - "title": "NoSQLBench Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 2 - }, - "hiddenSeries": false, - "id": 95, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-allops", - "refId": "C" - }, - { - "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-okops", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ops and Successful Ops", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 2 - }, - "hiddenSeries": false, - "id": 93, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"errorcounts.*\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-{{error}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Error Counts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 2 - }, - "hiddenSeries": false, - "id": 97, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", - "hide": false, - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "B" - }, - { - "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", - "hide": false, - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 2 - }, - "hiddenSeries": false, - "id": 98, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "tries{type=\"pctile\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "op tries distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 99, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p75 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 8 - }, - "hiddenSeries": false, - "id": 111, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\",alias=\"$Alias\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p99 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 2, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "id": 109, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\",pctile=\"0\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-min", - "refId": "B" - }, - { - "expr": "result_success{type=\"pctile\",pctile=\"100\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-max", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time range", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 8 - }, - "hiddenSeries": false, - "id": 113, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "cycles_servicetime{type=\"counter\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-count", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cycle Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 26, - "style": "dark", - "tags": [ - "NoSQLBench" - ], - "templating": { - "list": [ - { - "allValue": null, - "current": { - "selected": true, - "tags": [], - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "datasource": "prometheus", - "definition": "{appname=\"nosqlbench\"}", - "error": null, - "hide": 0, - "includeAll": true, - "label": "Alias", - "multi": true, - "name": "Alias", - "options": [ - { - "selected": true, - "text": "All", - "value": "$__all" - }, - { - "selected": false, - "text": "DIAG0", - "value": "DIAG0" - } - ], - "query": "{appname=\"nosqlbench\"}", - "refresh": 0, - "regex": "/.*alias=\"(\\w+)\".*/", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": { - "selected": true, - "text": "Script", - "value": "Script" - }, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Annotation Filter", - "multi": false, - "name": "Layer", - "options": [ - { - "selected": false, - "text": "NONE", - "value": "NONE" - }, - { - "selected": false, - "text": "CLI", - "value": "CLI" - }, - { - "selected": false, - "text": "Scenario", - "value": "Scenario" - }, - { - "selected": true, - "text": "Script", - "value": "Script" - }, - { - "selected": false, - "text": "Activity", - "value": "Activity" - }, - { - "selected": false, - "text": "Motor", - "value": "Motor" - } - ], - "query": "NONE,CLI,Scenario,Script,Activity,Motor", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "NB4 Dashboard", - "uid": "aIIX1f6Wz", - "version": 10 - } -} diff --git a/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json new file mode 100644 index 000000000..a01ab9384 --- /dev/null +++ b/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json @@ -0,0 +1,1279 @@ +{ + "dashboard": { + "annotations": { + "list": [ + { + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "#C0D8FF", + "limit": 100, + "name": "Annotation Focus", + "showIn": 0, + "tags": [ + "appname:nosqlbench", + "layer:$Layer" + ], + "type": "tags" + }, + { + "datasource": "-- Grafana --", + "enable": false, + "hide": false, + "iconColor": "#E0B400", + "limit": 2000, + "matchAny": true, + "name": "All Annotations", + "showIn": 0, + "tags": [ + "appname", + "layer:$Layer" + ], + "type": "tags" + }, + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Basic Dashboard with Annotations for NoSQLBench 4", + "editable": true, + "gnetId": null, + "graphTooltip": 1, + "id": null, + "iteration": 1607447891116, + "links": [], + "panels": [ + { + "collapsed": true, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 115, + "panels": [ + { + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 128, + "options": { + "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 3 + }, + "id": 117, + "options": { + "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Ops and Successful Ops", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 3 + }, + "id": 118, + "options": { + "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Error Counts", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 3 + }, + "id": 119, + "options": { + "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Distribution", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 3 + }, + "id": 120, + "options": { + "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Op Tries Distribution", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 121, + "options": { + "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "P75 NB Internals", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 6 + }, + "id": 122, + "options": { + "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "P99 NB Internals", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 6 + }, + "id": 123, + "options": { + "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Range", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 6 + }, + "id": 124, + "options": { + "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Cycle Count", + "transparent": true, + "type": "text" + } + ], + "title": "NoSQLBench Metrics Guide", + "type": "row" + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 91, + "panels": [], + "title": "NoSQLBench Metrics", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 2 + }, + "hiddenSeries": false, + "id": 95, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-allops", + "refId": "C" + }, + { + "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-okops", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ops and Successful Ops", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 2 + }, + "hiddenSeries": false, + "id": 93, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"errorcounts.*\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-{{error}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Error Counts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 2 + }, + "hiddenSeries": false, + "id": 97, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", + "hide": false, + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "B" + }, + { + "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", + "hide": false, + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 2 + }, + "hiddenSeries": false, + "id": 98, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "tries{type=\"pctile\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "op tries distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 8 + }, + "hiddenSeries": false, + "id": 99, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p75 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "hiddenSeries": false, + "id": 111, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\",alias=\"$Alias\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p99 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 8 + }, + "hiddenSeries": false, + "id": 109, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\",pctile=\"0\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-min", + "refId": "B" + }, + { + "expr": "result_success{type=\"pctile\",pctile=\"100\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-max", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time range", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 8 + }, + "hiddenSeries": false, + "id": 113, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "cycles_servicetime{type=\"counter\",alias=\"$Alias\"}", + "interval": "", + "legendFormat": "{{alias}}-count", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Cycle Count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 26, + "style": "dark", + "tags": [ + "NoSQLBench" + ], + "templating": { + "list": [ + { + "allValue": "", + "current": { + "selected": true, + "tags": [], + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "prometheus", + "definition": "{appname=\"nosqlbench\"}", + "error": null, + "hide": 0, + "includeAll": true, + "label": "Alias", + "multi": true, + "name": "Alias", + "options": [ + { + "selected": true, + "text": "All", + "value": "$__all" + }, + { + "selected": false, + "text": "DIAG0", + "value": "DIAG0" + } + ], + "query": "{appname=\"nosqlbench\"}", + "refresh": 0, + "regex": "/.*alias=\"(\\w+)\".*/", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": " ", + "current": { + "selected": true, + "text": "Activity", + "value": "Activity" + }, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Annotation Filter", + "multi": false, + "name": "Layer", + "options": [ + { + "selected": false, + "text": "All", + "value": "$__all" + }, + { + "selected": false, + "text": "NONE", + "value": "NONE" + }, + { + "selected": false, + "text": "CLI", + "value": "CLI" + }, + { + "selected": false, + "text": "Scenario", + "value": "Scenario" + }, + { + "selected": false, + "text": "Script", + "value": "Script" + }, + { + "selected": true, + "text": "Activity", + "value": "Activity" + }, + { + "selected": false, + "text": "Motor", + "value": "Motor" + } + ], + "query": "NONE,CLI,Scenario,Script,Activity,Motor", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "NB4 Dashboard", + "uid": "aIIX1f6Wz", + "version": 10 +} +} diff --git a/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json deleted file mode 100644 index 22989c17e..000000000 --- a/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json +++ /dev/null @@ -1,1135 +0,0 @@ -{ - "dashboard": { - "annotations": { - "list": [ - { - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "#C0D8FF", - "limit": 100, - "name": "Annotation Focus", - "showIn": 0, - "tags": [ - "appname:nosqlbench", - "layer:$Layer" - ], - "type": "tags" - }, - { - "datasource": "-- Grafana --", - "enable": false, - "hide": false, - "iconColor": "#E0B400", - "limit": 2000, - "matchAny": true, - "name": "All Annotations", - "showIn": 0, - "tags": [ - "appname", - "layer:$Layer" - ], - "type": "tags" - }, - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "description": "Dashboard for NoSQLBench 3", - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "id": null, - "links": [], - "panels": [ - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 115, - "panels": [], - "title": "NoSQLBench Metrics Guide", - "type": "row" - }, - { - "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", - "datasource": null, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 128, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "", - "transparent": true, - "type": "text" - }, - { - "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 3 - }, - "id": 117, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Ops and Successful Ops", - "transparent": true, - "type": "text" - }, - { - "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 3 - }, - "id": 118, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Error Counts", - "transparent": true, - "type": "text" - }, - { - "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 3 - }, - "id": 119, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Distribution", - "transparent": true, - "type": "text" - }, - { - "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 3 - }, - "id": 120, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Op Tries Distribution", - "transparent": true, - "type": "text" - }, - { - "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 6 - }, - "id": 121, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "P75 NB Internals", - "transparent": true, - "type": "text" - }, - { - "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 6 - }, - "id": 122, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "P99 NB Internals", - "transparent": true, - "type": "text" - }, - { - "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 6 - }, - "id": 123, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Range", - "transparent": true, - "type": "text" - }, - { - "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 6 - }, - "id": 124, - "mode": "markdown", - "timeFrom": null, - "timeShift": null, - "title": "Cycle Count", - "transparent": true, - "type": "text" - }, - { - "collapsed": false, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 9 - }, - "id": 91, - "panels": [], - "title": "NoSQLBench Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 10 - }, - "hiddenSeries": false, - "id": 95, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result{type=\"avg_rate\",avg_of=\"1m\"}", - "interval": "", - "legendFormat": "{{alias}}-allops", - "refId": "C" - }, - { - "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\"}", - "interval": "", - "legendFormat": "{{alias}}-okops", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ops and Successful Ops", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 10 - }, - "hiddenSeries": false, - "id": 93, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"errorcounts.*\"}", - "interval": "", - "legendFormat": "{{alias}}-{{error}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Error Counts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 10 - }, - "hiddenSeries": false, - "id": 97, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\"}", - "hide": false, - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "B" - }, - { - "expr": "cycles_servicetime{type=\"pctile\"}", - "hide": true, - "interval": "", - "legendFormat": "{{alias}}-{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 10 - }, - "hiddenSeries": false, - "id": 98, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "tries{type=\"pctile\"}", - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "op tries distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 16 - }, - "hiddenSeries": false, - "id": 99, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\"}", - "interval": "", - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p75 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 16 - }, - "hiddenSeries": false, - "id": 111, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p99 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 2, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 16 - }, - "hiddenSeries": false, - "id": 109, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\",pctile=\"0\"}", - "interval": "", - "legendFormat": "{{alias}}-min", - "refId": "B" - }, - { - "expr": "result_success{type=\"pctile\",pctile=\"100\"}", - "interval": "", - "legendFormat": "{{alias}}-max", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time range", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 16 - }, - "hiddenSeries": false, - "id": 113, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "cycles_servicetime{type=\"counter\"}", - "interval": "", - "legendFormat": "{{alias}}-count", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cycle Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 25, - "style": "dark", - "tags": [ - "dse" - ], - "templating": { - "list": [] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "NoSQLBench", - "uid": "aIIX1f6Wz", - "version": 3 - } -} From 3436ec615ec2beaa4bd928adbb7baf25f63d19d7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 15:47:11 -0600 Subject: [PATCH 139/164] trigger build --- RELEASENOTES.md | 49 ++++------------------------------------ scripts/release-notes.sh | 2 +- 2 files changed, 5 insertions(+), 46 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index bf5af52e2..e8cdf9237 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,45 +1,4 @@ -- e4f325c4 (origin/main, main) disable test which is present in feature branch -- 78463838 make main brain build cleanly again -- 608d1f72 Update DOWNLOADS.md -- 3d2ff55f auto create apikey -- cfa92eab package organization -- 2ab118f4 package organization -- a23808b3 update appimage build script for j15 -- 7b0e37ab add metrics manifest to polyglot -- 7e6aa1a2 bump source and target to Java 15 -- 2752fa50 bump major version to 4.0.0-SNAPSHOT -- 7e880b91 experimental grammar -- 3f65a054 console friendly metrics summary -- 146686e0 simplify custom logging configuration -- d0592454 typos, alignment, cruft -- 45307081 backfill missing default -- b7c24642 centralize log4j2 and slf4j stub config -- 2215fc94 typos, alignment, cruft -- 0ef26c82 update logger deps for dsegraph -- 975ea40d merge fixups -- ae419a26 logging annotator module -- 6c0632fb grafana annotator module -- 317ffab4 api for annotations -- c2cec235 allow configurable delimiter in params parser -- a09efbe9 consolidate to log4j2 -- 6a523dc4 remove slf4j -- 67eefbbe fix activity run state bug -- a88d0376 docker-metrics improvements -- 667fbdba add log4j2 programmatic configuration -- 60fa0529 add default log4j configs -- a3e0739a add FixedValues for double -- fa85704b add SPI impl selector field 'selector' -- 4996d206 config API improvements -- e0498ff2 docs updates -- e9d2b489 environment API improvements -- 897a8389 generalize log level to NB -- a97db87f include JSON support in project API -- 2c09b8ae typos, culling, and alignment -- a3a51381 update inactive coords -- 83136139 generalize op source -- 089a29d8 grafana api tokens -- e6e70f71 support DoubleToIntFunction in function matrix -- 52b029f8 typos, culling, and alignment -- 4d65dc62 update inactive coords -- 55edec53 add ToByteBuffer binding function -- 93e10e6a config model improvements +- 17ed4c1e (HEAD -> nb4-rc1) annotator and dashboard fixes +- 4dab9b89 move annotations enums to package +- 6d514cb6 bump middle version number to required java version '15' +- fa78e27f set NB4 to Java 15 diff --git a/scripts/release-notes.sh b/scripts/release-notes.sh index a1cdecd12..9614393b7 100755 --- a/scripts/release-notes.sh +++ b/scripts/release-notes.sh @@ -2,7 +2,7 @@ set -e #RELEASE_NOTES_FILE=${RELEASE_NOTES_FILE:?RELEASE_NOTES_FILE must be provided} -git log --oneline --decorate --max-count=1000 main > /tmp/gitlog_main +git log --oneline --decorate --max-count=1000 nb4-rc1 > /tmp/gitlog_main readarray lines < /tmp/gitlog_main for line in "${lines[@]}" From af87ef9c548031cfa1479a54a15a70dd70e487ab Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 17:05:44 -0600 Subject: [PATCH 140/164] relaxed requirement for finicky test --- .../engine/core/script/AsyncScriptIntegrationTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java index 5662373dd..8ab46e3ea 100644 --- a/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java +++ b/nb/src/test/java/io/nosqlbench/engine/core/script/AsyncScriptIntegrationTests.java @@ -175,7 +175,7 @@ public class AsyncScriptIntegrationTests { "logs/histostats.csv")); String logdata = strings.stream().collect(Collectors.joining("\n")); assertThat(logdata).contains("min,p25,p50,p75,p90,p95,"); - assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3); + assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(2); } @Test From b4ec4c9aad0bc4ea6d8832163b21123a776c6899 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 17:06:05 -0600 Subject: [PATCH 141/164] trigger build --- RELEASENOTES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e8cdf9237..7bcdf2c4a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,6 @@ -- 17ed4c1e (HEAD -> nb4-rc1) annotator and dashboard fixes +- af87ef9c (HEAD -> nb4-rc1) relaxed requirement for finicky test +- 3436ec61 (origin/nb4-rc1) trigger build +- 17ed4c1e annotator and dashboard fixes - 4dab9b89 move annotations enums to package - 6d514cb6 bump middle version number to required java version '15' - fa78e27f set NB4 to Java 15 From 89c84dd2f8aee9e68810a059c13a81b5c3aab92e Mon Sep 17 00:00:00 2001 From: nb-droid Date: Wed, 9 Dec 2020 00:05:08 +0000 Subject: [PATCH 142/164] [maven-release-plugin] prepare release nosqlbench-4.15.3 --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 6cc1c6bf7..b2a948d87 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.15.3-SNAPSHOT + 4.15.3 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 8b67ea668..c11f373f3 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 060e25d1f..8ba305333 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index ad34f43fc..296d6f8dc 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 837013d64..2db038864 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-http/pom.xml b/driver-http/pom.xml index 6cef1456b..c7df1f32d 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 50175afe6..6708cffad 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 13c5702f8..eb5095c68 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-stdout - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index aec776f45..d2d588096 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 87a13a112..625e9c71e 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index ec52ff3f2..eca33d787 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-stdout - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index b9748d1bc..01f049106 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 2fddd31eb..6033b1951 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench virtdata-userlibs - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index 4cf32e487..ff74844d4 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench nb-annotations - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench virtdata-userlibs - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 5956e3794..e1fbce5e0 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench engine-docker - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 24a77823e..502102ed6 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index f3b816118..e8d421812 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench drivers-api - 4.15.3-SNAPSHOT + 4.15.3 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.15.3-SNAPSHOT + 4.15.3 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 402278839..9064b2d51 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 7b077293b..e3e387be0 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index b62ef9a46..ccd0d846b 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 6e335a978..dd89ca4e3 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 13598ce9a..8915e7def 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.15.3-SNAPSHOT + 4.15.3 pom @@ -90,7 +90,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.15.3 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index 1ac6f35aa..faa6a9674 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 9d976f906..d6d50093f 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/nb/pom.xml b/nb/pom.xml index 5d90c9956..b3341157c 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench engine-cli - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench engine-docs - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench engine-core - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench engine-extensions - 4.15.3-SNAPSHOT + 4.15.3 @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-kafka - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-stdout - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-diag - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-tcp - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-http - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-jmx - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-dsegraph-shaded - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-cql-shaded - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-cqlverify - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench driver-mongodb - 4.15.3-SNAPSHOT + 4.15.3 @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/pom.xml b/pom.xml index 45a48fc3d..752332a31 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.15.3 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 7d511c9c9..a1ffdf8fa 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 nb-api io.nosqlbench virtdata-lang - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 9c826d104..d8e099cbb 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index cffc03a05..7adac1d0b 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index 2f2b2d6a0..dcd54e586 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench virtdata-lib-basics - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 712df08ba..b81b6c7d4 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench virtdata-lib-basics - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index c7c603ff5..ff9cf3547 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index a32e78f1a..8ad70e485 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.15.3-SNAPSHOT + 4.15.3 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 55ad7c811..cf564f994 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench virtdata-lib-realer - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench virtdata-api - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench virtdata-lib-random - 4.15.3-SNAPSHOT + 4.15.3 io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 virtdata-lib-basics io.nosqlbench - 4.15.3-SNAPSHOT + 4.15.3 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.15.3-SNAPSHOT + 4.15.3 From 33bbcd7512d6ea71aefca4c82cedd2013ff52bcd Mon Sep 17 00:00:00 2001 From: nb-droid Date: Wed, 9 Dec 2020 00:05:16 +0000 Subject: [PATCH 143/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index b2a948d87..005065cae 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.15.3 + 4.15.4-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index c11f373f3..9ecebdbe0 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index 8ba305333..b539857cd 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 296d6f8dc..9852b7fc1 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 2db038864..4ec303d37 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index c7df1f32d..b120076f2 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 6708cffad..2668ac4c1 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index eb5095c68..009eb54cf 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-stdout - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index d2d588096..8cff06072 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index 625e9c71e..fc584b8fb 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index eca33d787..0400eb8ca 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-stdout - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 01f049106..797a84318 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 6033b1951..95f8bce69 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index ff74844d4..b9f2a5811 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench nb-annotations - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index e1fbce5e0..a5b969986 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench engine-docker - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 502102ed6..6b4e44160 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index e8d421812..b96f5133b 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench drivers-api - 4.15.3 + 4.15.4-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.15.3 + 4.15.4-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index 9064b2d51..ffa085810 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index e3e387be0..732c2261d 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index ccd0d846b..874e85044 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index dd89ca4e3..7b0f6b202 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 8915e7def..3e8c42f19 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.15.3 + 4.15.4-SNAPSHOT pom @@ -90,7 +90,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-4.15.3 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index faa6a9674..c95f77b26 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index d6d50093f..57093f9fe 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index b3341157c..b172883a8 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench engine-cli - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench engine-docs - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench engine-core - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench engine-extensions - 4.15.3 + 4.15.4-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-kafka - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-stdout - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-diag - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-tcp - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-http - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-jmx - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-cql-shaded - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-cqlverify - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench driver-mongodb - 4.15.3 + 4.15.4-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/pom.xml b/pom.xml index 752332a31..b476f1d26 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-4.15.3 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index a1ffdf8fa..cf7e82e5b 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index d8e099cbb..28031f5e7 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 7adac1d0b..6d8ba27a7 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index dcd54e586..b07875b1d 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index b81b6c7d4..5c79b6994 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index ff9cf3547..abfd24a5d 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 8ad70e485..d2a13b525 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.15.3 + 4.15.4-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index cf564f994..5e9b97830 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench virtdata-lib-realer - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench virtdata-api - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench virtdata-lib-random - 4.15.3 + 4.15.4-SNAPSHOT io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT virtdata-lib-basics io.nosqlbench - 4.15.3 + 4.15.4-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.15.3 + 4.15.4-SNAPSHOT From 526d09cd62643109b180607cf6e2d90c8a99f3e2 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 19:44:12 -0600 Subject: [PATCH 144/164] auto create dirs for grafana_apikey --- .../engine/clients/grafana/GrafanaMetricsAnnotator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java index 8d23039b2..bd2b1502a 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java @@ -13,6 +13,7 @@ import org.apache.logging.log4j.Logger; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermissions; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; @@ -151,6 +152,8 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware { String keyName = "nosqlbench-" + nodeId + "-" + System.currentTimeMillis(); ApiToken apiToken = apiClient.createApiToken(keyName, "Admin", Long.MAX_VALUE); + Files.createDirectories(keyfilePath.getParent(), + PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---"))); Files.writeString(keyfilePath, apiToken.getKey()); } catch (Exception e) { throw new RuntimeException(e); From bd41039af299128c8f17f9d9ad8be7c10d1958aa Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Tue, 8 Dec 2020 19:44:38 -0600 Subject: [PATCH 145/164] trigger release --- RELEASENOTES.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7bcdf2c4a..4adc2f46d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,7 @@ -- af87ef9c (HEAD -> nb4-rc1) relaxed requirement for finicky test -- 3436ec61 (origin/nb4-rc1) trigger build +- 526d09cd (HEAD -> nb4-rc1) auto create dirs for grafana_apikey +- b4ec4c9a (origin/nb4-rc1) trigger build +- af87ef9c relaxed requirement for finicky test +- 3436ec61 trigger build - 17ed4c1e annotator and dashboard fixes - 4dab9b89 move annotations enums to package - 6d514cb6 bump middle version number to required java version '15' From 4520817de3878ffe8040115fa4904d9b91ab323e Mon Sep 17 00:00:00 2001 From: nb-droid Date: Wed, 9 Dec 2020 01:53:28 +0000 Subject: [PATCH 146/164] [maven-release-plugin] prepare release nosqlbench-4.15.4 --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index 005065cae..f37f0f78e 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.15.4-SNAPSHOT + 4.15.4 @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index 9ecebdbe0..c7630ff6d 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index b539857cd..d0c6f0b80 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 9852b7fc1..97418e6a8 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 4ec303d37..409d1a013 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-http/pom.xml b/driver-http/pom.xml index b120076f2..ba38adfd7 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 2668ac4c1..683b1e24e 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 009eb54cf..65104c15e 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-stdout - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 8cff06072..51bc1b838 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index fc584b8fb..b1fb39d5f 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 0400eb8ca..2720c39a5 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-stdout - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 797a84318..5ef482d94 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 95f8bce69..7efb6c2cc 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench virtdata-userlibs - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/engine-api/pom.xml b/engine-api/pom.xml index b9f2a5811..c4f56f0af 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench nb-annotations - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench virtdata-userlibs - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index a5b969986..09ff0a41e 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench engine-docker - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 6b4e44160..2af5b9544 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/engine-core/pom.xml b/engine-core/pom.xml index b96f5133b..cf7b9f913 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench drivers-api - 4.15.4-SNAPSHOT + 4.15.4 @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.15.4-SNAPSHOT + 4.15.4 compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index ffa085810..c29492429 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 732c2261d..8b1bd5364 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 874e85044..612c8263e 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index 7b0f6b202..c9dfb6489 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 3e8c42f19..501ce1405 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.15.4-SNAPSHOT + 4.15.4 pom @@ -90,7 +90,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.15.4 diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index c95f77b26..de1c67c5a 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 57093f9fe..05b389780 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/nb/pom.xml b/nb/pom.xml index b172883a8..e1a58a788 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench engine-cli - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench engine-docs - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench engine-core - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench engine-extensions - 4.15.4-SNAPSHOT + 4.15.4 @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-kafka - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-stdout - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-diag - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-tcp - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-http - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-jmx - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-dsegraph-shaded - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-cql-shaded - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-cqlverify - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench driver-mongodb - 4.15.4-SNAPSHOT + 4.15.4 @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/pom.xml b/pom.xml index b476f1d26..74f4a61fa 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - HEAD + nosqlbench-4.15.4 diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index cf7e82e5b..1b3dcc5d6 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 nb-api io.nosqlbench virtdata-lang - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 28031f5e7..7432a9397 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 6d8ba27a7..6e85d44eb 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index b07875b1d..ec1aef29b 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench virtdata-lib-basics - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 5c79b6994..2e97e443a 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench virtdata-lib-basics - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index abfd24a5d..33b7505d5 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index d2a13b525..2a9dc3567 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.15.4-SNAPSHOT + 4.15.4 diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 5e9b97830..148053274 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench virtdata-lib-realer - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench virtdata-api - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench virtdata-lib-random - 4.15.4-SNAPSHOT + 4.15.4 io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 virtdata-lib-basics io.nosqlbench - 4.15.4-SNAPSHOT + 4.15.4 virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.15.4-SNAPSHOT + 4.15.4 From f34930912c996289215a9a99e4dcf3680cf61b29 Mon Sep 17 00:00:00 2001 From: nb-droid Date: Wed, 9 Dec 2020 01:53:34 +0000 Subject: [PATCH 147/164] [maven-release-plugin] prepare for next development iteration --- docsys/pom.xml | 6 +++--- driver-cql-shaded/pom.xml | 6 +++--- driver-cqlverify/pom.xml | 6 +++--- driver-diag/pom.xml | 6 +++--- driver-dsegraph-shaded/pom.xml | 6 +++--- driver-http/pom.xml | 6 +++--- driver-jmx/pom.xml | 6 +++--- driver-kafka/pom.xml | 6 +++--- driver-mongodb/pom.xml | 6 +++--- driver-stdout/pom.xml | 6 +++--- driver-tcp/pom.xml | 8 ++++---- driver-web/pom.xml | 6 +++--- drivers-api/pom.xml | 6 +++--- engine-api/pom.xml | 10 +++++----- engine-cli/pom.xml | 6 +++--- engine-clients/pom.xml | 4 ++-- engine-core/pom.xml | 8 ++++---- engine-docker/pom.xml | 4 ++-- engine-docs/pom.xml | 4 ++-- engine-extensions/pom.xml | 4 ++-- engine-rest/pom.xml | 4 ++-- mvn-defaults/pom.xml | 4 ++-- nb-annotations/pom.xml | 2 +- nb-api/pom.xml | 4 ++-- nb/pom.xml | 36 +++++++++++++++++----------------- pom.xml | 4 ++-- 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 +++++++-------- 34 files changed, 111 insertions(+), 111 deletions(-) diff --git a/docsys/pom.xml b/docsys/pom.xml index f37f0f78e..281fb1882 100644 --- a/docsys/pom.xml +++ b/docsys/pom.xml @@ -9,7 +9,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench nb-api - 4.15.4 + 4.15.5-SNAPSHOT @@ -98,7 +98,7 @@ io.nosqlbench virtdata-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml index c7630ff6d..2daae02d5 100644 --- a/driver-cql-shaded/pom.xml +++ b/driver-cql-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml index d0c6f0b80..8fa57456b 100644 --- a/driver-cqlverify/pom.xml +++ b/driver-cqlverify/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -24,13 +24,13 @@ io.nosqlbench driver-cql-shaded - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml index 97418e6a8..593ddcde3 100644 --- a/driver-diag/pom.xml +++ b/driver-diag/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml index 409d1a013..b445ca375 100644 --- a/driver-dsegraph-shaded/pom.xml +++ b/driver-dsegraph-shaded/pom.xml @@ -4,7 +4,7 @@ io.nosqlbench mvn-defaults - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-http/pom.xml b/driver-http/pom.xml index ba38adfd7..070b676ae 100644 --- a/driver-http/pom.xml +++ b/driver-http/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml index 683b1e24e..8bcd896f4 100644 --- a/driver-jmx/pom.xml +++ b/driver-jmx/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml index 65104c15e..4a330b5a0 100644 --- a/driver-kafka/pom.xml +++ b/driver-kafka/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -44,13 +44,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-stdout - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml index 51bc1b838..b8ec87e7f 100644 --- a/driver-mongodb/pom.xml +++ b/driver-mongodb/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -21,13 +21,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml index b1fb39d5f..d4745c9a9 100644 --- a/driver-stdout/pom.xml +++ b/driver-stdout/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml index 2720c39a5..01f02bedc 100644 --- a/driver-tcp/pom.xml +++ b/driver-tcp/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -24,19 +24,19 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-stdout - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/driver-web/pom.xml b/driver-web/pom.xml index 5ef482d94..2ff90a4a1 100644 --- a/driver-web/pom.xml +++ b/driver-web/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml index 7efb6c2cc..c295faa1a 100644 --- a/drivers-api/pom.xml +++ b/drivers-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench nb-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/engine-api/pom.xml b/engine-api/pom.xml index c4f56f0af..1274f8ecd 100644 --- a/engine-api/pom.xml +++ b/engine-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -23,25 +23,25 @@ io.nosqlbench nb-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench nb-annotations - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench virtdata-userlibs - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml index 09ff0a41e..6bcc5e654 100644 --- a/engine-cli/pom.xml +++ b/engine-cli/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -23,13 +23,13 @@ io.nosqlbench engine-core - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench engine-docker - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml index 2af5b9544..6a5061cd8 100644 --- a/engine-clients/pom.xml +++ b/engine-clients/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -21,7 +21,7 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/engine-core/pom.xml b/engine-core/pom.xml index cf7b9f913..cad9a9018 100644 --- a/engine-core/pom.xml +++ b/engine-core/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -28,13 +28,13 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench drivers-api - 4.15.4 + 4.15.5-SNAPSHOT @@ -85,7 +85,7 @@ io.nosqlbench engine-clients - 4.15.4 + 4.15.5-SNAPSHOT compile diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml index c29492429..028e5a0da 100644 --- a/engine-docker/pom.xml +++ b/engine-docker/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -65,7 +65,7 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml index 8b1bd5364..69eb64fda 100644 --- a/engine-docs/pom.xml +++ b/engine-docs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -28,7 +28,7 @@ io.nosqlbench docsys - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml index 612c8263e..d0bbe0dfe 100644 --- a/engine-extensions/pom.xml +++ b/engine-extensions/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -22,7 +22,7 @@ io.nosqlbench engine-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml index c9dfb6489..a916876d5 100644 --- a/engine-rest/pom.xml +++ b/engine-rest/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -47,7 +47,7 @@ io.nosqlbench engine-cli - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml index 501ce1405..813c07559 100644 --- a/mvn-defaults/pom.xml +++ b/mvn-defaults/pom.xml @@ -3,7 +3,7 @@ io.nosqlbench mvn-defaults - 4.15.4 + 4.15.5-SNAPSHOT pom @@ -90,7 +90,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git - nosqlbench-4.15.4 + HEAD diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml index de1c67c5a..878b6d3a6 100644 --- a/nb-annotations/pom.xml +++ b/nb-annotations/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults diff --git a/nb-api/pom.xml b/nb-api/pom.xml index 05b389780..e6ffe3f7b 100644 --- a/nb-api/pom.xml +++ b/nb-api/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -31,7 +31,7 @@ io.nosqlbench nb-annotations - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/nb/pom.xml b/nb/pom.xml index e1a58a788..21eec7188 100644 --- a/nb/pom.xml +++ b/nb/pom.xml @@ -5,7 +5,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -24,31 +24,31 @@ io.nosqlbench engine-rest - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench engine-cli - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench engine-docs - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench engine-core - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench engine-extensions - 4.15.4 + 4.15.5-SNAPSHOT @@ -60,67 +60,67 @@ io.nosqlbench driver-web - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-kafka - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-stdout - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-diag - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-tcp - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-http - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-jmx - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-dsegraph-shaded - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-cql-shaded - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-cqlverify - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench driver-mongodb - 4.15.4 + 4.15.5-SNAPSHOT @@ -257,7 +257,7 @@ io.nosqlbench driver-mongodb - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/pom.xml b/pom.xml index 74f4a61fa..4c7b02813 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT mvn-defaults @@ -145,7 +145,7 @@ scm:git:https://github.com/nosqlbench/nosqlbench.git scm:git:git@github.com:nosqlbench/nosqlbench.git - nosqlbench-4.15.4 + HEAD diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml index 1b3dcc5d6..2afa2fac9 100644 --- a/virtdata-api/pom.xml +++ b/virtdata-api/pom.xml @@ -7,7 +7,7 @@ io.nosqlbench mvn-defaults - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -23,14 +23,14 @@ io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT nb-api io.nosqlbench virtdata-lang - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml index 7432a9397..d97c18851 100644 --- a/virtdata-lang/pom.xml +++ b/virtdata-lang/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml index 6e85d44eb..40f87b931 100644 --- a/virtdata-lib-basics/pom.xml +++ b/virtdata-lib-basics/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml index ec1aef29b..ad6b1a345 100644 --- a/virtdata-lib-curves4/pom.xml +++ b/virtdata-lib-curves4/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -22,13 +22,13 @@ io.nosqlbench virtdata-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml index 2e97e443a..856b8a00f 100644 --- a/virtdata-lib-random/pom.xml +++ b/virtdata-lib-random/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -20,13 +20,13 @@ io.nosqlbench virtdata-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench virtdata-lib-basics - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml index 33b7505d5..607578b50 100644 --- a/virtdata-lib-realer/pom.xml +++ b/virtdata-lib-realer/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -20,7 +20,7 @@ io.nosqlbench virtdata-lib-basics - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml index 2a9dc3567..73352bfe9 100644 --- a/virtdata-realdata/pom.xml +++ b/virtdata-realdata/pom.xml @@ -7,7 +7,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -18,7 +18,7 @@ io.nosqlbench virtdata-api - 4.15.4 + 4.15.5-SNAPSHOT diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml index 148053274..2ee6cd470 100644 --- a/virtdata-userlibs/pom.xml +++ b/virtdata-userlibs/pom.xml @@ -4,7 +4,7 @@ mvn-defaults io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT ../mvn-defaults @@ -18,36 +18,36 @@ io.nosqlbench virtdata-realdata - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench virtdata-lib-realer - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench virtdata-api - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench virtdata-lib-random - 4.15.4 + 4.15.5-SNAPSHOT io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT virtdata-lib-basics io.nosqlbench - 4.15.4 + 4.15.5-SNAPSHOT virtdata-lib-curves4 @@ -55,7 +55,7 @@ io.nosqlbench docsys - 4.15.4 + 4.15.5-SNAPSHOT From 1d107d87541f20630c2602c052120ac4970c037c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 9 Dec 2020 16:25:23 -0600 Subject: [PATCH 148/164] update nb4 dashboard def --- .../docker/dashboards/nb4-new-dashboard.json | 2621 +++++++++-------- 1 file changed, 1375 insertions(+), 1246 deletions(-) diff --git a/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json index a01ab9384..6be25578f 100644 --- a/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json +++ b/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json @@ -1,1279 +1,1408 @@ { "dashboard": { - "annotations": { - "list": [ - { - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "#C0D8FF", - "limit": 100, - "name": "Annotation Focus", - "showIn": 0, - "tags": [ - "appname:nosqlbench", - "layer:$Layer" - ], - "type": "tags" - }, - { - "datasource": "-- Grafana --", - "enable": false, - "hide": false, - "iconColor": "#E0B400", - "limit": 2000, - "matchAny": true, - "name": "All Annotations", - "showIn": 0, - "tags": [ - "appname", - "layer:$Layer" - ], - "type": "tags" - }, - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "description": "Basic Dashboard with Annotations for NoSQLBench 4", - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "id": null, - "iteration": 1607447891116, - "links": [], - "panels": [ - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 115, - "panels": [ + "annotations": { + "list": [ { - "datasource": null, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 128, - "options": { - "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 3 - }, - "id": 117, - "options": { - "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Ops and Successful Ops", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 3 - }, - "id": 118, - "options": { - "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Error Counts", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 3 - }, - "id": 119, - "options": { - "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Distribution", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 3 - }, - "id": 120, - "options": { - "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Op Tries Distribution", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 6 - }, - "id": 121, - "options": { - "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "P75 NB Internals", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 6 - }, - "id": 122, - "options": { - "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "P99 NB Internals", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 6 - }, - "id": 123, - "options": { - "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Service Time Range", - "transparent": true, - "type": "text" - }, - { - "datasource": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 6 - }, - "id": 124, - "options": { - "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", - "mode": "markdown" - }, - "pluginVersion": "7.3.4", - "timeFrom": null, - "timeShift": null, - "title": "Cycle Count", - "transparent": true, - "type": "text" - } - ], - "title": "NoSQLBench Metrics Guide", - "type": "row" - }, - { - "collapsed": false, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 91, - "panels": [], - "title": "NoSQLBench Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 2 - }, - "hiddenSeries": false, - "id": 95, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-allops", - "refId": "C" - }, - { - "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-okops", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ops and Successful Ops", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 2 - }, - "hiddenSeries": false, - "id": 93, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"errorcounts.*\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-{{error}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Error Counts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 2 - }, - "hiddenSeries": false, - "id": 97, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", + "datasource": "-- Grafana --", + "enable": true, "hide": false, - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "B" - }, - { - "expr": "result_success{type=\"pctile\",alias=\"$Alias\"}", - "hide": false, - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 2 - }, - "hiddenSeries": false, - "id": 98, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "tries{type=\"pctile\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "op tries distribution", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 99, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p75 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 8 - }, - "hiddenSeries": false, - "id": 111, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\",alias=\"$Alias\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "p99 client overhead", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "ns", - "label": null, - "logBase": 10, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 2, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "id": 109, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "result_success{type=\"pctile\",pctile=\"0\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-min", - "refId": "B" - }, - { - "expr": "result_success{type=\"pctile\",pctile=\"100\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-max", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "service time range", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fieldConfig": { - "defaults": { - "custom": {}, - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 8 - }, - "hiddenSeries": false, - "id": 113, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "cycles_servicetime{type=\"counter\",alias=\"$Alias\"}", - "interval": "", - "legendFormat": "{{alias}}-count", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cycle Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": false, - "schemaVersion": 26, - "style": "dark", - "tags": [ - "NoSQLBench" - ], - "templating": { - "list": [ - { - "allValue": "", - "current": { - "selected": true, - "tags": [], - "text": [ - "All" + "iconColor": "#96D98D", + "limit": 1000, + "name": "ShowMatching", + "showIn": 0, + "tags": [ + "appname:nosqlbench", + "span:$span", + "layer:$layer" ], - "value": [ - "$__all" - ] + "type": "tags" }, - "datasource": "prometheus", - "definition": "{appname=\"nosqlbench\"}", - "error": null, - "hide": 0, - "includeAll": true, - "label": "Alias", - "multi": true, - "name": "Alias", - "options": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "limit": 100, + "name": "Annotations & Alerts", + "showIn": 0, + "type": "dashboard" + }, + { + "datasource": "-- Grafana --", + "enable": false, + "hide": false, + "iconColor": "rgba(255, 96, 96, 1)", + "limit": 1000, + "matchAny": true, + "name": "ShowAll", + "showIn": 0, + "tags": [ + "appname:nosqlbench" + ], + "type": "tags" + } + ] + }, + "description": "Basic Dashboard with Annotations for NoSQLBench 4", + "editable": true, + "gnetId": null, + "graphTooltip": 1, + "id": null, + "iteration": 1607542677976, + "links": [], + "panels": [ + { + "collapsed": true, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 130, + "panels": [ { - "selected": true, - "text": "All", - "value": "$__all" + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 132, + "options": { + "content": "This selects the specific NoSQLBench alias, which includes workload, named scenario, and step components.\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "targets": [ + { + "queryType": "randomWalk", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Alias", + "type": "text" }, { - "selected": false, - "text": "DIAG0", - "value": "DIAG0" + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 133, + "options": { + "content": "This chooses an Annotation Layer to focus on. Each layer is a different shell of execution within NoSQLBench. \n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "targets": [ + { + "queryType": "randomWalk", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "AnLayer", + "type": "text" + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 1 + }, + "id": 134, + "options": { + "content": "This chooses an Annotation Layer to focus on. An instant is a point in time. An Interval is defined by two instants representing start and end times.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "targets": [ + { + "queryType": "randomWalk", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "AnSpan", + "type": "text" } ], - "query": "{appname=\"nosqlbench\"}", - "refresh": 0, - "regex": "/.*alias=\"(\\w+)\".*/", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "title": "NoSQLBench Controls Guide", + "type": "row" }, { - "allValue": " ", - "current": { - "selected": true, - "text": "Activity", - "value": "Activity" + "collapsed": true, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 }, - "error": null, - "hide": 0, - "includeAll": true, - "label": "Annotation Filter", - "multi": false, - "name": "Layer", - "options": [ + "id": 115, + "panels": [ { - "selected": false, - "text": "All", - "value": "$__all" + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 128, + "options": { + "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "", + "transparent": true, + "type": "text" }, { - "selected": false, - "text": "NONE", - "value": "NONE" + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 4 + }, + "id": 117, + "options": { + "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Ops and Successful Ops", + "transparent": true, + "type": "text" }, { - "selected": false, - "text": "CLI", - "value": "CLI" + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 4 + }, + "id": 118, + "options": { + "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Error Counts", + "transparent": true, + "type": "text" }, { - "selected": false, - "text": "Scenario", - "value": "Scenario" + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 4 + }, + "id": 119, + "options": { + "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Distribution", + "transparent": true, + "type": "text" }, { - "selected": false, - "text": "Script", - "value": "Script" + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 4 + }, + "id": 120, + "options": { + "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Op Tries Distribution", + "transparent": true, + "type": "text" }, { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 7 + }, + "id": 121, + "options": { + "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "P75 NB Internals", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 7 + }, + "id": 122, + "options": { + "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "P99 NB Internals", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 7 + }, + "id": 123, + "options": { + "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Service Time Range", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 7 + }, + "id": 124, + "options": { + "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.", + "mode": "markdown" + }, + "pluginVersion": "7.3.4", + "timeFrom": null, + "timeShift": null, + "title": "Cycle Count", + "transparent": true, + "type": "text" + } + ], + "title": "NoSQLBench Metrics Guide", + "type": "row" + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 91, + "panels": [], + "title": "NoSQLBench Metrics", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 3 + }, + "hiddenSeries": false, + "id": 95, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-allops", + "refId": "C" + }, + { + "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-allops", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ops and Successful Ops", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 3 + }, + "hiddenSeries": false, + "id": 93, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"errorcounts.*\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-{{error}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Error Counts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 3 + }, + "hiddenSeries": false, + "id": 97, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\",alias=~\"$Alias\"}", + "hide": false, + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "B" + }, + { + "expr": "result_success{type=\"pctile\",alias=~\"$alias\"}", + "hide": false, + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 3 + }, + "hiddenSeries": false, + "id": 98, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "tries{type=\"pctile\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-p{{pctile}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "op tries distribution", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 9 + }, + "hiddenSeries": false, + "id": 99, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p75 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 9 + }, + "hiddenSeries": false, + "id": 111, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\",alias=~\"$alias\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p99 client overhead", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ns", + "label": null, + "logBase": 10, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 9 + }, + "hiddenSeries": false, + "id": 109, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "result_success{type=\"pctile\",pctile=\"0\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-min", + "refId": "B" + }, + { + "expr": "result_success{type=\"pctile\",pctile=\"100\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-max", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "service time range", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 9 + }, + "hiddenSeries": false, + "id": 113, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.4", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "cycles_servicetime{type=\"counter\",alias=~\"$alias\"}", + "interval": "", + "legendFormat": "{{alias}}-count", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Cycle Count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "1m", + "schemaVersion": 26, + "style": "dark", + "tags": [ + "NoSQLBench" + ], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "prometheus", + "definition": "{appname=\"nosqlbench\"}", + "error": null, + "hide": 0, + "includeAll": true, + "label": "Alias", + "multi": true, + "name": "alias", + "options": [], + "query": "{appname=\"nosqlbench\"}", + "refresh": 2, + "regex": "/.*alias=\"([^\"]+)\".*/", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": " ", + "current": { "selected": true, "text": "Activity", "value": "Activity" }, - { + "error": null, + "hide": 0, + "includeAll": true, + "label": "AnLayer", + "multi": false, + "name": "layer", + "options": [ + { + "selected": false, + "text": "All", + "value": "$__all" + }, + { + "selected": false, + "text": "NONE", + "value": "NONE" + }, + { + "selected": false, + "text": "CLI", + "value": "CLI" + }, + { + "selected": true, + "text": "Scenario", + "value": "Scenario" + }, + { + "selected": false, + "text": "Script", + "value": "Script" + }, + { + "selected": false, + "text": "Activity", + "value": "Activity" + } + ], + "query": "NONE,CLI,Scenario,Script,Activity", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": null, + "current": { "selected": false, - "text": "Motor", - "value": "Motor" - } - ], - "query": "NONE,CLI,Scenario,Script,Activity,Motor", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { + "text": "interval", + "value": "interval" + }, + "error": null, + "hide": 0, + "includeAll": false, + "label": "AnSpan", + "multi": false, + "name": "span", + "options": [ + { + "selected": false, + "text": "NONE", + "value": "NONE" + }, + { + "selected": false, + "text": "interval", + "value": "interval" + }, + { + "selected": true, + "text": "instant", + "value": "instant" + } + ], + "query": "NONE,interval,instant", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { "from": "now-5m", "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "NB4 Dashboard", - "uid": "aIIX1f6Wz", - "version": 10 -} + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "NB4 Dashboard", + "uid": "aIIX1f6Wz", + "version": 8 + } } From c83f4d87dab9439fce4e8501a2e4d7e8f9ba9657 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 9 Dec 2020 16:25:30 -0600 Subject: [PATCH 149/164] prototype metrics summarizer --- .../analyzer/GrafanaRegionAnalyzer.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/analyzer/GrafanaRegionAnalyzer.java diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/analyzer/GrafanaRegionAnalyzer.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/analyzer/GrafanaRegionAnalyzer.java new file mode 100644 index 000000000..70a061c0c --- /dev/null +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/analyzer/GrafanaRegionAnalyzer.java @@ -0,0 +1,42 @@ +package io.nosqlbench.engine.clients.grafana.analyzer; + +import io.nosqlbench.engine.clients.grafana.By; +import io.nosqlbench.engine.clients.grafana.GrafanaClient; +import io.nosqlbench.engine.clients.grafana.GrafanaClientConfig; +import io.nosqlbench.engine.clients.grafana.transfer.Annotations; +import io.nosqlbench.engine.clients.grafana.transfer.DashboardResponse; +import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation; +import io.nosqlbench.nb.api.SystemId; + +import java.nio.file.Path; +import java.util.Comparator; +import java.util.List; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +public class GrafanaRegionAnalyzer { + + public static void main(String[] args) { + + GrafanaClientConfig ccfg = new GrafanaClientConfig(); + ccfg.setBaseUri("http://18.191.247.162:3000/"); + GrafanaClient gclient = new GrafanaClient(ccfg); + Supplier namer = () -> "nosqlbench-" + SystemId.getNodeId() + "-" + System.currentTimeMillis(); + gclient.cacheApiToken(namer, "Admin", Long.MAX_VALUE, Path.of("grafana_apikey"), "admin", "admin"); + + + DashboardResponse dashboardResponse = gclient.getDashboardByUid("aIIX1f6Wz"); + + + Annotations annotations = gclient.findAnnotations(By.tag("appname:nosqlbench,layer:Activity")); + List mainActivities = annotations.stream() + .filter(s -> s.getTagMap().getOrDefault("alias", "").contains("main")) + .sorted(Comparator.comparing(t -> t.getTime())) + .collect(Collectors.toList()); + System.out.println("end"); + GrafanaAnnotation last = mainActivities.get(mainActivities.size() - 1); + long start = last.getTime(); + long end = last.getTimeEnd(); + + } +} From bb0884e21fdeb3544c8a0971ae67c4f13f233232 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 9 Dec 2020 16:26:12 -0600 Subject: [PATCH 150/164] grafana client improvements --- .../nosqlbench/engine/clients/grafana/By.java | 17 +++-- .../engine/clients/grafana/GrafanaClient.java | 73 ++++++++++++++++++- .../clients/grafana/transfer/Dashboard.java | 28 +++++++ .../transfer/DashboardAnnotations.java | 8 ++ .../grafana/transfer/DashboardResponse.java | 9 +++ .../grafana/transfer/GrafanaAnnotation.java | 9 +++ .../clients/grafana/transfer/PanelDef.java | 24 ++++++ 7 files changed, 159 insertions(+), 9 deletions(-) create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Dashboard.java create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardAnnotations.java create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardResponse.java create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/PanelDef.java diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java index 110b251de..ab5e056b3 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java @@ -1,6 +1,7 @@ package io.nosqlbench.engine.clients.grafana; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class By { @@ -57,8 +58,11 @@ public class By { return new By("type", "alert"); } - public static By tags(String tag) { - return new By("tags", tag); + /** + * Add one tag at a time, in either "tag" or "tag:value" form. + */ + public static By tag(String tag) { + return new By("tag", tag); } public static By id(int id) { @@ -69,11 +73,12 @@ public class By { List tags = new ArrayList<>(); StringBuilder sb = new StringBuilder(); for (By by : bys) { - if (by.key.equals("tags")) { - tags.add(by.value.toString()); + if (by.key.equals("tag")) { + tags.addAll(Arrays.asList(by.value.toString().split(","))); + } else { + sb.append(by.key).append("=").append(by.value); + sb.append("&"); } - sb.append(by.key).append("=").append(by.value); - sb.append("&"); } for (String tag : tags) { sb.append("tags=").append(tag).append("&"); diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java index 597977f81..419b5f0f1 100644 --- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java @@ -2,13 +2,19 @@ package io.nosqlbench.engine.clients.grafana; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation; import io.nosqlbench.engine.clients.grafana.transfer.Annotations; import io.nosqlbench.engine.clients.grafana.transfer.ApiTokenRequest; +import io.nosqlbench.engine.clients.grafana.transfer.DashboardResponse; +import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation; +import java.io.File; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.function.Supplier; /** * @see Grafana Annotations API Docs @@ -179,6 +185,27 @@ public class GrafanaClient { return savedGrafanaAnnotation; } + public DashboardResponse getDashboardByUid(String uid) { + HttpClient client = config.newClient(); + HttpRequest.Builder rqb = config.newRequest("api/dashboards/uid/" + uid); + rqb = rqb.GET(); + + HttpResponse response = null; + try { + response = client.send(rqb.build(), HttpResponse.BodyHandlers.ofString()); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (response.statusCode() < 200 || response.statusCode() >= 300) { + throw new RuntimeException("Getting dashboard by uid (" + uid + ") failed with status code " + response.statusCode() + + " at baseuri " + config.getBaseUri() + ": " + response.body()); + } + String body = response.body(); + + DashboardResponse dashboardResponse = gson.fromJson(body, DashboardResponse.class); + return dashboardResponse; + } + /** *
{@code
      * POST /api/annotations/graphite
@@ -302,13 +329,52 @@ public class GrafanaClient {
         throw new RuntimeException("unimplemented");
     }
 
+    /**
+     * This can be called to create an api token and store it for later use as long as you
+     * have the admin credentials for basic auth. This is preferred to continuing to
+     * passing basic auth for admin privileges. The permissions can now be narrowed or managed
+     * in a modular way.
+     *
+     * @param namer       the principal name for the privelege
+     * @param role        the Grafana role
+     * @param ttl         Length of validity for the granted api token
+     * @param keyfilePath The path of the token. If it is present it will simply be used.
+     * @param un          The basic auth username for the Admin role
+     * @param pw          The basic auth password for the Admin role
+     */
+    public void cacheApiToken(Supplier namer, String role, long ttl, Path keyfilePath, String un, String pw) {
+        if (!Files.exists(keyfilePath)) {
+            GrafanaClientConfig basicClientConfig = config.copy();
+            basicClientConfig = basicClientConfig.basicAuth(un, pw);
+            GrafanaClient apiClient = new GrafanaClient(basicClientConfig);
+            String keyName = namer.get();
+            ApiToken apiToken = apiClient.createApiToken(keyName, role, ttl);
+            try {
+                if (keyfilePath.toString().contains(File.separator)) {
+                    Files.createDirectories(keyfilePath.getParent(),
+                            PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---")));
+                }
+                Files.writeString(keyfilePath, apiToken.getKey());
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        GrafanaMetricsAnnotator.AuthWrapper authHeaderSupplier = new GrafanaMetricsAnnotator.AuthWrapper(
+                "Authorization",
+                new GrafanaKeyFileReader(keyfilePath),
+                s -> "Bearer " + s
+        );
+        config.addHeaderSource(authHeaderSupplier);
+    }
+
     public ApiToken createApiToken(String name, String role, long ttl) {
         ApiTokenRequest r = new ApiTokenRequest(name, role, ttl);
-        ApiToken token = postToGrafana(r, ApiToken.class, "gen api token");
+        ApiToken token = postApiTokenRequest(r, ApiToken.class, "gen api token");
         return token;
     }
 
-    private  T postToGrafana(Object request, Class clazz, String desc) {
+    private  T postApiTokenRequest(Object request, Class clazz, String desc) {
         HttpRequest rq = config.newJsonPOST("api/auth/keys", request);
         HttpClient client = config.newClient();
 
@@ -331,4 +397,5 @@ public class GrafanaClient {
         T result = gson.fromJson(body, clazz);
         return result;
     }
+
 }
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Dashboard.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Dashboard.java
new file mode 100644
index 000000000..10c9bfe25
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Dashboard.java
@@ -0,0 +1,28 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Dashboard {
+    Map annotations = new HashMap<>();
+    String description;
+    boolean editable;
+    long graphToolTip;
+    long id;
+    long iteration;
+    List links;
+    List panels;
+    String refresh;
+    long schemaVersion;
+    String style;
+    List tags;
+    Map templating;
+    Map time;
+    Map> timepicker;
+    String timezone;
+    String title;
+    String uid;
+    long version;
+
+}
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardAnnotations.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardAnnotations.java
new file mode 100644
index 000000000..242f62ba4
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardAnnotations.java
@@ -0,0 +1,8 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.List;
+import java.util.Map;
+
+public class DashboardAnnotations {
+    List> list;
+}
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardResponse.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardResponse.java
new file mode 100644
index 000000000..06f0132b9
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardResponse.java
@@ -0,0 +1,9 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DashboardResponse {
+    Map meta = new HashMap<>();
+    Dashboard dashboard;
+}
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java
index 058abdca9..f03a2d279 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java
@@ -171,4 +171,13 @@ public class GrafanaAnnotation {
                 ", data=" + data +
                 '}';
     }
+
+    public LinkedHashMap getTagMap() {
+        LinkedHashMap map = new LinkedHashMap<>();
+        for (String tag : this.getTags()) {
+            String[] split = tag.split(":", 2);
+            map.put(split[0], (split.length == 2 ? split[1] : null));
+        }
+        return map;
+    }
 }
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/PanelDef.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/PanelDef.java
new file mode 100644
index 000000000..fcefc648c
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/PanelDef.java
@@ -0,0 +1,24 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.List;
+import java.util.Map;
+
+public class PanelDef {
+    boolean collapsed;
+    Map gridPos;
+    long id;
+    List panels;
+    String description;
+    Map fieldConfig;
+    Map options;
+    String pluginVersion;
+    List> targets;
+    String title;
+    String type;
+    String datasource;
+
+
+    public String toString() {
+        return id + ":'" + title + "'";
+    }
+}

From 8052e64ead8c0919617889402a74fd99f42ad57b Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Wed, 9 Dec 2020 16:26:35 -0600
Subject: [PATCH 151/164] make docker prom tag configurable

---
 .../main/java/io/nosqlbench/engine/cli/NBCLI.java   |  3 ++-
 .../java/io/nosqlbench/engine/cli/NBCLIOptions.java | 13 +++++++++++--
 2 files changed, 13 insertions(+), 3 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 fe9b1cd57..44930bc46 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
@@ -134,7 +134,8 @@ public class NBCLI {
             logger.info("Docker metrics is enabled. Docker must be installed for this to work");
             DockerMetricsManager dmh = new DockerMetricsManager();
             Map dashboardOptions = Map.of(
-                    DockerMetricsManager.GRAFANA_TAG, globalOptions.getDockerGrafanaTag()
+                    DockerMetricsManager.GRAFANA_TAG, globalOptions.getDockerGrafanaTag(),
+                    DockerMetricsManager.PROM_TAG, globalOptions.getDockerPromTag()
             );
             dmh.startMetrics(dashboardOptions);
             String warn = "Docker Containers are started, for grafana and prometheus, hit" +
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 ac1f55f42..6dda818f0 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
@@ -35,7 +35,6 @@ public class NBCLIOptions {
 
     private static final String METRICS_PREFIX = "--metrics-prefix";
 
-    //    private static final String ANNOTATE_TO_GRAFANA = "--grafana-baseurl";
     private static final String ANNOTATE_EVENTS = "--annotate";
     private static final String ANNOTATORS_CONFIG = "--annotators";
     private static final String DEFAULT_ANNOTATORS = "all";
@@ -86,11 +85,12 @@ public class NBCLIOptions {
     private final static String ENABLE_CHART = "--enable-chart";
     private final static String DOCKER_METRICS = "--docker-metrics";
     private final static String DOCKER_METRICS_AT = "--docker-metrics-at";
+    private static final String DOCKER_GRAFANA_TAG = "--docker-grafana-tag";
+    private static final String DOCKER_PROM_TAG = "--docker-prom-tag";
 
     private static final String GRAALJS_ENGINE = "--graaljs";
     private static final String NASHORN_ENGINE = "--nashorn";
     private static final String GRAALJS_COMPAT = "--graaljs-compat";
-    private static final String DOCKER_GRAFANA_TAG = "--docker-grafana-tag";
 
     private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable";
 
@@ -136,6 +136,7 @@ public class NBCLIOptions {
     private boolean graaljs_compat = false;
     private int hdr_digits = 3;
     private String docker_grafana_tag = "7.3.4";
+    private String docker_prom_tag = "latest";
     private boolean showStackTraces = false;
     private boolean compileScript = false;
     private String scriptFile = null;
@@ -283,6 +284,10 @@ public class NBCLIOptions {
                     arglist.removeFirst();
                     workspacesDirectory = readWordOrThrow(arglist, "a workspaces directory");
                     break;
+                case DOCKER_PROM_TAG:
+                    arglist.removeFirst();
+                    docker_prom_tag = readWordOrThrow(arglist, "prometheus docker tag");
+                    break;
                 case DOCKER_GRAFANA_TAG:
                     arglist.removeFirst();
                     docker_grafana_tag = readWordOrThrow(arglist, "grafana docker tag");
@@ -764,6 +769,10 @@ public class NBCLIOptions {
         return docker_grafana_tag;
     }
 
+    public String getDockerPromTag() {
+        return docker_prom_tag;
+    }
+
     public static class LoggerConfigData {
         public String file;
         public String pattern = ".*";

From 12acd07f4c2c5558c19ea6b149162ae7907b79bd Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Wed, 9 Dec 2020 16:27:25 -0600
Subject: [PATCH 152/164] parameterize docker prom tag

---
 .../engine/docker/DockerMetricsManager.java         | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
index bf9262255..7208b6985 100644
--- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
+++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
@@ -29,6 +29,7 @@ import static io.nosqlbench.engine.docker.RestHelper.post;
 public class DockerMetricsManager {
 
     public static final String GRAFANA_TAG = "grafana_tag";
+    public static final String PROM_TAG = "prom_tag";
 
     private final DockerHelper dh;
 
@@ -44,7 +45,7 @@ public class DockerMetricsManager {
 
         String ip = startGraphite();
 
-        startPrometheus(ip);
+        startPrometheus(ip, options.get(PROM_TAG));
 
         startGrafana(ip, options.get(GRAFANA_TAG));
 
@@ -71,9 +72,9 @@ public class DockerMetricsManager {
         );
         List envList = Arrays.asList(
                 "GF_SECURITY_ADMIN_PASSWORD=admin",
-                "GF_AUTH_ANONYMOUS_ENABLED=\"true\"",
-                "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_URL=https://assethub.datastax.com:3001",
-                "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_NAME=\"Upload to DataStax\""
+                "GF_AUTH_ANONYMOUS_ENABLED=\"true\""
+//                , "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_URL=https://assethub.datastax.com:3001",
+//                "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_NAME=\"Upload to DataStax\""
         );
 
         String reload = null;
@@ -93,12 +94,10 @@ public class DockerMetricsManager {
         }
     }
 
-    private void startPrometheus(String ip) {
+    private void startPrometheus(String ip, String tag) {
 
         logger.info("preparing to start docker metrics");
         String PROMETHEUS_IMG = "prom/prometheus";
-        String tag = "latest";
-//        String tag = "v2.20.1";
         String name = "prom";
         List port = Arrays.asList(9090);
 

From 0780005958e74666f5621cc983f5f03a362f6f8f Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Wed, 9 Dec 2020 16:27:31 -0600
Subject: [PATCH 153/164] move grafana auto-key to grafana client

---
 .../grafana/GrafanaMetricsAnnotator.java      | 50 ++++++++++---------
 1 file changed, 26 insertions(+), 24 deletions(-)

diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java
index bd2b1502a..c93bb1e48 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java
@@ -11,9 +11,7 @@ import io.nosqlbench.nb.api.config.*;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.attribute.PosixFilePermissions;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -143,34 +141,38 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware {
             keyfilePath = apikeyLocation.map(Path::of).orElseThrow();
         }
 
-        if (!Files.exists(keyfilePath)) {
-            logger.info("Auto-configuring grafana apikey.");
-            GrafanaClientConfig apiClientConf = gc.copy().basicAuth("admin", "admin");
-            GrafanaClient apiClient = new GrafanaClient(apiClientConf);
-            try {
-                String nodeId = SystemId.getNodeId();
 
-                String keyName = "nosqlbench-" + nodeId + "-" + System.currentTimeMillis();
-                ApiToken apiToken = apiClient.createApiToken(keyName, "Admin", Long.MAX_VALUE);
-                Files.createDirectories(keyfilePath.getParent(),
-                        PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---")));
-                Files.writeString(keyfilePath, apiToken.getKey());
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        AuthWrapper authHeaderSupplier = new AuthWrapper(
-                "Authorization",
-                new GrafanaKeyFileReader(keyfilePath),
-                s -> "Bearer " + s
-        );
-        gc.addHeaderSource(authHeaderSupplier);
+//        if (!Files.exists(keyfilePath)) {
+//            logger.info("Auto-configuring grafana apikey.");
+//            GrafanaClientConfig apiClientConf = gc.copy().basicAuth("admin", "admin");
+//            GrafanaClient apiClient = new GrafanaClient(apiClientConf);
+//            try {
+//                String nodeId = SystemId.getNodeId();
+//
+//                String keyName = "nosqlbench-" + nodeId + "-" + System.currentTimeMillis();
+//                ApiToken apiToken = apiClient.createApiToken(keyName, "Admin", Long.MAX_VALUE);
+//                Files.createDirectories(keyfilePath.getParent(),
+//                        PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---")));
+//                Files.writeString(keyfilePath, apiToken.getKey());
+//            } catch (Exception e) {
+//                throw new RuntimeException(e);
+//            }
+//        }
+//
+//        AuthWrapper authHeaderSupplier = new AuthWrapper(
+//                "Authorization",
+//                new GrafanaKeyFileReader(keyfilePath),
+//                s -> "Bearer " + s
+//        );
+//        gc.addHeaderSource(authHeaderSupplier);
 
         this.onError = OnError.valueOfName(cfg.get("onerror").toString());
 
         this.client = new GrafanaClient(gc);
 
+        String keyName = "nosqlbench-" + SystemId.getNodeId() + "-" + System.currentTimeMillis();
+        Supplier namer = () -> "nosqlbench-" + SystemId.getNodeId() + "-" + System.currentTimeMillis();
+        this.client.cacheApiToken(namer, "Admin", Long.MAX_VALUE, keyfilePath, "admin", "admin");
 
     }
 

From 832da1854845a6326db13d878d55641fb2d6e79e Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Fri, 11 Dec 2020 15:17:03 -0600
Subject: [PATCH 154/164] qualify docker image search with tags

---
 .../engine/docker/DockerHelper.java           | 45 ++++++++++---------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
index dd1bd4e46..1901a372a 100644
--- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
+++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
@@ -50,43 +50,28 @@ public class DockerHelper {
 
         boolean existingContainer = removeExitedContainers(name);
 
-        /*
-        if(startStoppedContainer(name)){
-            return null;
-        };
-         */
-
         Container containerId = searchContainer(name, reload, tag);
         if (containerId != null) {
             logger.debug("container is already up with the id: " + containerId.getId());
             return null;
         }
 
-        Info info = dockerClient.infoCmd().exec();
-        dockerClient.buildImageCmd();
+        boolean found;
 
-//        String term = IMG+":"+tag;
-
-//        String term = IMG.split("/")[1];
-        //List dockerSearch = dockerClient.searchImagesCmd(term).exec();
-        List dockerList = dockerClient
-                .listImagesCmd()
-                .withImageNameFilter(IMG + ":" + tag)
-                .exec();
-        if (dockerList.size() == 0) {
+        List images = dockerClient.listImagesCmd().withImageNameFilter(IMG).exec();
+        if (!found(images, IMG, List.of(tag))) {
             dockerClient.pullImageCmd(IMG)
                     .withTag(tag)
                     .exec(new PullImageResultCallback()).awaitSuccess();
 
-            dockerList = dockerClient.listImagesCmd().withImageNameFilter(IMG + ":" + tag).exec();
-            if (dockerList.size() == 0) {
+            images = dockerClient.listImagesCmd().withImageNameFilter(IMG).exec();
+            if (!found(images, IMG, List.of(tag))) {
                 logger.error(String.format("Image %s not found, unable to automatically pull image." +
                                 " Check `docker images`",
                         IMG));
                 System.exit(1);
             }
         }
-        logger.info("Search returned" + dockerList.toString());
 
 
         List tcpPorts = new ArrayList<>();
@@ -112,7 +97,7 @@ public class DockerHelper {
 
         List links = linkNames.stream().map(x -> new Link(x, x)).collect(Collectors.toList());
         CreateContainerCmd builder = dockerClient.createContainerCmd(IMG + ":" + tag);
-        if (cmdList!=null) {
+        if (cmdList != null) {
             builder = builder.withCmd(cmdList);
         }
 
@@ -124,7 +109,7 @@ public class DockerHelper {
                 .withBinds(volumeBindList));
         builder = builder.withName(name);
         builder = builder.withLinks(links);
-        if (envList!=null) {
+        if (envList != null) {
             builder = builder.withEnv(envList);
         }
         CreateContainerResponse containerResponse = builder.exec();
@@ -238,4 +223,20 @@ public class DockerHelper {
         }
 
     }
+
+    private boolean found(List images, String label, List tags) {
+        List validRepoTags = tags.stream().map(s -> label + ":" + s).collect(Collectors.toList());
+        for (Image image : images) {
+            String[] foundRepoTags = image.getRepoTags();
+            for (String foundRepoTag : foundRepoTags) {
+                for (String validRepoTag : validRepoTags) {
+                    if (foundRepoTag.equals(validRepoTag)) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
 }

From bd97680ce8b2e3b9c9ac4cd2aca71cdc17218b48 Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 10:42:50 -0600
Subject: [PATCH 155/164] allow prereleases from main for nb4

---
 .github/workflows/release.yml | 4 ++--
 scripts/release-perform.sh    | 3 ++-
 scripts/release-prepare.sh    | 3 ++-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ad11d6740..57f59ceff 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -108,8 +108,8 @@ jobs:
       - name: prepare Maven release
         run: scripts/release-prepare.sh
         env:
-          RELEASE_BRANCH_NAME: "main"
-          PRERELEASE_BRANCH_PATTERN: "-rc"
+          RELEASE_BRANCH_PATTERN: "release"
+          PRERELEASE_BRANCH_PATTERN: "main"
           GIT_RELEASE_BOT_NAME: "nb-droid"
           GIT_RELEASE_BOT_EMAIL: ${{ secrets.GIT_RELEASE_BOT_EMAIL }}
           ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }}
diff --git a/scripts/release-perform.sh b/scripts/release-perform.sh
index 2ae4aae49..c21914fd5 100755
--- a/scripts/release-perform.sh
+++ b/scripts/release-perform.sh
@@ -22,8 +22,9 @@ fi
 PRERELEASE_BRANCH_PATTERN=${PRERELEASE_BRANCH_PATTERN:?PRERELEASE_BRANCH_PATTERN must be provided}
 # Filter the branch to execute the release on
 readonly local current_branch=$(git rev-parse --abbrev-ref HEAD)
+
 echo "Current branch: ${branch}"
-if [[ -n "$RELEASE_BRANCH_NAME" && "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then
+if   [[ -n "${current_branch}" && "${current_branch}" == *"${RELEASE_BRANCH_PATTERN}"* ]]; then
     echo "Building for release branch $RELEASE_BRANCH_NAME"
 elif [[ -n "${current_branch}" && "${current_branch}" == *"${PRERELEASE_BRANCH_PATTERN}"* ]]; then
     echo "Building prerelease for branch $RELEASE_BRANCH_NAME"
diff --git a/scripts/release-prepare.sh b/scripts/release-prepare.sh
index ea84d7ea8..58f5fbde9 100755
--- a/scripts/release-prepare.sh
+++ b/scripts/release-prepare.sh
@@ -13,7 +13,8 @@ PRERELEASE_BRANCH_PATTERN=${PRERELEASE_BRANCH_PATTERN:?PRERELEASE_BRANCH_PATTERN
 # 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 "$RELEASE_BRANCH_NAME" && "${current_branch}" = "$RELEASE_BRANCH_NAME" ]]; then
+
+if   [[ -n "${current_branch}" && "${current_branch}" == *"${RELEASE_BRANCH_PATTERN}"* ]]; then
     echo "Building for release branch $RELEASE_BRANCH_NAME"
 elif [[ -n "${current_branch}" && "${current_branch}" == *"${PRERELEASE_BRANCH_PATTERN}"* ]]; then
     echo "Building prerelease for branch $RELEASE_BRANCH_NAME"

From 402ca1a9be171464601e620d729709d96b1a2f3d Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 10:44:22 -0600
Subject: [PATCH 156/164] trigger release

---
 RELEASENOTES.md                                    | 14 ++++++--------
 .../grafana/transfer/DashboardSnapshot.java        |  4 ++++
 2 files changed, 10 insertions(+), 8 deletions(-)
 create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardSnapshot.java

diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 4adc2f46d..290735dfb 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -1,8 +1,6 @@
-- 526d09cd (HEAD -> nb4-rc1) auto create dirs for grafana_apikey
-- b4ec4c9a (origin/nb4-rc1) trigger build
-- af87ef9c relaxed requirement for finicky test
-- 3436ec61 trigger build
-- 17ed4c1e annotator and dashboard fixes
-- 4dab9b89 move annotations enums to package
-- 6d514cb6 bump middle version number to required java version '15'
-- fa78e27f set NB4 to Java 15
+- 07800059 move grafana auto-key to grafana client
+- 12acd07f parameterize docker prom tag
+- 8052e64e make docker prom tag configurable
+- bb0884e2 grafana client improvements
+- c83f4d87 prototype metrics summarizer
+- 1d107d87 update nb4 dashboard def
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardSnapshot.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardSnapshot.java
new file mode 100644
index 000000000..5e9d173d4
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardSnapshot.java
@@ -0,0 +1,4 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+public class DashboardSnapshot {
+}

From f8b7767c8cfed92fde13163f45b24133b8e55acb Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 10:50:27 -0600
Subject: [PATCH 157/164] build fix

---
 .github/workflows/release.yml                          |  2 +-
 .../engine/clients/grafana/GrafanaClient.java          | 10 ++++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 57f59ceff..8f8af2451 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -16,7 +16,7 @@ jobs:
       - name: setup java
         uses: actions/setup-java@v1
         with:
-        java-version: '15'
+          java-version: '15'
           java-package: jdk
           architecture: x64
 
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
index 419b5f0f1..e1363a1f0 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
@@ -2,10 +2,7 @@ package io.nosqlbench.engine.clients.grafana;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-import io.nosqlbench.engine.clients.grafana.transfer.Annotations;
-import io.nosqlbench.engine.clients.grafana.transfer.ApiTokenRequest;
-import io.nosqlbench.engine.clients.grafana.transfer.DashboardResponse;
-import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation;
+import io.nosqlbench.engine.clients.grafana.transfer.*;
 
 import java.io.File;
 import java.net.http.HttpClient;
@@ -185,6 +182,7 @@ public class GrafanaClient {
         return savedGrafanaAnnotation;
     }
 
+
     public DashboardResponse getDashboardByUid(String uid) {
         HttpClient client = config.newClient();
         HttpRequest.Builder rqb = config.newRequest("api/dashboards/uid/" + uid);
@@ -206,6 +204,10 @@ public class GrafanaClient {
         return dashboardResponse;
     }
 
+    public DashboardSnapshot createSnapshot() {
+
+    }
+
     /**
      * 
{@code
      * POST /api/annotations/graphite

From cf1de73261b3575a9bbbf69b2f6eea9a0a7700b9 Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 10:52:01 -0600
Subject: [PATCH 158/164] trigger release

---
 RELEASENOTES.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 290735dfb..9cd57bbc6 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -4,3 +4,4 @@
 - bb0884e2 grafana client improvements
 - c83f4d87 prototype metrics summarizer
 - 1d107d87 update nb4 dashboard def
+- release testing

From 9f2e48a1a68a6ca0f3c9a9ce287eaf156aacdfc0 Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 11:02:49 -0600
Subject: [PATCH 159/164] fix build scripts

---
 scripts/release-perform.sh | 5 +++--
 scripts/release-prepare.sh | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/scripts/release-perform.sh b/scripts/release-perform.sh
index c21914fd5..dc7c40b37 100755
--- a/scripts/release-perform.sh
+++ b/scripts/release-perform.sh
@@ -5,7 +5,9 @@ set -x
 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_NAME=${RELEASE_BRANCH_NAME:?RELEASE_BRANCH_NAME 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}
+
 #MAVEN_LOCAL_REPO_PATH=${MAVEN_LOCAL_REPO_PATH:?MAVEN_LOCAL_REPO_PATH must be provided}
 #MAVEN_REPO_LOCAL=${MAVEN_REPO_LOCAL:?MAVEN_REPO_LOCAL must be provided}
 #MAVEN_ARGS=${MAVEN_ARGS:?MAVEN_ARGS must be provided}
@@ -19,7 +21,6 @@ if [[ "${last_release_commit_hash}" = "${GITHUB_SHA}" ]]; then
      exit 0
 fi
 
-PRERELEASE_BRANCH_PATTERN=${PRERELEASE_BRANCH_PATTERN:?PRERELEASE_BRANCH_PATTERN must be provided}
 # Filter the branch to execute the release on
 readonly local current_branch=$(git rev-parse --abbrev-ref HEAD)
 
diff --git a/scripts/release-prepare.sh b/scripts/release-prepare.sh
index 58f5fbde9..cac045fd6 100755
--- a/scripts/release-prepare.sh
+++ b/scripts/release-prepare.sh
@@ -5,7 +5,7 @@ set -x
 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_NAME=${RELEASE_BRANCH_NAME:?RELEASE_BRANCH_NAME 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

From 77954b14dac312b4515a20a04006b92499e089ca Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 11:03:05 -0600
Subject: [PATCH 160/164] trigger release

---
 RELEASENOTES.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 9cd57bbc6..290735dfb 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -4,4 +4,3 @@
 - bb0884e2 grafana client improvements
 - c83f4d87 prototype metrics summarizer
 - 1d107d87 update nb4 dashboard def
-- release testing

From 774e91eda8d5a94a6d5b8f8f5f1ed81bcb64ed3d Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 11:13:25 -0600
Subject: [PATCH 161/164] fix build

---
 .../io/nosqlbench/engine/clients/grafana/GrafanaClient.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
index e1363a1f0..078bb9bda 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
@@ -205,7 +205,7 @@ public class GrafanaClient {
     }
 
     public DashboardSnapshot createSnapshot() {
-
+        return null;
     }
 
     /**

From 39f0759c8c0dda3830c4015b45d2e43b728f9b36 Mon Sep 17 00:00:00 2001
From: Jonathan Shook 
Date: Mon, 14 Dec 2020 11:21:45 -0600
Subject: [PATCH 162/164] trigger release

---
 RELEASENOTES.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 290735dfb..af8b5a871 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -4,3 +4,4 @@
 - bb0884e2 grafana client improvements
 - c83f4d87 prototype metrics summarizer
 - 1d107d87 update nb4 dashboard def
+- trigger release

From c3dafed7e9f55d810b0b4dc0cb940ec0c5880d46 Mon Sep 17 00:00:00 2001
From: nb-droid 
Date: Mon, 14 Dec 2020 18:56:57 +0000
Subject: [PATCH 163/164] [maven-release-plugin] prepare release
 nosqlbench-4.15.5

---
 docsys/pom.xml                 |  6 +++---
 driver-cql-shaded/pom.xml      |  6 +++---
 driver-cqlverify/pom.xml       |  6 +++---
 driver-diag/pom.xml            |  6 +++---
 driver-dsegraph-shaded/pom.xml |  6 +++---
 driver-http/pom.xml            |  6 +++---
 driver-jmx/pom.xml             |  6 +++---
 driver-kafka/pom.xml           |  6 +++---
 driver-mongodb/pom.xml         |  6 +++---
 driver-stdout/pom.xml          |  6 +++---
 driver-tcp/pom.xml             |  8 ++++----
 driver-web/pom.xml             |  6 +++---
 drivers-api/pom.xml            |  6 +++---
 engine-api/pom.xml             | 10 +++++-----
 engine-cli/pom.xml             |  6 +++---
 engine-clients/pom.xml         |  4 ++--
 engine-core/pom.xml            |  8 ++++----
 engine-docker/pom.xml          |  4 ++--
 engine-docs/pom.xml            |  4 ++--
 engine-extensions/pom.xml      |  4 ++--
 engine-rest/pom.xml            |  4 ++--
 mvn-defaults/pom.xml           |  4 ++--
 nb-annotations/pom.xml         |  2 +-
 nb-api/pom.xml                 |  4 ++--
 nb/pom.xml                     | 36 +++++++++++++++++-----------------
 pom.xml                        |  4 ++--
 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 +++++++--------
 34 files changed, 111 insertions(+), 111 deletions(-)

diff --git a/docsys/pom.xml b/docsys/pom.xml
index 281fb1882..fbf5932b7 100644
--- a/docsys/pom.xml
+++ b/docsys/pom.xml
@@ -9,7 +9,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -18,7 +18,7 @@
         
             io.nosqlbench
             nb-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
@@ -98,7 +98,7 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml
index e1680a6aa..a2e47a44c 100644
--- a/driver-cql-shaded/pom.xml
+++ b/driver-cql-shaded/pom.xml
@@ -4,7 +4,7 @@
     
         io.nosqlbench
         mvn-defaults
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -23,13 +23,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml
index 8fa57456b..6af8c80fe 100644
--- a/driver-cqlverify/pom.xml
+++ b/driver-cqlverify/pom.xml
@@ -4,7 +4,7 @@
   
     io.nosqlbench
     mvn-defaults
-    4.15.5-SNAPSHOT
+    4.15.5
     ../mvn-defaults
   
 
@@ -24,13 +24,13 @@
     
       io.nosqlbench
       driver-cql-shaded
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       drivers-api
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
   
diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml
index 593ddcde3..bb806cb6b 100644
--- a/driver-diag/pom.xml
+++ b/driver-diag/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -20,13 +20,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml
index b445ca375..9df551bd8 100644
--- a/driver-dsegraph-shaded/pom.xml
+++ b/driver-dsegraph-shaded/pom.xml
@@ -4,7 +4,7 @@
   
     io.nosqlbench
     mvn-defaults
-    4.15.5-SNAPSHOT
+    4.15.5
     ../mvn-defaults
   
 
@@ -23,13 +23,13 @@
     
       io.nosqlbench
       engine-api
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       drivers-api
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
diff --git a/driver-http/pom.xml b/driver-http/pom.xml
index 070b676ae..b717c7613 100644
--- a/driver-http/pom.xml
+++ b/driver-http/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml
index a8c0bb1b1..6f688523d 100644
--- a/driver-jmx/pom.xml
+++ b/driver-jmx/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml
index 4a330b5a0..55c3a102f 100644
--- a/driver-kafka/pom.xml
+++ b/driver-kafka/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -44,13 +44,13 @@
       
         io.nosqlbench
         engine-api
-        4.15.5-SNAPSHOT
+        4.15.5
       
 
       
         io.nosqlbench
         driver-stdout
-        4.15.5-SNAPSHOT
+        4.15.5
       
 
       
diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml
index b8ec87e7f..44aadc90d 100644
--- a/driver-mongodb/pom.xml
+++ b/driver-mongodb/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -21,13 +21,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml
index d4745c9a9..ef39aa75e 100644
--- a/driver-stdout/pom.xml
+++ b/driver-stdout/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml
index 0c0282353..ba55a1b1a 100644
--- a/driver-tcp/pom.xml
+++ b/driver-tcp/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -24,19 +24,19 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             driver-stdout
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/driver-web/pom.xml b/driver-web/pom.xml
index 2ff90a4a1..6d1e65dfb 100644
--- a/driver-web/pom.xml
+++ b/driver-web/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml
index c295faa1a..70d1e51de 100644
--- a/drivers-api/pom.xml
+++ b/drivers-api/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -23,13 +23,13 @@
         
             io.nosqlbench
             nb-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             virtdata-userlibs
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/engine-api/pom.xml b/engine-api/pom.xml
index fa7c94a4d..b48ae38c3 100644
--- a/engine-api/pom.xml
+++ b/engine-api/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -23,25 +23,25 @@
         
             io.nosqlbench
             nb-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             nb-annotations
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             virtdata-userlibs
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml
index 6bcc5e654..60a4aed1d 100644
--- a/engine-cli/pom.xml
+++ b/engine-cli/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -23,13 +23,13 @@
         
             io.nosqlbench
             engine-core
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             engine-docker
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml
index 6a5061cd8..60d6e69c0 100644
--- a/engine-clients/pom.xml
+++ b/engine-clients/pom.xml
@@ -5,7 +5,7 @@
   
     mvn-defaults
     io.nosqlbench
-    4.15.5-SNAPSHOT
+    4.15.5
     ../mvn-defaults
   
 
@@ -21,7 +21,7 @@
     
       io.nosqlbench
       engine-api
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
   
diff --git a/engine-core/pom.xml b/engine-core/pom.xml
index cad9a9018..6b009145c 100644
--- a/engine-core/pom.xml
+++ b/engine-core/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -28,13 +28,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
@@ -85,7 +85,7 @@
       
         io.nosqlbench
         engine-clients
-        4.15.5-SNAPSHOT
+        4.15.5
         compile
       
 
diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml
index 028e5a0da..3b4108e4c 100644
--- a/engine-docker/pom.xml
+++ b/engine-docker/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -65,7 +65,7 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
     
 
diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml
index 69eb64fda..bf1e51830 100644
--- a/engine-docs/pom.xml
+++ b/engine-docs/pom.xml
@@ -4,7 +4,7 @@
   
     mvn-defaults
     io.nosqlbench
-    4.15.5-SNAPSHOT
+    4.15.5
     ../mvn-defaults
   
 
@@ -28,7 +28,7 @@
     
       io.nosqlbench
       docsys
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
   
diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml
index d0bbe0dfe..f85c090a5 100644
--- a/engine-extensions/pom.xml
+++ b/engine-extensions/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -22,7 +22,7 @@
         
             io.nosqlbench
             engine-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml
index a916876d5..ec5b73341 100644
--- a/engine-rest/pom.xml
+++ b/engine-rest/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -47,7 +47,7 @@
         
             io.nosqlbench
             engine-cli
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml
index 813c07559..f63744359 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -3,7 +3,7 @@
 
   io.nosqlbench
   mvn-defaults
-  4.15.5-SNAPSHOT
+  4.15.5
   pom
 
   
@@ -90,7 +90,7 @@
   
     scm:git:https://github.com/nosqlbench/nosqlbench.git
     
-    HEAD
+    nosqlbench-4.15.5
   
 
   
diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml
index 878b6d3a6..940900fba 100644
--- a/nb-annotations/pom.xml
+++ b/nb-annotations/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
diff --git a/nb-api/pom.xml b/nb-api/pom.xml
index e6ffe3f7b..a37cc134c 100644
--- a/nb-api/pom.xml
+++ b/nb-api/pom.xml
@@ -5,7 +5,7 @@
   
     mvn-defaults
     io.nosqlbench
-    4.15.5-SNAPSHOT
+    4.15.5
     ../mvn-defaults
   
 
@@ -31,7 +31,7 @@
     
       io.nosqlbench
       nb-annotations
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
diff --git a/nb/pom.xml b/nb/pom.xml
index 21eec7188..f81f3d977 100644
--- a/nb/pom.xml
+++ b/nb/pom.xml
@@ -5,7 +5,7 @@
   
     mvn-defaults
     io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
     ../mvn-defaults
   
 
@@ -24,31 +24,31 @@
     
       io.nosqlbench
       engine-rest
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       engine-cli
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       engine-docs
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       engine-core
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       engine-extensions
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
@@ -60,67 +60,67 @@
     
       io.nosqlbench
       driver-web
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       driver-kafka
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       driver-stdout
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       driver-diag
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
       io.nosqlbench
       driver-tcp
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
       
           io.nosqlbench
           driver-http
-        4.15.5-SNAPSHOT
+        4.15.5
       
 
       
           io.nosqlbench
           driver-jmx
-        4.15.5-SNAPSHOT
+        4.15.5
       
 
       
           io.nosqlbench
           driver-dsegraph-shaded
-        4.15.5-SNAPSHOT
+        4.15.5
       
 
       
           io.nosqlbench
           driver-cql-shaded
-        4.15.5-SNAPSHOT
+        4.15.5
       
 
       
           io.nosqlbench
       driver-cqlverify
-        4.15.5-SNAPSHOT
+        4.15.5
     
 
     
       io.nosqlbench
       driver-mongodb
-      4.15.5-SNAPSHOT
+      4.15.5
     
 
     
@@ -257,7 +257,7 @@
         
           io.nosqlbench
           driver-mongodb
-          4.15.5-SNAPSHOT
+          4.15.5
         
       
     
diff --git a/pom.xml b/pom.xml
index 4c7b02813..8aa5d762d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         mvn-defaults
     
 
@@ -145,7 +145,7 @@
             scm:git:https://github.com/nosqlbench/nosqlbench.git
         
         scm:git:git@github.com:nosqlbench/nosqlbench.git
-        HEAD
+        nosqlbench-4.15.5
     
 
     
diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml
index 2afa2fac9..6ff1a0eaa 100644
--- a/virtdata-api/pom.xml
+++ b/virtdata-api/pom.xml
@@ -7,7 +7,7 @@
     
         io.nosqlbench
         mvn-defaults
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -23,14 +23,14 @@
 
         
             io.nosqlbench
-          4.15.5-SNAPSHOT
+          4.15.5
             nb-api
         
 
         
             io.nosqlbench
             virtdata-lang
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
 
diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml
index d97c18851..466cf21c5 100644
--- a/virtdata-lang/pom.xml
+++ b/virtdata-lang/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml
index a42659aee..ec73726e1 100644
--- a/virtdata-lib-basics/pom.xml
+++ b/virtdata-lib-basics/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -20,7 +20,7 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml
index ad6b1a345..5226203d2 100644
--- a/virtdata-lib-curves4/pom.xml
+++ b/virtdata-lib-curves4/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             virtdata-lib-basics
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml
index 856b8a00f..7409b8912 100644
--- a/virtdata-lib-random/pom.xml
+++ b/virtdata-lib-random/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -20,13 +20,13 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             virtdata-lib-basics
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml
index 17e46c584..ceb57d801 100644
--- a/virtdata-lib-realer/pom.xml
+++ b/virtdata-lib-realer/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -20,7 +20,7 @@
         
             io.nosqlbench
             virtdata-lib-basics
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     
diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml
index 73352bfe9..a8699e18c 100644
--- a/virtdata-realdata/pom.xml
+++ b/virtdata-realdata/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -18,7 +18,7 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml
index 2ee6cd470..363540ecb 100644
--- a/virtdata-userlibs/pom.xml
+++ b/virtdata-userlibs/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5-SNAPSHOT
+        4.15.5
         ../mvn-defaults
     
 
@@ -18,36 +18,36 @@
         
             io.nosqlbench
             virtdata-realdata
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             virtdata-lib-realer
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             virtdata-api
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
             virtdata-lib-random
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
         
             io.nosqlbench
-          4.15.5-SNAPSHOT
+          4.15.5
             virtdata-lib-basics
         
 
         
             io.nosqlbench
-          4.15.5-SNAPSHOT
+          4.15.5
             virtdata-lib-curves4
         
 
@@ -55,7 +55,7 @@
         
             io.nosqlbench
             docsys
-          4.15.5-SNAPSHOT
+          4.15.5
         
 
     

From 4a06f226c9137416d9ac7cfd4073d1ce25a18730 Mon Sep 17 00:00:00 2001
From: nb-droid 
Date: Mon, 14 Dec 2020 18:57:03 +0000
Subject: [PATCH 164/164] [maven-release-plugin] prepare for next development
 iteration

---
 docsys/pom.xml                 |  6 +++---
 driver-cql-shaded/pom.xml      |  6 +++---
 driver-cqlverify/pom.xml       |  6 +++---
 driver-diag/pom.xml            |  6 +++---
 driver-dsegraph-shaded/pom.xml |  6 +++---
 driver-http/pom.xml            |  6 +++---
 driver-jmx/pom.xml             |  6 +++---
 driver-kafka/pom.xml           |  6 +++---
 driver-mongodb/pom.xml         |  6 +++---
 driver-stdout/pom.xml          |  6 +++---
 driver-tcp/pom.xml             |  8 ++++----
 driver-web/pom.xml             |  6 +++---
 drivers-api/pom.xml            |  6 +++---
 engine-api/pom.xml             | 10 +++++-----
 engine-cli/pom.xml             |  6 +++---
 engine-clients/pom.xml         |  4 ++--
 engine-core/pom.xml            |  8 ++++----
 engine-docker/pom.xml          |  4 ++--
 engine-docs/pom.xml            |  4 ++--
 engine-extensions/pom.xml      |  4 ++--
 engine-rest/pom.xml            |  4 ++--
 mvn-defaults/pom.xml           |  4 ++--
 nb-annotations/pom.xml         |  2 +-
 nb-api/pom.xml                 |  4 ++--
 nb/pom.xml                     | 36 +++++++++++++++++-----------------
 pom.xml                        |  4 ++--
 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 +++++++--------
 34 files changed, 111 insertions(+), 111 deletions(-)

diff --git a/docsys/pom.xml b/docsys/pom.xml
index fbf5932b7..f76467b3b 100644
--- a/docsys/pom.xml
+++ b/docsys/pom.xml
@@ -9,7 +9,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -18,7 +18,7 @@
         
             io.nosqlbench
             nb-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
@@ -98,7 +98,7 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml
index a2e47a44c..1d634819b 100644
--- a/driver-cql-shaded/pom.xml
+++ b/driver-cql-shaded/pom.xml
@@ -4,7 +4,7 @@
     
         io.nosqlbench
         mvn-defaults
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -23,13 +23,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml
index 6af8c80fe..d9bd30f68 100644
--- a/driver-cqlverify/pom.xml
+++ b/driver-cqlverify/pom.xml
@@ -4,7 +4,7 @@
   
     io.nosqlbench
     mvn-defaults
-    4.15.5
+    4.15.6-SNAPSHOT
     ../mvn-defaults
   
 
@@ -24,13 +24,13 @@
     
       io.nosqlbench
       driver-cql-shaded
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       drivers-api
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
   
diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml
index bb806cb6b..d572cd8b9 100644
--- a/driver-diag/pom.xml
+++ b/driver-diag/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -20,13 +20,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml
index 9df551bd8..d440dd3fa 100644
--- a/driver-dsegraph-shaded/pom.xml
+++ b/driver-dsegraph-shaded/pom.xml
@@ -4,7 +4,7 @@
   
     io.nosqlbench
     mvn-defaults
-    4.15.5
+    4.15.6-SNAPSHOT
     ../mvn-defaults
   
 
@@ -23,13 +23,13 @@
     
       io.nosqlbench
       engine-api
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       drivers-api
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
diff --git a/driver-http/pom.xml b/driver-http/pom.xml
index b717c7613..08f1c723c 100644
--- a/driver-http/pom.xml
+++ b/driver-http/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml
index 6f688523d..3104ea8bb 100644
--- a/driver-jmx/pom.xml
+++ b/driver-jmx/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml
index 55c3a102f..d1e42170a 100644
--- a/driver-kafka/pom.xml
+++ b/driver-kafka/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -44,13 +44,13 @@
       
         io.nosqlbench
         engine-api
-        4.15.5
+        4.15.6-SNAPSHOT
       
 
       
         io.nosqlbench
         driver-stdout
-        4.15.5
+        4.15.6-SNAPSHOT
       
 
       
diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml
index 44aadc90d..ec5394cc3 100644
--- a/driver-mongodb/pom.xml
+++ b/driver-mongodb/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -21,13 +21,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml
index ef39aa75e..037656717 100644
--- a/driver-stdout/pom.xml
+++ b/driver-stdout/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml
index ba55a1b1a..55bc546b3 100644
--- a/driver-tcp/pom.xml
+++ b/driver-tcp/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -24,19 +24,19 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             driver-stdout
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/driver-web/pom.xml b/driver-web/pom.xml
index 6d1e65dfb..06abebc0c 100644
--- a/driver-web/pom.xml
+++ b/driver-web/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml
index 70d1e51de..c76f33819 100644
--- a/drivers-api/pom.xml
+++ b/drivers-api/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -23,13 +23,13 @@
         
             io.nosqlbench
             nb-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             virtdata-userlibs
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/engine-api/pom.xml b/engine-api/pom.xml
index b48ae38c3..3762df0b9 100644
--- a/engine-api/pom.xml
+++ b/engine-api/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -23,25 +23,25 @@
         
             io.nosqlbench
             nb-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             nb-annotations
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             virtdata-userlibs
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml
index 60a4aed1d..114cfa0d6 100644
--- a/engine-cli/pom.xml
+++ b/engine-cli/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -23,13 +23,13 @@
         
             io.nosqlbench
             engine-core
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             engine-docker
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml
index 60d6e69c0..d87990cad 100644
--- a/engine-clients/pom.xml
+++ b/engine-clients/pom.xml
@@ -5,7 +5,7 @@
   
     mvn-defaults
     io.nosqlbench
-    4.15.5
+    4.15.6-SNAPSHOT
     ../mvn-defaults
   
 
@@ -21,7 +21,7 @@
     
       io.nosqlbench
       engine-api
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
   
diff --git a/engine-core/pom.xml b/engine-core/pom.xml
index 6b009145c..aa547f345 100644
--- a/engine-core/pom.xml
+++ b/engine-core/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -28,13 +28,13 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             drivers-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
@@ -85,7 +85,7 @@
       
         io.nosqlbench
         engine-clients
-        4.15.5
+        4.15.6-SNAPSHOT
         compile
       
 
diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml
index 3b4108e4c..fde76778e 100644
--- a/engine-docker/pom.xml
+++ b/engine-docker/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -65,7 +65,7 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
     
 
diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml
index bf1e51830..0f4d88018 100644
--- a/engine-docs/pom.xml
+++ b/engine-docs/pom.xml
@@ -4,7 +4,7 @@
   
     mvn-defaults
     io.nosqlbench
-    4.15.5
+    4.15.6-SNAPSHOT
     ../mvn-defaults
   
 
@@ -28,7 +28,7 @@
     
       io.nosqlbench
       docsys
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
   
diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml
index f85c090a5..0ae07be69 100644
--- a/engine-extensions/pom.xml
+++ b/engine-extensions/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -22,7 +22,7 @@
         
             io.nosqlbench
             engine-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml
index ec5b73341..7508cf23c 100644
--- a/engine-rest/pom.xml
+++ b/engine-rest/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -47,7 +47,7 @@
         
             io.nosqlbench
             engine-cli
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml
index f63744359..f84dd5f53 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -3,7 +3,7 @@
 
   io.nosqlbench
   mvn-defaults
-  4.15.5
+  4.15.6-SNAPSHOT
   pom
 
   
@@ -90,7 +90,7 @@
   
     scm:git:https://github.com/nosqlbench/nosqlbench.git
     
-    nosqlbench-4.15.5
+    HEAD
   
 
   
diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml
index 940900fba..c3689c268 100644
--- a/nb-annotations/pom.xml
+++ b/nb-annotations/pom.xml
@@ -5,7 +5,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
diff --git a/nb-api/pom.xml b/nb-api/pom.xml
index a37cc134c..4beab0e06 100644
--- a/nb-api/pom.xml
+++ b/nb-api/pom.xml
@@ -5,7 +5,7 @@
   
     mvn-defaults
     io.nosqlbench
-    4.15.5
+    4.15.6-SNAPSHOT
     ../mvn-defaults
   
 
@@ -31,7 +31,7 @@
     
       io.nosqlbench
       nb-annotations
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
diff --git a/nb/pom.xml b/nb/pom.xml
index f81f3d977..255f15f0c 100644
--- a/nb/pom.xml
+++ b/nb/pom.xml
@@ -5,7 +5,7 @@
   
     mvn-defaults
     io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
     ../mvn-defaults
   
 
@@ -24,31 +24,31 @@
     
       io.nosqlbench
       engine-rest
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       engine-cli
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       engine-docs
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       engine-core
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       engine-extensions
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
@@ -60,67 +60,67 @@
     
       io.nosqlbench
       driver-web
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       driver-kafka
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       driver-stdout
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       driver-diag
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       driver-tcp
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
       
           io.nosqlbench
           driver-http
-        4.15.5
+        4.15.6-SNAPSHOT
       
 
       
           io.nosqlbench
           driver-jmx
-        4.15.5
+        4.15.6-SNAPSHOT
       
 
       
           io.nosqlbench
           driver-dsegraph-shaded
-        4.15.5
+        4.15.6-SNAPSHOT
       
 
       
           io.nosqlbench
           driver-cql-shaded
-        4.15.5
+        4.15.6-SNAPSHOT
       
 
       
           io.nosqlbench
       driver-cqlverify
-        4.15.5
+        4.15.6-SNAPSHOT
     
 
     
       io.nosqlbench
       driver-mongodb
-      4.15.5
+      4.15.6-SNAPSHOT
     
 
     
@@ -257,7 +257,7 @@
         
           io.nosqlbench
           driver-mongodb
-          4.15.5
+          4.15.6-SNAPSHOT
         
       
     
diff --git a/pom.xml b/pom.xml
index 8aa5d762d..7da7a912c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         mvn-defaults
     
 
@@ -145,7 +145,7 @@
             scm:git:https://github.com/nosqlbench/nosqlbench.git
         
         scm:git:git@github.com:nosqlbench/nosqlbench.git
-        nosqlbench-4.15.5
+        HEAD
     
 
     
diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml
index 6ff1a0eaa..29f8e484a 100644
--- a/virtdata-api/pom.xml
+++ b/virtdata-api/pom.xml
@@ -7,7 +7,7 @@
     
         io.nosqlbench
         mvn-defaults
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -23,14 +23,14 @@
 
         
             io.nosqlbench
-          4.15.5
+          4.15.6-SNAPSHOT
             nb-api
         
 
         
             io.nosqlbench
             virtdata-lang
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
 
diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml
index 466cf21c5..ff41a809f 100644
--- a/virtdata-lang/pom.xml
+++ b/virtdata-lang/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml
index ec73726e1..42f699e11 100644
--- a/virtdata-lib-basics/pom.xml
+++ b/virtdata-lib-basics/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -20,7 +20,7 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml
index 5226203d2..72925fc87 100644
--- a/virtdata-lib-curves4/pom.xml
+++ b/virtdata-lib-curves4/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -22,13 +22,13 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             virtdata-lib-basics
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml
index 7409b8912..19c107e98 100644
--- a/virtdata-lib-random/pom.xml
+++ b/virtdata-lib-random/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -20,13 +20,13 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             virtdata-lib-basics
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml
index ceb57d801..9fe976f72 100644
--- a/virtdata-lib-realer/pom.xml
+++ b/virtdata-lib-realer/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -20,7 +20,7 @@
         
             io.nosqlbench
             virtdata-lib-basics
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
     
diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml
index a8699e18c..badc5da9e 100644
--- a/virtdata-realdata/pom.xml
+++ b/virtdata-realdata/pom.xml
@@ -7,7 +7,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -18,7 +18,7 @@
         
             io.nosqlbench
             virtdata-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml
index 363540ecb..c232a2180 100644
--- a/virtdata-userlibs/pom.xml
+++ b/virtdata-userlibs/pom.xml
@@ -4,7 +4,7 @@
     
         mvn-defaults
         io.nosqlbench
-        4.15.5
+        4.15.6-SNAPSHOT
         ../mvn-defaults
     
 
@@ -18,36 +18,36 @@
         
             io.nosqlbench
             virtdata-realdata
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             virtdata-lib-realer
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             virtdata-api
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
             virtdata-lib-random
-          4.15.5
+          4.15.6-SNAPSHOT
         
 
         
             io.nosqlbench
-          4.15.5
+          4.15.6-SNAPSHOT
             virtdata-lib-basics
         
 
         
             io.nosqlbench
-          4.15.5
+          4.15.6-SNAPSHOT
             virtdata-lib-curves4
         
 
@@ -55,7 +55,7 @@
         
             io.nosqlbench
             docsys
-          4.15.5
+          4.15.6-SNAPSHOT