From 0a4b105c3e51653d34d239a8ac0149efd46d10b8 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Mon, 18 Dec 2023 22:54:05 -0600
Subject: [PATCH 001/120] direct implementation of run, start, wait, await,
example, forceStop
---
.../cli/NBCLIScenarioPreprocessorTest.java | 3 +
.../engine/cli/TestNBCLIOptions.java | 66 +++++++++----------
.../engine/cmdstream/BasicScriptBuffer.java | 5 --
.../nosqlbench/engine/cmdstream/CmdType.java | 10 +--
.../core/lifecycle/commands/CMD_await.java | 45 +++++++++++++
.../core/lifecycle/commands/CMD_example.java | 45 +++++++++++++
.../lifecycle/commands/CMD_forceStop.java | 46 +++++++++++++
.../core/lifecycle/commands/CMD_run.java | 43 ++++++++++++
.../core/lifecycle/commands/CMD_start.java | 45 +++++++++++++
.../core/lifecycle/commands/CMD_wait.java | 66 +++++++++++++++++++
.../core/lifecycle/commands/INFO_await.java | 29 ++++++++
.../core/lifecycle/commands/INFO_example.java | 29 ++++++++
.../lifecycle/commands/INFO_forceStop.java | 29 ++++++++
.../core/lifecycle/commands/INFO_run.java | 29 ++++++++
.../core/lifecycle/commands/INFO_start.java | 29 ++++++++
.../core/lifecycle/commands/INFO_wait.java | 29 ++++++++
.../session/NBScriptCommandResolver.java | 2 +-
.../core/lifecycle/session/CmdParserTest.java | 41 ++++++------
mvn-defaults/pom.xml | 4 +-
19 files changed, 530 insertions(+), 65 deletions(-)
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_await.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_example.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_forceStop.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_run.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_start.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_wait.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_await.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_forceStop.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_run.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_start.java
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_wait.java
diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java
index d8c82867b..11cd593e1 100644
--- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java
+++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java
@@ -105,6 +105,7 @@ public class NBCLIScenarioPreprocessorTest {
List cmds = opts.getCommands();
assertThat(cmds.size()).isEqualTo(1);
assertThat(cmds.get(0).getArgMap()).isEqualTo(Map.of(
+ "_impl","run",
"alias", "with_template",
"container", "template_test",
"cycles", "20",
@@ -122,6 +123,7 @@ public class NBCLIScenarioPreprocessorTest {
List cmds = opts.getCommands();
assertThat(cmds.size()).isEqualTo(1);
assertThat(cmds.get(0).getArgMap()).isEqualTo(Map.of(
+ "_impl", "run",
"alias", "schema",
"container", "schema_only",
"cycles-test", "20",
@@ -176,6 +178,7 @@ public class NBCLIScenarioPreprocessorTest {
List cmds = opts.getCommands();
assertThat(cmds.size()).isEqualTo(1);
assertThat(cmds.get(0).getArgMap()).isEqualTo(Map.of(
+ "_impl","run",
"alias", "schema",
"container", "schema_only",
"cycles-test", "20",
diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java
index 0aa51f465..ab37ede4f 100644
--- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java
+++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java
@@ -137,23 +137,23 @@ public class TestNBCLIOptions {
.isThrownBy(() -> new NBCLIOptions(new String[]{"script"}));
}
- @Test
- public void shouldRecognizeStartActivityCmd() {
- NBCLIOptions opts = new NBCLIOptions(new String[]{ "start", "driver=woot" });
- List cmds = opts.getCommands();
- assertThat(cmds).hasSize(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.start);
-
- }
-
- @Test
- public void shouldRecognizeRunActivityCmd() {
- NBCLIOptions opts = new NBCLIOptions(new String[]{ "run", "driver=runwoot" });
- List cmds = opts.getCommands();
- assertThat(cmds).hasSize(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.run);
-
- }
+// @Test
+// public void shouldRecognizeStartActivityCmd() {
+// NBCLIOptions opts = new NBCLIOptions(new String[]{ "start", "driver=woot" });
+// List cmds = opts.getCommands();
+// assertThat(cmds).hasSize(1);
+// assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.start);
+//
+// }
+//
+// @Test
+// public void shouldRecognizeRunActivityCmd() {
+// NBCLIOptions opts = new NBCLIOptions(new String[]{ "run", "driver=runwoot" });
+// List cmds = opts.getCommands();
+// assertThat(cmds).hasSize(1);
+// assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.run);
+//
+// }
// @Test
// public void shouldRecognizeStopActivityCmd() {
@@ -172,14 +172,14 @@ public class TestNBCLIOptions {
.isThrownBy(() -> new NBCLIOptions(new String[]{ "stop", "woah=woah" }));
}
- @Test
- public void shouldRecognizeAwaitActivityCmd() {
- NBCLIOptions opts = new NBCLIOptions(new String[]{ "await", "activity=awaitme" });
- List cmds = opts.getCommands();
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.await);
- assertThat(cmds.get(0).getArgValue("activity")).isEqualTo("awaitme");
-
- }
+// @Test
+// public void shouldRecognizeAwaitActivityCmd() {
+// NBCLIOptions opts = new NBCLIOptions(new String[]{ "await", "activity=awaitme" });
+// List cmds = opts.getCommands();
+// assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.await);
+// assertThat(cmds.get(0).getArgValue("activity")).isEqualTo("awaitme");
+//
+// }
@Disabled("semantic parsing is reserved until later after generalizing syntax")
@Test
@@ -188,14 +188,14 @@ public class TestNBCLIOptions {
.isThrownBy(() -> new NBCLIOptions(new String[]{ "await", "awaitme=notvalid" }));
}
- @Test
- public void shouldRecognizewaitMillisCmd() {
- NBCLIOptions opts = new NBCLIOptions(new String[]{ "waitmillis", "ms=23234" });
- List cmds = opts.getCommands();
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.waitMillis);
- assertThat(cmds.get(0).getArgValue("ms")).isEqualTo("23234");
-
- }
+// @Test
+// public void shouldRecognizewaitMillisCmd() {
+// NBCLIOptions opts = new NBCLIOptions(new String[]{ "waitmillis", "ms=23234" });
+// List cmds = opts.getCommands();
+// assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.waitMillis);
+// assertThat(cmds.get(0).getArgValue("ms")).isEqualTo("23234");
+//
+// }
@Test
public void listWorkloads() {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/BasicScriptBuffer.java b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/BasicScriptBuffer.java
index 1e7c26fa4..6ff7002b5 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/BasicScriptBuffer.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/BasicScriptBuffer.java
@@ -74,12 +74,7 @@ public class BasicScriptBuffer implements ScriptBuffer {
}
break;
case java:
- case start: // start activity
- case run: // run activity
- case await: // await activity
// case stop: // stop activity
- case forceStop: // force stopping activity
- case waitMillis:
sb.append("controller.").append(cmd.asScriptText()).append("\n");
//// // Sanity check that this can parse before using it
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/CmdType.java b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/CmdType.java
index 5cf98c180..6de8dc98e 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/CmdType.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/CmdType.java
@@ -23,14 +23,14 @@ package io.nosqlbench.engine.cmdstream;
* or an error is thrown.
*/
public enum CmdType {
- run(),
- start(),
+// run(),
+// start(),
// stop(CmdParam.of("activity")),
- forceStop(CmdParam.of("activity")),
+// forceStop(CmdParam.of("activity")),
script(CmdParam.of("path", s -> s)),
java(CmdParam.of("class", s -> s)),
- await(CmdParam.of("activity")),
- waitMillis(CmdParam.of("ms", Long::parseLong)),
+// await(CmdParam.of("activity")),
+// waitMillis(CmdParam.of("ms", Long::parseLong)),
fragment(CmdParam.ofFreeform("fragment")),
container(CmdParam.of("name")),
indirect(CmdParam.of("indirect"));
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_await.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_await.java
new file mode 100644
index 000000000..9d8d5b1d1
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_await.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
+import io.nosqlbench.nb.annotations.Service;
+import io.nosqlbench.nb.api.engine.util.Unit;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.util.concurrent.locks.LockSupport;
+
+@Service(value = NBBaseCommand.class, selector = "await")
+public class CMD_await extends NBBaseCommand {
+ public final static Logger logger = LogManager.getLogger("await");
+
+ public CMD_await(NBBufferedContainer parentComponent, String stepName, String targetScenario) {
+ super(parentComponent, stepName, targetScenario);
+ }
+
+ @Override
+ public Object invoke(NBCommandParams params, PrintWriter stdout, PrintWriter stderr, Reader stdin, ContainerActivitiesController controller) {
+ controller.await(params);
+ return null;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_example.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_example.java
new file mode 100644
index 000000000..8585ad508
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_example.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.api.activityapi.core.Activity;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
+import io.nosqlbench.nb.annotations.Service;
+import io.nosqlbench.nb.api.errors.BasicError;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.util.Optional;
+
+@Service(value = NBBaseCommand.class,selector = "example")
+public class CMD_example extends NBBaseCommand {
+ public final static Logger logger = LogManager.getLogger("example");
+
+ public CMD_example(NBBufferedContainer parentComponent, String stepName, String targetScenario) {
+ super(parentComponent, stepName, targetScenario);
+ }
+
+ @Override
+ public Object invoke(NBCommandParams params, PrintWriter stdout, PrintWriter stderr, Reader stdin, ContainerActivitiesController controller) {
+ return null;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_forceStop.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_forceStop.java
new file mode 100644
index 000000000..41c34f4be
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_forceStop.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.api.activityapi.core.Activity;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
+import io.nosqlbench.nb.annotations.Service;
+import io.nosqlbench.nb.api.errors.BasicError;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.util.Optional;
+
+@Service(value = NBBaseCommand.class,selector = "force_stop")
+public class CMD_forceStop extends NBBaseCommand {
+ public final static Logger logger = LogManager.getLogger("force_stop");
+
+ public CMD_forceStop(NBBufferedContainer parentComponent, String stepName, String targetScenario) {
+ super(parentComponent, stepName, targetScenario);
+ }
+
+ @Override
+ public Object invoke(NBCommandParams params, PrintWriter stdout, PrintWriter stderr, Reader stdin, ContainerActivitiesController controller) {
+ controller.forceStop(params);
+ return null;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_run.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_run.java
new file mode 100644
index 000000000..6d9e9fc6e
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_run.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
+import io.nosqlbench.nb.annotations.Service;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+
+@Service(value = NBBaseCommand.class, selector = "run")
+public class CMD_run extends NBBaseCommand {
+ public final static Logger logger = LogManager.getLogger("run");
+
+ public CMD_run(NBBufferedContainer parentComponent, String stepName, String targetScenario) {
+ super(parentComponent, stepName, targetScenario);
+ }
+
+ @Override
+ public Object invoke(NBCommandParams params, PrintWriter stdout, PrintWriter stderr, Reader stdin, ContainerActivitiesController controller) {
+ controller.run(params);
+ return null;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_start.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_start.java
new file mode 100644
index 000000000..d093fcb99
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_start.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.api.activityapi.core.Activity;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
+import io.nosqlbench.nb.annotations.Service;
+import io.nosqlbench.nb.api.errors.BasicError;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.util.Optional;
+
+@Service(value = NBBaseCommand.class,selector = "start")
+public class CMD_start extends NBBaseCommand {
+ public final static Logger logger = LogManager.getLogger("start");
+
+ public CMD_start(NBBufferedContainer parentComponent, String stepName, String targetScenario) {
+ super(parentComponent, stepName, targetScenario);
+ }
+
+ @Override
+ public Object invoke(NBCommandParams params, PrintWriter stdout, PrintWriter stderr, Reader stdin, ContainerActivitiesController controller) {
+ return controller.start(params);
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_wait.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_wait.java
new file mode 100644
index 000000000..714ae5cc0
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/CMD_wait.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import com.amazonaws.services.s3.model.transform.Unmarshallers;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
+import io.nosqlbench.nb.annotations.Service;
+import io.nosqlbench.nb.api.engine.util.Unit;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.util.Optional;
+import java.util.concurrent.locks.LockSupport;
+import java.util.stream.LongStream;
+
+@Service(value = NBBaseCommand.class, selector = "example")
+public class CMD_wait extends NBBaseCommand {
+ public final static Logger logger = LogManager.getLogger("example");
+
+ public CMD_wait(NBBufferedContainer parentComponent, String stepName, String targetScenario) {
+ super(parentComponent, stepName, targetScenario);
+ }
+
+ @Override
+ public Object invoke(NBCommandParams params, PrintWriter stdout, PrintWriter stderr, Reader stdin, ContainerActivitiesController controller) {
+ long ns = 0L;
+ ns += params.maybeGet("ms")
+ .or(() -> params.maybeGet("millis"))
+ .map(Long::parseLong)
+ .map(l -> l * 1_000_000L)
+ .orElse(0L);
+ ns += params.maybeGet("us")
+ .or(() -> params.maybeGet("micros"))
+ .map(Long::parseLong)
+ .map(l -> l * 1_000L)
+ .orElse(0L);
+ ns += params.maybeGet("ns")
+ .or(() -> params.maybeGet("nanos"))
+ .map(Long::parseLong)
+ .orElse(0L);
+ ns += params.maybeGet("unit")
+ .flatMap(Unit::nanosecondsFor)
+ .orElse(0L);
+ LockSupport.parkNanos(ns);
+ return ns;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_await.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_await.java
new file mode 100644
index 000000000..2f5888f7a
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_await.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
+import io.nosqlbench.nb.annotations.Service;
+
+@Service(value = NBCommandInfo.class,selector = "await")
+public class INFO_await extends NBCommandInfo {
+ @Override
+ public Class extends NBInvokableCommand> getType() {
+ return CMD_await.class;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java
new file mode 100644
index 000000000..4530b1a7c
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
+import io.nosqlbench.nb.annotations.Service;
+
+@Service(value = NBCommandInfo.class,selector = "start")
+public class INFO_example extends NBCommandInfo {
+ @Override
+ public Class extends NBInvokableCommand> getType() {
+ return CMD_example.class;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_forceStop.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_forceStop.java
new file mode 100644
index 000000000..cf77bbd44
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_forceStop.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
+import io.nosqlbench.nb.annotations.Service;
+
+@Service(value = NBCommandInfo.class,selector = "force_stop")
+public class INFO_forceStop extends NBCommandInfo {
+ @Override
+ public Class extends NBInvokableCommand> getType() {
+ return CMD_forceStop.class;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_run.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_run.java
new file mode 100644
index 000000000..b0574b2c6
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_run.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
+import io.nosqlbench.nb.annotations.Service;
+
+@Service(value = NBCommandInfo.class,selector = "run")
+public class INFO_run extends NBCommandInfo {
+ @Override
+ public Class extends NBInvokableCommand> getType() {
+ return CMD_run.class;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_start.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_start.java
new file mode 100644
index 000000000..2df93b41b
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_start.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
+import io.nosqlbench.nb.annotations.Service;
+
+@Service(value = NBCommandInfo.class,selector = "start")
+public class INFO_start extends NBCommandInfo {
+ @Override
+ public Class extends NBInvokableCommand> getType() {
+ return CMD_start.class;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_wait.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_wait.java
new file mode 100644
index 000000000..e2900a8c1
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_wait.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.commands;
+
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
+import io.nosqlbench.nb.annotations.Service;
+
+@Service(value = NBCommandInfo.class,selector = "wait")
+public class INFO_wait extends NBCommandInfo {
+ @Override
+ public Class extends NBInvokableCommand> getType() {
+ return CMD_wait.class;
+ }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBScriptCommandResolver.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBScriptCommandResolver.java
index 842ac09fe..35f57877e 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBScriptCommandResolver.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBScriptCommandResolver.java
@@ -27,7 +27,7 @@ public class NBScriptCommandResolver implements NBInvokableResolver {
@Override
public NBInvokableCommand resolve(Cmd cmd, NBBufferedContainer parent, String phaseName) {
return switch (cmd.getCmdType()) {
- case run, await, forceStop, start, waitMillis, fragment, script->
+ case fragment, script->
new NBScriptedCommand(parent, phaseName, cmd.getTargetContext()).add(cmd);
// case fragment ->
// new NBScriptedCommand(parent, phaseName, cmd.getTargetContext()).addScriptText(cmd.getArgValue("fragment"));
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java
index 66272b9ab..086d0dfe4 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java
@@ -19,6 +19,7 @@ package io.nosqlbench.engine.core.lifecycle.session;
import io.nosqlbench.engine.cmdstream.Cmd;
import io.nosqlbench.engine.cmdstream.CmdType;
import io.nosqlbench.nb.api.errors.BasicError;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.util.LinkedList;
@@ -34,36 +35,37 @@ class CmdParserTest {
public void testSingleCommand() {
List cmds = CmdParser.parse("testcmd42");
assertThat(cmds).hasSize(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.indirect);
- assertThat(cmds.get(0).getArgValue("_impl")).isEqualTo("testcmd42");
+ assertThat(cmds.getFirst().getCmdType()).isEqualTo(CmdType.indirect);
+ assertThat(cmds.getFirst().getArgValue("_impl")).isEqualTo("testcmd42");
}
@Test
public void testSingleCommandWithArgs() {
List cmds = CmdParser.parse("testcmd43 param1=value1");
assertThat(cmds).hasSize(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.indirect);
- assertThat(cmds.get(0).getArgValue("_impl")).isEqualTo("testcmd43");
- assertThat(cmds.get(0).getArgValue("param1")).isEqualTo("value1");
+ assertThat(cmds.getFirst().getCmdType()).isEqualTo(CmdType.indirect);
+ assertThat(cmds.getFirst().getArgValue("_impl")).isEqualTo("testcmd43");
+ assertThat(cmds.getFirst().getArgValue("param1")).isEqualTo("value1");
}
@Test
public void testSingleDquotedArg() {
List cmds = CmdParser.parse("testcmd44 param1=\"value1\"");
assertThat(cmds).hasSize(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.indirect);
- assertThat(cmds.get(0).getArgValue("_impl")).isEqualTo("testcmd44");
- assertThat(cmds.get(0).getArgValue("param1")).isEqualTo("value1");
+ assertThat(cmds.getFirst().getCmdType()).isEqualTo(CmdType.indirect);
+ assertThat(cmds.getFirst().getArgValue("_impl")).isEqualTo("testcmd44");
+ assertThat(cmds.getFirst().getArgValue("param1")).isEqualTo("value1");
}
+ @Disabled
@Test
public void testSpecialSymbolValue() {
List cmds = CmdParser.parse("start param1="+ CmdParser.SYMBOLS+ " param2='"+ CmdParser.SYMBOLS+ "' param3=\""+ CmdParser.SYMBOLS+ "\"");
assertThat(cmds).hasSize(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.start);
- assertThat(cmds.get(0).getArgValue("param1")).isEqualTo(CmdParser.SYMBOLS);
- assertThat(cmds.get(0).getArgValue("param2")).isEqualTo(CmdParser.SYMBOLS);
- assertThat(cmds.get(0).getArgValue("param3")).isEqualTo(CmdParser.SYMBOLS);
+// assertThat(cmds.getFirst().getCmdType()).isEqualTo(CmdType.start);
+ assertThat(cmds.getFirst().getArgValue("param1")).isEqualTo(CmdParser.SYMBOLS);
+ assertThat(cmds.getFirst().getArgValue("param2")).isEqualTo(CmdParser.SYMBOLS);
+ assertThat(cmds.getFirst().getArgValue("param3")).isEqualTo(CmdParser.SYMBOLS);
}
@Test
@@ -76,23 +78,24 @@ class CmdParserTest {
"an error should be thrown if a named parameter is specified without a prior command.");
}
+ @Disabled
@Test
public void testThatSymbolsAreQuotedInStringForm() {
List cmds = CmdParser.parse("start param1=value1 param2='~should be quoted'");
assertThat(cmds.size()).isEqualTo(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.start);
- assertThat(cmds.get(0).getArgValue("param1")).isEqualTo("value1");
- assertThat(cmds.get(0).getArgValue("param2")).isEqualTo("~should be quoted");
- assertThat(cmds.get(0).toString()).isEqualTo("start param1=value1 param2='~should be quoted'");
+// assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.start);
+ assertThat(cmds.getFirst().getArgValue("param1")).isEqualTo("value1");
+ assertThat(cmds.getFirst().getArgValue("param2")).isEqualTo("~should be quoted");
+ assertThat(cmds.getFirst().toString()).isEqualTo("start param1=value1 param2='~should be quoted'");
}
@Test
public void testBasicArgvParser() {
LinkedList cmds = CmdParser.parseArgvCommands(new LinkedList<>(List.of("_cmd4", "param1=value1")));
assertThat(cmds.size()).isEqualTo(1);
- assertThat(cmds.get(0).getCmdType()).isEqualTo(CmdType.indirect);
- assertThat(cmds.get(0).getArgValue("_impl")).isEqualTo("_cmd4");
- assertThat(cmds.get(0).getArgValue("param1")).isEqualTo("value1");
+ assertThat(cmds.getFirst().getCmdType()).isEqualTo(CmdType.indirect);
+ assertThat(cmds.getFirst().getArgValue("_impl")).isEqualTo("_cmd4");
+ assertThat(cmds.getFirst().getArgValue("param1")).isEqualTo("value1");
}
}
diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml
index 384654081..ecb00451d 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -361,12 +361,12 @@
org.graalvm.sdk
graal-sdk
- 23.1.1
+ 23.0.1
org.graalvm.js
js
- 23.0.2
+ 23.0.1
runtime
From 4e9963ab17fc5a1c065d8c45b4399751e3971972 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 19 Dec 2023 00:01:28 -0600
Subject: [PATCH 002/120] optimizer naming updates, fixes for _impl
---
.../engine/cli/NBJavaNativeResolver.java | 5 ++-
.../io/nosqlbench/engine/cmdstream/Cmd.java | 6 +++
.../core/lifecycle/commands/INFO_example.java | 2 +-
.../lifecycle/session/NBCommandAssembly.java | 1 +
.../java/io/nosqlbench/nb/PlaceHolder.java | 24 -----------
.../simframe/{optimo => }/SimFrameUtils.java | 3 +-
.../SimFrameValueData.java} | 12 +++---
.../package-info.java} | 12 +++---
.../simframe/generic/ParamsEffector.java | 23 -----------
.../CMD_optimize.java} | 19 ++++-----
.../INFO_optimize.java} | 9 ++---
.../planners/OptimizerPlannerTypes.java} | 20 ++++-----
.../planners/findmax/FindmaxConfig.java} | 6 +--
.../planners/findmax/FindmaxFrameParams.java} | 38 +++++++++---------
.../planners/findmax/FindmaxPlanner.java} | 32 +++++++--------
.../planners}/findmax/findmax.png | Bin
.../planners}/findmax/findmax.svg | 0
.../planners/ratchet/RatchetConfig.java | 2 +-
.../planners/ratchet/RatchetFrameParams.java | 4 +-
.../planners/ratchet/RatchetPlanner.java} | 8 ++--
.../planners/rcurve/RCurveConfig.java} | 18 ++++++---
.../planners/rcurve/RCurveFrameParams.java} | 7 ++--
.../planners/rcurve/RCurvePlanner.java} | 30 ++++++++------
.../scenarios/simframe/optimo/NB_optimo.java | 5 ++-
24 files changed, 128 insertions(+), 158 deletions(-)
delete mode 100644 nbr/src/main/java/io/nosqlbench/nb/PlaceHolder.java
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{optimo => }/SimFrameUtils.java (98%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/FindmaxFrameData.java => capture/SimFrameValueData.java} (89%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{optimo/ThreadSpec.java => capture/package-info.java} (68%)
delete mode 100644 nbr/src/main/java/io/nosqlbench/scenarios/simframe/generic/ParamsEffector.java
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/NB_findmax.java => optimizers/CMD_optimize.java} (81%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/NBFindmaxInfo.java => optimizers/INFO_optimize.java} (77%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/planners/FindmaxPlannerType.java => optimizers/planners/OptimizerPlannerTypes.java} (62%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/planners/rampup/RampupConfig.java => optimizers/planners/findmax/FindmaxConfig.java} (91%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/planners/rampup/RampupFrameParams.java => optimizers/planners/findmax/FindmaxFrameParams.java} (68%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/planners/rampup/FindmaxRampup.java => optimizers/planners/findmax/FindmaxPlanner.java} (81%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{ => optimizers/planners}/findmax/findmax.png (100%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{ => optimizers/planners}/findmax/findmax.svg (100%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax => optimizers}/planners/ratchet/RatchetConfig.java (96%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax => optimizers}/planners/ratchet/RatchetFrameParams.java (84%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/planners/ratchet/FindmaxRatchet.java => optimizers/planners/ratchet/RatchetPlanner.java} (93%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/survey/SurveyConfig.java => optimizers/planners/rcurve/RCurveConfig.java} (72%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/survey/SurveyFrameParams.java => optimizers/planners/rcurve/RCurveFrameParams.java} (84%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{findmax/survey/FindmaxSurvey.java => optimizers/planners/rcurve/RCurvePlanner.java} (67%)
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBJavaNativeResolver.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBJavaNativeResolver.java
index 27357cc77..e23242a47 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBJavaNativeResolver.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBJavaNativeResolver.java
@@ -29,7 +29,10 @@ public class NBJavaNativeResolver implements NBInvokableResolver {
@Override
public NBInvokableCommand resolve(Cmd cmd, NBBufferedContainer parent, String phaseName) {
return switch (cmd.getCmdType()) {
- case CmdType.indirect -> NBJavaCommandLoader.init(cmd.getArgValue("_impl"), parent, phaseName, cmd.getTargetContext());
+ case CmdType.indirect -> {
+ String implName = cmd.takeArgValue("_impl");
+ yield NBJavaCommandLoader.init(implName, parent, phaseName, cmd.getTargetContext());
+ }
case CmdType.java -> NBJavaCommandLoader.init(cmd.getArgValue("class"), parent, phaseName, cmd.getTargetContext());
default -> null;
};
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/Cmd.java b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/Cmd.java
index 8cd551e22..e1d057073 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/Cmd.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/cmdstream/Cmd.java
@@ -55,6 +55,12 @@ public class Cmd {
return cmdArg.getValue();
}
+
+ public String takeArgValue(String paramName) {
+ String argValue = getArgValue(paramName);
+ this.cmdArgs.remove(paramName);
+ return argValue;
+ }
public String getArgValue(String paramName) {
CmdArg cmdArg = this.cmdArgs.get(paramName);
if (cmdArg==null) {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java
index 4530b1a7c..6d9c2aa7b 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/commands/INFO_example.java
@@ -20,7 +20,7 @@ import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
import io.nosqlbench.nb.annotations.Service;
-@Service(value = NBCommandInfo.class,selector = "start")
+@Service(value = NBCommandInfo.class,selector = "example")
public class INFO_example extends NBCommandInfo {
@Override
public Class extends NBInvokableCommand> getType() {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
index c21fc3d73..d1a0de12e 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
@@ -77,6 +77,7 @@ public class NBCommandAssembly {
throw new BasicError("Found zero commands for spec;" + cmd);
}
String containerName = cmd.getTargetContext();
+ params.remove("_impl");
parameterizedInvocations.add(new CommandInvocation(command, params, containerName));
}
return parameterizedInvocations;
diff --git a/nbr/src/main/java/io/nosqlbench/nb/PlaceHolder.java b/nbr/src/main/java/io/nosqlbench/nb/PlaceHolder.java
deleted file mode 100644
index 0b0f52c25..000000000
--- a/nbr/src/main/java/io/nosqlbench/nb/PlaceHolder.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2022 nosqlbench
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.nosqlbench.nb;
-
-/**
- * This class is just a place holder. It holds a place.
- * If only nexus understood aggregator module without src...
- */
-public class PlaceHolder {
-}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/SimFrameUtils.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/SimFrameUtils.java
similarity index 98%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/SimFrameUtils.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/SimFrameUtils.java
index ba93cd721..4da4f34e5 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/SimFrameUtils.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/SimFrameUtils.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
+package io.nosqlbench.scenarios.simframe;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
@@ -28,7 +28,6 @@ import java.util.concurrent.locks.LockSupport;
public class SimFrameUtils {
-
public static void awaitActivity(Activity flywheel) {
// await flywheel actually spinning, or timeout with error
NBMetricTimer result_success_timer = flywheel.find().timer("name:result_success");
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/FindmaxFrameData.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/capture/SimFrameValueData.java
similarity index 89%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/FindmaxFrameData.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/capture/SimFrameValueData.java
index 8b0b40bdf..e5e1e8c68 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/FindmaxFrameData.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/capture/SimFrameValueData.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax;
+package io.nosqlbench.scenarios.simframe.capture;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
@@ -22,8 +22,8 @@ import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricHistogram;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
-public class FindmaxFrameData extends SimFrameCapture {
- public FindmaxFrameData(Activity activity) {
+public class SimFrameValueData extends SimFrameCapture {
+ public SimFrameValueData(Activity activity) {
NBMetricTimer result_timer = activity.find().timer("name:result");
NBMetricTimer result_success_timer = activity.find().timer("name:result_success");
NBMetricGauge cyclerate_gauge = activity.find().gauge("name=config_cyclerate");
@@ -31,13 +31,13 @@ public class FindmaxFrameData extends SimFrameCapture {
NBMetricHistogram tries_histo = tries_histo_src.attachHdrDeltaHistogram();
addDirect("target_rate",
- () -> cyclerate_gauge.getValue(),
+ cyclerate_gauge::getValue,
Double.NaN);
addDeltaTime("achieved_oprate",
- () -> result_timer.getCount(),
+ result_timer::getCount,
Double.NaN);
addDeltaTime("achieved_ok_oprate",
- () -> result_success_timer.getCount()
+ result_success_timer::getCount
, 1.0);
addRemix("achieved_success_ratio", vars -> {
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/ThreadSpec.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/capture/package-info.java
similarity index 68%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/ThreadSpec.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/capture/package-info.java
index 3672948be..940b18330 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/ThreadSpec.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/capture/package-info.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
-
-public class ThreadSpec {
- public ThreadSpec(double threads) {
- }
-}
+/**
+ * The types in this package are used to define observable dependent variables,
+ * specify how they are measured, formulate them into a value function, and provide
+ * a view of these over time as frames are executed.
+ */
+package io.nosqlbench.scenarios.simframe.capture;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/generic/ParamsEffector.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/generic/ParamsEffector.java
deleted file mode 100644
index a98b69b38..000000000
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/generic/ParamsEffector.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2023 nosqlbench
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.nosqlbench.scenarios.simframe.generic;
-
-import io.nosqlbench.engine.api.activityapi.core.Activity;
-
-public interface ParamsEffector {
- P applyParams(P ptype, Activity activity);
-}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/NB_findmax.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/CMD_optimize.java
similarity index 81%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/NB_findmax.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/CMD_optimize.java
index 2f29e26a4..211fa32ab 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/NB_findmax.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/CMD_optimize.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax;
+package io.nosqlbench.scenarios.simframe.optimizers;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
@@ -23,8 +23,9 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitie
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
-import io.nosqlbench.scenarios.simframe.findmax.planners.FindmaxPlannerType;
-import io.nosqlbench.scenarios.simframe.optimo.SimFrameUtils;
+import io.nosqlbench.scenarios.simframe.capture.SimFrameValueData;
+import io.nosqlbench.scenarios.simframe.optimizers.planners.OptimizerPlannerTypes;
+import io.nosqlbench.scenarios.simframe.SimFrameUtils;
import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -52,11 +53,11 @@ import java.io.Reader;
*
*
This can be tested as
{@code nb5 --show-stacktraces java io.nosqlbench.scenarios.findmax.SC_findmax threads=36}
*/
-@Service(value = NBBaseCommand.class,selector = "findmax")
-public class NB_findmax extends NBBaseCommand {
- private final static Logger logger = LogManager.getLogger(NB_findmax.class);
+@Service(value = NBBaseCommand.class,selector = "optimize")
+public class CMD_optimize extends NBBaseCommand {
+ private final static Logger logger = LogManager.getLogger(CMD_optimize.class);
- public NB_findmax(NBBufferedContainer parentComponent, String scenarioName, String context) {
+ public CMD_optimize(NBBufferedContainer parentComponent, String scenarioName, String context) {
super(parentComponent, scenarioName, context);
}
@@ -65,9 +66,9 @@ public class NB_findmax extends NBBaseCommand {
Activity flywheel = SimFrameUtils.findFlywheelActivity(controller, params.get("activity"));
stdout.println("starting analysis on activity '" + flywheel.getAlias() + "'");
SimFrameUtils.awaitActivity(flywheel);
- SimFrameCapture capture = new FindmaxFrameData(flywheel);
+ SimFrameCapture capture = new SimFrameValueData(flywheel);
String plannerType = params.getOrDefault("planner", "ratchet");
- FindmaxPlannerType plannerImpl = FindmaxPlannerType.valueOf(plannerType);
+ OptimizerPlannerTypes plannerImpl = OptimizerPlannerTypes.valueOf(plannerType);
SimFramePlanner,?> planner = plannerImpl.createPlanner(params);
Record result = planner.analyze(flywheel, capture, stdout, stderr, controller);
stdout.println("result:\n" + result);
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/NBFindmaxInfo.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/INFO_optimize.java
similarity index 77%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/NBFindmaxInfo.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/INFO_optimize.java
index 7d9b09e6d..352b1d387 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/NBFindmaxInfo.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/INFO_optimize.java
@@ -14,17 +14,16 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax;
+package io.nosqlbench.scenarios.simframe.optimizers;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
import io.nosqlbench.nb.annotations.Service;
-import io.nosqlbench.scenarios.simframe.optimo.NB_optimo;
-@Service(value = NBCommandInfo.class,selector = "findmax")
-public class NBFindmaxInfo extends NBCommandInfo {
+@Service(value = NBCommandInfo.class,selector = "optimize")
+public class INFO_optimize extends NBCommandInfo {
@Override
public Class extends NBBaseCommand> getType() {
- return NB_findmax.class;
+ return CMD_optimize.class;
}
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/FindmaxPlannerType.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/OptimizerPlannerTypes.java
similarity index 62%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/FindmaxPlannerType.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/OptimizerPlannerTypes.java
index 9bf6b8b8c..184fdffbe 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/FindmaxPlannerType.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/OptimizerPlannerTypes.java
@@ -14,25 +14,25 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax.planners;
+package io.nosqlbench.scenarios.simframe.optimizers.planners;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
-import io.nosqlbench.scenarios.simframe.findmax.planners.rampup.FindmaxRampup;
-import io.nosqlbench.scenarios.simframe.findmax.planners.ratchet.FindmaxRatchet;
-import io.nosqlbench.scenarios.simframe.findmax.survey.FindmaxSurvey;
+import io.nosqlbench.scenarios.simframe.optimizers.planners.findmax.FindmaxPlanner;
+import io.nosqlbench.scenarios.simframe.optimizers.planners.ratchet.RatchetPlanner;
+import io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve.RCurvePlanner;
import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
-public enum FindmaxPlannerType {
+public enum OptimizerPlannerTypes {
// survey,
ratchet,
- rampup,
- survey,
+ findmax,
+ rcurve,
;
public SimFramePlanner,?> createPlanner(NBCommandParams params) {
return switch (this) {
- case ratchet -> new FindmaxRatchet(params);
- case rampup -> new FindmaxRampup(params);
- case survey -> new FindmaxSurvey(params);
+ case findmax -> new FindmaxPlanner(params);
+ case rcurve -> new RCurvePlanner(params);
+ case ratchet -> new RatchetPlanner(params);
};
}
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/RampupConfig.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxConfig.java
similarity index 91%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/RampupConfig.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxConfig.java
index a70dc43d5..2f4a5602e 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/RampupConfig.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxConfig.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax.planners.rampup;
+package io.nosqlbench.scenarios.simframe.optimizers.planners.findmax;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
@@ -22,7 +22,7 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
* These search parameters are based on the original findmax algorithm, and
* should be reduced down to the minimum set needed.
*/
-public record RampupConfig(
+public record FindmaxConfig(
int sample_time_ms,
int sample_max,
double sample_incr,
@@ -32,7 +32,7 @@ public record RampupConfig(
int average_of,
long min_settling_ms
) {
- public RampupConfig(NBCommandParams params) {
+ public FindmaxConfig(NBCommandParams params) {
this(
params.maybeGet("sample_time_ms").map(Integer::parseInt).orElse(4000),
params.maybeGet("sample_max").map(Integer::parseInt).orElse(10000),
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/RampupFrameParams.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxFrameParams.java
similarity index 68%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/RampupFrameParams.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxFrameParams.java
index a4391340f..733a7b3c1 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/RampupFrameParams.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxFrameParams.java
@@ -14,34 +14,34 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax.planners.rampup;
+package io.nosqlbench.scenarios.simframe.optimizers.planners.findmax;
/**
* These parameters are calculated by the planner based on previous simulation frame history.
*/
-public record RampupFrameParams(
+public record FindmaxFrameParams(
/**
* The base rate upon which we add higher deltas
*/
double rate_shelf,
- /**
- * The incremental rate which we stack on top of the base rate to find a new limit
- */
- double rate_delta,
- /**
- * How many millis we sample the current frame for
- */
- long sample_time_ms,
- /**
- * How many millis we let the workload settle for to achieve stability, such as when it has recently
- * be in in over-saturation mode with a too-high delta
- */
- long settling_time_ms,
- /**
- * Narrate the reason for the current parameters being set the way the are
- */
- String description
+ /**
+ * The incremental rate which we stack on top of the base rate to find a new limit
+ */
+ double rate_delta,
+ /**
+ * How many millis we sample the current frame for
+ */
+ long sample_time_ms,
+ /**
+ * How many millis we let the workload settle for to achieve stability, such as when it has recently
+ * be in in over-saturation mode with a too-high delta
+ */
+ long settling_time_ms,
+ /**
+ * Narrate the reason for the current parameters being set the way the are
+ */
+ String description
) {
public double computed_rate() {
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/FindmaxRampup.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
similarity index 81%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/FindmaxRampup.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
index fa757d8b5..ed597db07 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/planners/rampup/FindmaxRampup.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax.planners.rampup;
+package io.nosqlbench.scenarios.simframe.optimizers.planners.findmax;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
@@ -29,20 +29,20 @@ import org.apache.logging.log4j.Logger;
import java.util.Comparator;
-public class FindmaxRampup extends SimFramePlanner {
- private final Logger logger = LogManager.getLogger(FindmaxRampup.class);
+public class FindmaxPlanner extends SimFramePlanner {
+ private final Logger logger = LogManager.getLogger(FindmaxPlanner.class);
- public FindmaxRampup(NBCommandParams analyzerParams) {
+ public FindmaxPlanner(NBCommandParams analyzerParams) {
super(analyzerParams);
}
@Override
- public RampupConfig getConfig(NBCommandParams params) {
- return new RampupConfig(params);
+ public FindmaxConfig getConfig(NBCommandParams params) {
+ return new FindmaxConfig(params);
}
- public RampupFrameParams initialStep() {
- return new RampupFrameParams(
+ public FindmaxFrameParams initialStep() {
+ return new FindmaxFrameParams(
config.rate_base(), config.rate_step(), config.sample_time_ms(), config.min_settling_ms(), "INITIAL"
);
}
@@ -57,11 +57,11 @@ public class FindmaxRampup extends SimFramePlanner journal) {
- SimFrame last = journal.last();
- SimFrame best = journal.bestRun();
+ public FindmaxFrameParams nextStep(JournalView journal) {
+ SimFrame last = journal.last();
+ SimFrame best = journal.bestRun();
if (best.index() == last.index()) { // got better consecutively
- return new RampupFrameParams(
+ return new FindmaxFrameParams(
last.params().rate_shelf(),
last.params().rate_delta() * config.rate_incr(),
last.params().sample_time_ms(),
@@ -74,7 +74,7 @@ public class FindmaxRampup extends SimFramePlanner nextWorseFrameWithHigherRate = journal.frames().stream()
+ SimFrame nextWorseFrameWithHigherRate = journal.frames().stream()
.filter(f -> f.value() < best.value())
.filter(f -> f.params().computed_rate() > best.params().computed_rate())
.min(Comparator.comparingDouble(f -> f.params().computed_rate()))
.orElseThrow(() -> new RuntimeException("inconsistent samples"));
if ((nextWorseFrameWithHigherRate.params().computed_rate() - best.params().computed_rate()) > config.rate_step()) {
- return new RampupFrameParams(
+ return new FindmaxFrameParams(
best.params().computed_rate(),
config.rate_step(),
(long) (last.params().sample_time_ms() * config.sample_incr()),
@@ -105,7 +105,7 @@ public class FindmaxRampup extends SimFramePlanner {
- private final Logger logger = LogManager.getLogger(FindmaxRatchet.class);
+public class RatchetPlanner extends SimFramePlanner {
+ private final Logger logger = LogManager.getLogger(RatchetPlanner.class);
- public FindmaxRatchet(NBCommandParams params) {
+ public RatchetPlanner(NBCommandParams params) {
super(params);
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/SurveyConfig.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
similarity index 72%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/SurveyConfig.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
index 6a7eb67ca..62342c5af 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/SurveyConfig.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax.survey;
+package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
@@ -22,15 +22,21 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
* These search parameters are based on the original findmax algorithm, and
* should be reduced down to the minimum set needed.
*/
-public record SurveyConfig(
+public record RCurveConfig(
+ double min_rate,
double max_rate,
int steps
) {
- public SurveyConfig(NBCommandParams params) {
+ public RCurveConfig(NBCommandParams params) {
this(
- params.maybeGet("max_rate").map(Double::parseDouble).orElse(1.2d),
- params.maybeGet("steps").map(Integer::parseInt).orElse(3)
+ params.maybeGet("min_rate").map(Double::parseDouble).orElse(0.0),
+ params.maybeGet("max_rate").map(Double::parseDouble).orElse(10.0),
+ params.maybeGet("steps").map(Integer::parseInt).orElse(10)
);
-
}
+
+ double rateForStep(int step) {
+ return min_rate + ((max_rate-min_rate)*((double)step/(double)steps));
+ }
+
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/SurveyFrameParams.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveFrameParams.java
similarity index 84%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/SurveyFrameParams.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveFrameParams.java
index 411becca1..db0893390 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/SurveyFrameParams.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveFrameParams.java
@@ -14,12 +14,11 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax.survey;
+package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
-public record SurveyFrameParams(
+public record RCurveFrameParams(
double rate,
- double step,
+ int step,
String description
-
) {
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/FindmaxSurvey.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
similarity index 67%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/FindmaxSurvey.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
index 1bfd712ed..af2868fda 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/findmax/survey/FindmaxSurvey.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.findmax.survey;
+package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
@@ -27,21 +27,21 @@ import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-public class FindmaxSurvey extends SimFramePlanner {
- private final Logger logger = LogManager.getLogger(FindmaxSurvey.class);
+public class RCurvePlanner extends SimFramePlanner {
+ private final Logger logger = LogManager.getLogger(RCurvePlanner.class);
- public FindmaxSurvey(NBCommandParams params) {
+ public RCurvePlanner(NBCommandParams params) {
super(params);
}
@Override
- public SurveyConfig getConfig(NBCommandParams params) {
- return new SurveyConfig(params);
+ public RCurveConfig getConfig(NBCommandParams params) {
+ return new RCurveConfig(params);
}
- public SurveyFrameParams initialStep() {
- return new SurveyFrameParams(config.max_rate(), config.steps(), "INITIAL");
+ public RCurveFrameParams initialStep() {
+ return new RCurveFrameParams(config.rateForStep(1), 1, "INITIAL");
}
/**
@@ -55,14 +55,18 @@ public class FindmaxSurvey extends SimFramePlanner journal) {
- return null;
+ public RCurveFrameParams nextStep(JournalView journal) {
+ SimFrame last = journal.last();
+ int nextStep = last.params().step() +1;
+ if (nextStep<=config.steps()) {
+ return new RCurveFrameParams(config.rateForStep(nextStep),nextStep,"Advancing to step " + nextStep);
+ } else {
+ return null;
+ }
}
-
@Override
- public void applyParams(SurveyFrameParams params, Activity flywheel) {
+ public void applyParams(RCurveFrameParams params, Activity flywheel) {
flywheel.onEvent(ParamChange.of(new CycleRateSpec(params.rate(), 1.1d, SimRateSpec.Verb.restart)));
-
}
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NB_optimo.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NB_optimo.java
index 3ecca4ebd..e2b6ff4ca 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NB_optimo.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NB_optimo.java
@@ -28,9 +28,10 @@ import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.scenarios.simframe.SimFrameUtils;
import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
import io.nosqlbench.scenarios.simframe.capture.SimFrameJournal;
-import io.nosqlbench.scenarios.simframe.findmax.NB_findmax;
+import io.nosqlbench.scenarios.simframe.optimizers.CMD_optimize;
import io.nosqlbench.scenarios.simframe.planning.SimFrame;
import io.nosqlbench.scenarios.simframe.planning.SimFrameFunction;
import io.nosqlbench.scenarios.simframe.stabilization.StatFunctions;
@@ -63,7 +64,7 @@ import java.util.List;
*
*/
public class NB_optimo extends NBBaseCommand {
- private final static Logger logger = LogManager.getLogger(NB_findmax.class);
+ private final static Logger logger = LogManager.getLogger(CMD_optimize.class);
public NB_optimo(NBBufferedContainer parentComponent, String phaseName, String targetScenario) {
super(parentComponent, phaseName, targetScenario);
From 723aa43eaf3c75142ada6625dc6ba33f59bc9bca Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Tue, 19 Dec 2023 14:56:35 +0000
Subject: [PATCH 003/120] fix: upgrade com.amazonaws:aws-java-sdk-dynamodb from
1.12.595 to 1.12.596
Snyk has created this PR to upgrade com.amazonaws:aws-java-sdk-dynamodb from 1.12.595 to 1.12.596.
See this package in Maven Repository:
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-dynamodb/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/db3dfb82-467b-4263-94f8-28f933540a6d?utm_source=github&utm_medium=referral&page=upgrade-pr
---
adapter-dynamodb/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/adapter-dynamodb/pom.xml b/adapter-dynamodb/pom.xml
index d064e1c0f..0c0c0b8a5 100644
--- a/adapter-dynamodb/pom.xml
+++ b/adapter-dynamodb/pom.xml
@@ -43,7 +43,7 @@
com.amazonaws
aws-java-sdk-dynamodb
- 1.12.595
+ 1.12.596
From ec2d441fea523681106e91092c604bbca91eca99 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Tue, 19 Dec 2023 15:25:22 +0000
Subject: [PATCH 004/120] fix: upgrade com.github.oshi:oshi-core-java11 from
6.4.7 to 6.4.8
Snyk has created this PR to upgrade com.github.oshi:oshi-core-java11 from 6.4.7 to 6.4.8.
See this package in Maven Repository:
https://mvnrepository.com/artifact/com.github.oshi/oshi-core-java11/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/024e32ec-7f80-485c-b7bf-f69d45f933ce?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 384654081..650b6e74f 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -280,7 +280,7 @@
com.github.oshi
oshi-core-java11
- 6.4.7
+ 6.4.8
com.google.code.gson
From 82c789d10b97e4deae795f93a273f549dbd86c6e Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Tue, 19 Dec 2023 15:25:25 +0000
Subject: [PATCH 005/120] fix: upgrade com.amazonaws:aws-java-sdk-s3 from
1.12.595 to 1.12.596
Snyk has created this PR to upgrade com.amazonaws:aws-java-sdk-s3 from 1.12.595 to 1.12.596.
See this package in Maven Repository:
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/024e32ec-7f80-485c-b7bf-f69d45f933ce?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 384654081..26848ae77 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -290,7 +290,7 @@
com.amazonaws
aws-java-sdk-s3
- 1.12.595
+ 1.12.596
com.elega9t
From 59c0cc9d8b58b42f10074af0171b6c181c24a5ce Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Tue, 19 Dec 2023 15:25:26 +0000
Subject: [PATCH 006/120] fix: upgrade org.apache.groovy:groovy from 4.0.15 to
4.0.16
Snyk has created this PR to upgrade org.apache.groovy:groovy from 4.0.15 to 4.0.16.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.apache.groovy/groovy/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/79ea2278-c4a8-4336-ba93-333db70b8c13?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 384654081..b5d185050 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -80,7 +80,7 @@
org.apache.groovy
groovy
- 4.0.15
+ 4.0.16
org.snakeyaml
From 9378966fd1dac6da128ee6480dd3d909bb1e8c62 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Tue, 19 Dec 2023 15:28:03 +0000
Subject: [PATCH 007/120] fix: upgrade org.apache.commons:commons-lang3 from
3.13.0 to 3.14.0
Snyk has created this PR to upgrade org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/829dafa3-4836-462a-b1f4-15be99fe372a?utm_source=github&utm_medium=referral&page=upgrade-pr
---
adapter-pulsar/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/adapter-pulsar/pom.xml b/adapter-pulsar/pom.xml
index 1ab4ab899..bc06d0b1a 100644
--- a/adapter-pulsar/pom.xml
+++ b/adapter-pulsar/pom.xml
@@ -61,7 +61,7 @@
org.apache.commons
commons-lang3
- 3.13.0
+ 3.14.0
From 3346cd26247d757e2c750a88677c9e6cca44f52b Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 19 Dec 2023 10:12:24 -0600
Subject: [PATCH 008/120] add notes for improvements
---
.../engine/core/lifecycle/session/NBCommandAssembly.java | 2 ++
.../scenarios/simframe/stabilization/StabilityDetector.java | 3 +++
2 files changed, 5 insertions(+)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
index d1a0de12e..202538435 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBCommandAssembly.java
@@ -77,6 +77,8 @@ public class NBCommandAssembly {
throw new BasicError("Found zero commands for spec;" + cmd);
}
String containerName = cmd.getTargetContext();
+
+ // TODO, make this unnecessary by moving the impl out of the map to a dedicated cmd structure
params.remove("_impl");
parameterizedInvocations.add(new CommandInvocation(command, params, containerName));
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java
index 356469861..631b8c598 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java
@@ -155,6 +155,9 @@ public class StabilityDetector implements Runnable {
}
}
+ // TODO: Add a check for when stddev is lower than some fixed value, or when both
+ // (or all) windows are below some small threshold
+ // and perhaps add auto-correlation checks for (any of) style unblocking
private void updateAndAwait() {
int interval = (int) (this.timeSliceSeconds * 1000);
startedAt = System.currentTimeMillis();
From 9b6838e30cb49d469f0cd9b23b8c3884de9a73c8 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Tue, 19 Dec 2023 17:05:39 +0000
Subject: [PATCH 009/120] fix: upgrade org.apache.kafka:kafka-clients from
3.6.0 to 3.6.1
Snyk has created this PR to upgrade org.apache.kafka:kafka-clients from 3.6.0 to 3.6.1.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/bb64938c-e68b-4c38-9e2f-d9d8336c07ee?utm_source=github&utm_medium=referral&page=upgrade-pr
---
adapter-kafka/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/adapter-kafka/pom.xml b/adapter-kafka/pom.xml
index 03b4cac18..a1a8da860 100644
--- a/adapter-kafka/pom.xml
+++ b/adapter-kafka/pom.xml
@@ -34,7 +34,7 @@
- 3.6.0
+ 3.6.1
From 9a81b816b04f09f6f4a1779e8d24a251c64582ea Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 19 Dec 2023 15:38:28 -0600
Subject: [PATCH 010/120] minor improvements to optimizers
---
.../simframe/optimizers/CMD_optimize.java | 2 +-
.../optimo/CMD_optimo.java} | 6 ++--
.../{ => optimizers}/optimo/NBOptimoInfo.java | 4 +--
.../optimo/OptimoFrameFunction.java | 2 +-
.../optimo/OptimoFrameParams.java | 18 ++++++++--
.../optimo/OptimoParamModel.java | 2 +-
.../optimo/OptimoSearchSettings.java | 2 +-
.../planners/OptimizerPlannerTypes.java | 9 ++---
.../planners/findmax/FindmaxPlanner.java | 7 ++--
.../planners/ratchet/RatchetPlanner.java | 7 ++--
.../planners/rcurve/RCurveConfig.java | 12 +++----
.../planners/rcurve/RCurveFrameParams.java | 4 +++
.../planners/rcurve/RCurvePlanner.java | 33 +++++++++++++------
.../simframe/planning/HoldAndSample.java | 27 +++++++++++++++
.../simframe/planning/SimFramePlanner.java | 19 ++++++-----
.../stabilization/StabilityDetector.java | 6 ++--
.../resources/examples/bindings_vectors.yaml | 2 +-
17 files changed, 110 insertions(+), 52 deletions(-)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{optimo/NB_optimo.java => optimizers/optimo/CMD_optimo.java} (97%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{ => optimizers}/optimo/NBOptimoInfo.java (91%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{ => optimizers}/optimo/OptimoFrameFunction.java (97%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{ => optimizers}/optimo/OptimoFrameParams.java (59%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{ => optimizers}/optimo/OptimoParamModel.java (97%)
rename nbr/src/main/java/io/nosqlbench/scenarios/simframe/{ => optimizers}/optimo/OptimoSearchSettings.java (95%)
create mode 100644 nbr/src/main/java/io/nosqlbench/scenarios/simframe/planning/HoldAndSample.java
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/CMD_optimize.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/CMD_optimize.java
index 211fa32ab..3d2888fcd 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/CMD_optimize.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/CMD_optimize.java
@@ -69,7 +69,7 @@ public class CMD_optimize extends NBBaseCommand {
SimFrameCapture capture = new SimFrameValueData(flywheel);
String plannerType = params.getOrDefault("planner", "ratchet");
OptimizerPlannerTypes plannerImpl = OptimizerPlannerTypes.valueOf(plannerType);
- SimFramePlanner,?> planner = plannerImpl.createPlanner(params);
+ SimFramePlanner,?> planner = plannerImpl.createPlanner(this,params);
Record result = planner.analyze(flywheel, capture, stdout, stderr, controller);
stdout.println("result:\n" + result);
return result;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NB_optimo.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
similarity index 97%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NB_optimo.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
index e2b6ff4ca..4777717c2 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NB_optimo.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
+package io.nosqlbench.scenarios.simframe.optimizers.optimo;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
@@ -63,10 +63,10 @@ import java.util.List;
* to contain a reasonably representative character of the overall manifold
*
*/
-public class NB_optimo extends NBBaseCommand {
+public class CMD_optimo extends NBBaseCommand {
private final static Logger logger = LogManager.getLogger(CMD_optimize.class);
- public NB_optimo(NBBufferedContainer parentComponent, String phaseName, String targetScenario) {
+ public CMD_optimo(NBBufferedContainer parentComponent, String phaseName, String targetScenario) {
super(parentComponent, phaseName, targetScenario);
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NBOptimoInfo.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/NBOptimoInfo.java
similarity index 91%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NBOptimoInfo.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/NBOptimoInfo.java
index f0156a223..5297d8f49 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/NBOptimoInfo.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/NBOptimoInfo.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
+package io.nosqlbench.scenarios.simframe.optimizers.optimo;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
@@ -24,6 +24,6 @@ import io.nosqlbench.nb.annotations.Service;
public class NBOptimoInfo extends NBCommandInfo {
@Override
public Class extends NBBaseCommand> getType() {
- return NB_optimo.class;
+ return CMD_optimo.class;
}
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoFrameFunction.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoFrameFunction.java
similarity index 97%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoFrameFunction.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoFrameFunction.java
index df6106950..4219f4343 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoFrameFunction.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoFrameFunction.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
+package io.nosqlbench.scenarios.simframe.optimizers.optimo;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.core.RunState;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoFrameParams.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoFrameParams.java
similarity index 59%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoFrameParams.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoFrameParams.java
index 67ca5b30e..d4534822a 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoFrameParams.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoFrameParams.java
@@ -14,14 +14,18 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
+package io.nosqlbench.scenarios.simframe.optimizers.optimo;
+import io.nosqlbench.engine.core.lifecycle.scenario.container.InvokableResult;
+import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandResult;
+import io.nosqlbench.nb.api.config.standard.Param;
+import io.nosqlbench.scenarios.simframe.planning.GenericParamModel;
+
import java.util.LinkedHashMap;
-import java.util.List;
import java.util.Map;
-public class OptimoFrameParams{
+public class OptimoFrameParams implements InvokableResult {
OptimoParamModel model;
double[] paramValues;
@@ -40,4 +44,12 @@ public class OptimoFrameParams{
return paramValues;
}
+ @Override
+ public Map asResult() {
+ Map result = new LinkedHashMap<>();
+ for (int i = 0; i < this.paramValues.length; i++) {
+ result.put(model.getParams().get(i).name(),String.valueOf(paramValues[i]));
+ }
+ return result;
+ }
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoParamModel.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
similarity index 97%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoParamModel.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
index 05cbd7f71..536696eeb 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoParamModel.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
+package io.nosqlbench.scenarios.simframe.optimizers.optimo;
import io.nosqlbench.scenarios.simframe.planning.GenericParamModel;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoSearchSettings.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoSearchSettings.java
similarity index 95%
rename from nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoSearchSettings.java
rename to nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoSearchSettings.java
index eef8d0ca1..12aed639a 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimo/OptimoSearchSettings.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoSearchSettings.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.scenarios.simframe.optimo;
+package io.nosqlbench.scenarios.simframe.optimizers.optimo;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.nb.api.engine.util.Unit;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/OptimizerPlannerTypes.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/OptimizerPlannerTypes.java
index 184fdffbe..d08929573 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/OptimizerPlannerTypes.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/OptimizerPlannerTypes.java
@@ -17,6 +17,7 @@
package io.nosqlbench.scenarios.simframe.optimizers.planners;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.scenarios.simframe.optimizers.planners.findmax.FindmaxPlanner;
import io.nosqlbench.scenarios.simframe.optimizers.planners.ratchet.RatchetPlanner;
import io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve.RCurvePlanner;
@@ -28,11 +29,11 @@ public enum OptimizerPlannerTypes {
findmax,
rcurve,
;
- public SimFramePlanner,?> createPlanner(NBCommandParams params) {
+ public SimFramePlanner,?> createPlanner(NBBaseComponent parent, NBCommandParams params) {
return switch (this) {
- case findmax -> new FindmaxPlanner(params);
- case rcurve -> new RCurvePlanner(params);
- case ratchet -> new RatchetPlanner(params);
+ case findmax -> new FindmaxPlanner(parent, params);
+ case rcurve -> new RCurvePlanner(parent, params);
+ case ratchet -> new RatchetPlanner(parent, params);
};
}
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
index ed597db07..ec27fc4c0 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
@@ -20,6 +20,7 @@ import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.scenarios.simframe.capture.JournalView;
import io.nosqlbench.scenarios.simframe.planning.SimFrame;
@@ -30,10 +31,8 @@ import org.apache.logging.log4j.Logger;
import java.util.Comparator;
public class FindmaxPlanner extends SimFramePlanner {
- private final Logger logger = LogManager.getLogger(FindmaxPlanner.class);
-
- public FindmaxPlanner(NBCommandParams analyzerParams) {
- super(analyzerParams);
+ public FindmaxPlanner(NBBaseComponent parent, NBCommandParams analyzerParams) {
+ super(parent, analyzerParams);
}
@Override
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java
index c652a93e3..8e186c7ea 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java
@@ -20,6 +20,7 @@ import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.scenarios.simframe.capture.JournalView;
import io.nosqlbench.scenarios.simframe.planning.SimFrame;
@@ -28,10 +29,8 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class RatchetPlanner extends SimFramePlanner {
- private final Logger logger = LogManager.getLogger(RatchetPlanner.class);
-
- public RatchetPlanner(NBCommandParams params) {
- super(params);
+ public RatchetPlanner(NBBaseComponent parent, NBCommandParams params) {
+ super(parent, params);
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
index 62342c5af..34abc7558 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
@@ -23,20 +23,20 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
* should be reduced down to the minimum set needed.
*/
public record RCurveConfig(
- double min_rate,
- double max_rate,
- int steps
+ double maxrate,
+ int maxstep,
+ double min_sample_seconds
) {
public RCurveConfig(NBCommandParams params) {
this(
- params.maybeGet("min_rate").map(Double::parseDouble).orElse(0.0),
params.maybeGet("max_rate").map(Double::parseDouble).orElse(10.0),
- params.maybeGet("steps").map(Integer::parseInt).orElse(10)
+ params.maybeGet("max_step").map(Integer::parseInt).orElse(10),
+ params.maybeGet("min_sample_seconds").map(Double::parseDouble).orElse(10.0)
);
}
double rateForStep(int step) {
- return min_rate + ((max_rate-min_rate)*((double)step/(double)steps));
+ return ((double)step/(double) maxstep)*maxrate;
}
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveFrameParams.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveFrameParams.java
index db0893390..23058d7b6 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveFrameParams.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveFrameParams.java
@@ -19,6 +19,10 @@ package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
public record RCurveFrameParams(
double rate,
int step,
+ int maxsteps,
String description
) {
+ public double ratio() {
+ return ((double)step/(double)maxsteps);
+ }
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
index af2868fda..f3118f5a7 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
@@ -20,28 +20,34 @@ import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.scenarios.simframe.capture.JournalView;
+import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
+import io.nosqlbench.scenarios.simframe.planning.HoldAndSample;
import io.nosqlbench.scenarios.simframe.planning.SimFrame;
import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-public class RCurvePlanner extends SimFramePlanner {
- private final Logger logger = LogManager.getLogger(RCurvePlanner.class);
+import java.util.concurrent.locks.LockSupport;
- public RCurvePlanner(NBCommandParams params) {
- super(params);
+public class RCurvePlanner extends SimFramePlanner implements HoldAndSample {
+ private RCurveFrameParams lastFrame;
+
+ public RCurvePlanner(NBBaseComponent parent, NBCommandParams params) {
+ super(parent,params);
+ create().gauge("rcuve_step",() -> lastFrame==null ? 0 : (double)lastFrame.step());
+ create().gauge("rcurve_maxstep",() -> lastFrame==null ? 0 : (double)lastFrame.maxsteps());
+ create().gauge("rcurve_ratio",() -> lastFrame==null ? 0.0 : lastFrame.ratio());
+ create().gauge("rcurve_rate",() -> lastFrame==null ? 0.0 : lastFrame.rate());
}
-
@Override
public RCurveConfig getConfig(NBCommandParams params) {
return new RCurveConfig(params);
}
public RCurveFrameParams initialStep() {
- return new RCurveFrameParams(config.rateForStep(1), 1, "INITIAL");
+ return new RCurveFrameParams(config.rateForStep(1), 1,config.maxstep(),"INITIAL");
}
/**
@@ -58,8 +64,8 @@ public class RCurvePlanner extends SimFramePlanner journal) {
SimFrame last = journal.last();
int nextStep = last.params().step() +1;
- if (nextStep<=config.steps()) {
- return new RCurveFrameParams(config.rateForStep(nextStep),nextStep,"Advancing to step " + nextStep);
+ if (nextStep<=config.maxstep()) {
+ return new RCurveFrameParams(config.rateForStep(nextStep),nextStep,config.maxstep(),"Advancing to step " + nextStep);
} else {
return null;
}
@@ -69,4 +75,11 @@ public class RCurvePlanner extends SimFramePlanner
* The configuration type for the planner
*/
-public abstract class SimFramePlanner {
- private final Logger logger = LogManager.getLogger(SimFramePlanner.class);
+public abstract class SimFramePlanner extends NBBaseComponent {
+ protected final Logger logger = LogManager.getLogger(SimFramePlanner.class);
protected final C config;
protected final SimFrameJournal journal;
- public SimFramePlanner(NBCommandParams analyzerParams) {
+ public SimFramePlanner(NBBaseComponent parent, NBCommandParams analyzerParams) {
+ super(parent, NBLabels.forKV());
this.config = getConfig(analyzerParams);
this.journal = initJournal();
}
@@ -69,11 +72,11 @@ public abstract class SimFramePlanner {
stdout.println(frameParams);
applyParams(frameParams,flywheel);
capture.startWindow();
- capture.awaitSteadyState();
-// applyParams(frameParams,flywheel);
-// capture.restartWindow();
-//// controller.waitMillis(500);
-// capture.awaitSteadyState();
+ if (this instanceof HoldAndSample has) {
+ has.holdAndSample(capture);
+ } else {
+ capture.awaitSteadyState();
+ }
capture.stopWindow();
journal.record(frameParams, capture.last());
stdout.println(capture.last());
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java
index 631b8c598..aab60d2e3 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StabilityDetector.java
@@ -178,9 +178,9 @@ public class StabilityDetector implements Runnable {
double value = source.getAsDouble();
apply(value);
double stabilityFactor = computeStability();
-// if (Double.isNaN(stabilityFactor)) {
-// System.out.println("NaN stability factor");
-// }
+ if (Double.isNaN(stabilityFactor)) {
+ throw new RuntimeException("NaN stability factor:" + this);
+ }
if (stabilityFactor > threshold) {
detectionTime = ((double) (nextCheckAt - startedAt)) / 1000d;
diff --git a/nbr/src/main/resources/examples/bindings_vectors.yaml b/nbr/src/main/resources/examples/bindings_vectors.yaml
index a2413470c..20798d8f4 100644
--- a/nbr/src/main/resources/examples/bindings_vectors.yaml
+++ b/nbr/src/main/resources/examples/bindings_vectors.yaml
@@ -21,7 +21,7 @@ bindings:
# create a simple 2-d vector from a step function over the unit interval
- # of 10 steps (the maximum number of characters per digit)
+ # of 10 maxstep (the maximum number of characters per digit)
v2d: DoubleVectors('0-2*2')
# use Stringify() to visualize the value of numeric array types
From 74420684ee02dec66fae1c20d28d81bebb134e1f Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Wed, 20 Dec 2023 15:29:04 +0000
Subject: [PATCH 011/120] fix: upgrade
org.glassfish.jersey.media:jersey-media-json-jackson from 3.1.3 to 3.1.4
Snyk has created this PR to upgrade org.glassfish.jersey.media:jersey-media-json-jackson from 3.1.3 to 3.1.4.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/99d5f5ce-a2bd-4e05-9eff-86de84bd0b9e?utm_source=github&utm_medium=referral&page=upgrade-pr
---
docsys/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docsys/pom.xml b/docsys/pom.xml
index be1e9778a..b04a5af3c 100644
--- a/docsys/pom.xml
+++ b/docsys/pom.xml
@@ -94,7 +94,7 @@
org.glassfish.jersey.media
jersey-media-json-jackson
- 3.1.3
+ 3.1.4
From dd250b37dd57dcfc4d22349b6ae84600a8ef73f0 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Wed, 20 Dec 2023 18:30:16 +0000
Subject: [PATCH 012/120] fix: upgrade org.graalvm.sdk:graal-sdk from 23.0.1 to
23.1.1
Snyk has created this PR to upgrade org.graalvm.sdk:graal-sdk from 23.0.1 to 23.1.1.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.graalvm.sdk/graal-sdk/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/024e32ec-7f80-485c-b7bf-f69d45f933ce?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 688644d24..f37f03142 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -361,7 +361,7 @@
org.graalvm.sdk
graal-sdk
- 23.0.1
+ 23.1.1
org.graalvm.js
From 65a2eeaa3b6836f0511335a24f8d93456979d23c Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Wed, 20 Dec 2023 18:30:20 +0000
Subject: [PATCH 013/120] fix: upgrade com.amazonaws:aws-java-sdk-s3 from
1.12.596 to 1.12.598
Snyk has created this PR to upgrade com.amazonaws:aws-java-sdk-s3 from 1.12.596 to 1.12.598.
See this package in Maven Repository:
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/024e32ec-7f80-485c-b7bf-f69d45f933ce?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 688644d24..4332bee76 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -290,7 +290,7 @@
com.amazonaws
aws-java-sdk-s3
- 1.12.596
+ 1.12.598
com.elega9t
From 32c4550d67273e3fce3d2eb123509cfaf2c9c908 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Wed, 20 Dec 2023 19:00:19 +0000
Subject: [PATCH 014/120] fix: upgrade org.apache.commons:commons-lang3 from
3.13.0 to 3.14.0
Snyk has created this PR to upgrade org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/bb64938c-e68b-4c38-9e2f-d9d8336c07ee?utm_source=github&utm_medium=referral&page=upgrade-pr
---
adapter-kafka/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/adapter-kafka/pom.xml b/adapter-kafka/pom.xml
index a1a8da860..6336d46f2 100644
--- a/adapter-kafka/pom.xml
+++ b/adapter-kafka/pom.xml
@@ -55,7 +55,7 @@
org.apache.commons
commons-lang3
- 3.13.0
+ 3.14.0
From d63396355a81c95b27d09ecfb0df487397055e7c Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Wed, 20 Dec 2023 19:41:37 +0000
Subject: [PATCH 015/120] fix: upgrade org.graalvm.js:js from 23.0.1 to 23.0.2
Snyk has created this PR to upgrade org.graalvm.js:js from 23.0.1 to 23.0.2.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.graalvm.js/js/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/6a966a50-08ee-405a-ae9a-1cfab95ff2c5?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 688644d24..8472009ce 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -366,7 +366,7 @@
org.graalvm.js
js
- 23.0.1
+ 23.0.2
runtime
From 0431c4be6e064e9e7052d0fae0e0e66abc84c7da Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:16:26 -0600
Subject: [PATCH 016/120] typo fixes
---
.../simframe/optimizers/planners/rcurve/RCurveConfig.java | 6 +++---
.../simframe/optimizers/planners/rcurve/RCurvePlanner.java | 6 +++---
nbr/src/main/resources/examples/bindings_vectors.yaml | 2 +-
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
index 34abc7558..d403e06a9 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurveConfig.java
@@ -23,8 +23,8 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
* should be reduced down to the minimum set needed.
*/
public record RCurveConfig(
- double maxrate,
- int maxstep,
+ double max_rate,
+ int max_step,
double min_sample_seconds
) {
public RCurveConfig(NBCommandParams params) {
@@ -36,7 +36,7 @@ public record RCurveConfig(
}
double rateForStep(int step) {
- return ((double)step/(double) maxstep)*maxrate;
+ return ((double)step/(double) max_step)* max_rate;
}
}
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
index f3118f5a7..81eed7c4a 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
@@ -47,7 +47,7 @@ public class RCurvePlanner extends SimFramePlanner journal) {
SimFrame last = journal.last();
int nextStep = last.params().step() +1;
- if (nextStep<=config.maxstep()) {
- return new RCurveFrameParams(config.rateForStep(nextStep),nextStep,config.maxstep(),"Advancing to step " + nextStep);
+ if (nextStep<=config.max_step()) {
+ return new RCurveFrameParams(config.rateForStep(nextStep),nextStep,config.max_step(),"Advancing to step " + nextStep);
} else {
return null;
}
diff --git a/nbr/src/main/resources/examples/bindings_vectors.yaml b/nbr/src/main/resources/examples/bindings_vectors.yaml
index 20798d8f4..95a034d69 100644
--- a/nbr/src/main/resources/examples/bindings_vectors.yaml
+++ b/nbr/src/main/resources/examples/bindings_vectors.yaml
@@ -21,7 +21,7 @@ bindings:
# create a simple 2-d vector from a step function over the unit interval
- # of 10 maxstep (the maximum number of characters per digit)
+ # of 10 max_step (the maximum number of characters per digit)
v2d: DoubleVectors('0-2*2')
# use Stringify() to visualize the value of numeric array types
From cbc9e5484f4146c1bc1361324a1c2f0d125ed87f Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:16:28 -0600
Subject: [PATCH 017/120] remove dead code
---
.../adapters/api/activityimpl/BaseOpDispenser.java | 1 -
.../activityapi/core/ComponentActivityInstrumentation.java | 6 ------
.../nosqlbench/engine/api/activityimpl/motor/CoreMotor.java | 3 ---
.../api/activityimpl/uniform/actions/StandardAction.java | 5 -----
4 files changed, 15 deletions(-)
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
index f514c240d..a171a1bdb 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
@@ -126,7 +126,6 @@ public abstract class BaseOpDispenser extends NBBaseComponent i
Binding variables = new Binding();
Map initBlocks = op.getTemplateMap().takeAsNamedTemplates(VERIFIER_INIT);
- List> verifierInitFunctions = new ArrayList<>();
try {
initBlocks.forEach((initName, stringTemplate) -> {
GroovyCycleFunction> initFunction =
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java
index c371f8109..36b26cce9 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java
@@ -41,7 +41,6 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
private NBMetricTimer cyclesServiceTimer;
private NBMetricTimer cyclesResponseTimer;
private NBMetricCounter pendingOpsCounter;
- private NBMetricCounter opTrackerBlockedCounter;
private NBMetricTimer bindTimer;
private NBMetricTimer executeTimer;
private NBMetricTimer resultTimer;
@@ -120,11 +119,6 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
return pendingOpsCounter;
}
- @Override
- public Counter getOrCreateOpTrackerBlockedCounter() {
- return opTrackerBlockedCounter;
- }
-
@Override
public Timer getOrCreateBindTimer() {
return bindTimer;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java
index 94a764651..82d76c614 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java
@@ -75,8 +75,6 @@ public class CoreMotor implements ActivityDefObserver, Motor, Stoppable {
private int stride = 1;
private OpTracker opTracker;
- private Counter optrackerBlockCounter;
-
/**
* Create an ActivityMotor.
@@ -194,7 +192,6 @@ public class CoreMotor implements ActivityDefObserver, Motor, Stoppable {
inputTimer = activity.getInstrumentation().getOrCreateInputTimer();
strideServiceTimer = activity.getInstrumentation().getOrCreateStridesServiceTimer();
stridesResponseTimer = activity.getInstrumentation().getStridesResponseTimerOrNull();
- optrackerBlockCounter = activity.getInstrumentation().getOrCreateOpTrackerBlockedCounter();
strideRateLimiter = activity.getStrideLimiter();
cycleRateLimiter = activity.getCycleLimiter();
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
index 3e0b2eedc..aad0e8d51 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
@@ -48,9 +48,6 @@ import java.util.concurrent.TimeUnit;
*/
public class StandardAction, R extends Op> implements SyncAction, ActivityDefObserver {
private final static Logger logger = LogManager.getLogger("ACTION");
-
- private final A activity;
- private final int slot;
private final Timer executeTimer;
private final Histogram triesHistogram;
private final Timer resultSuccessTimer;
@@ -62,9 +59,7 @@ public class StandardAction , R extends Op> impl
private final Timer verifierTimer;
public StandardAction(A activity, int slot) {
- this.activity = activity;
this.opsequence = activity.getOpSequence();
- this.slot = slot;
this.maxTries = activity.getMaxTries();
bindTimer = activity.getInstrumentation().getOrCreateBindTimer();
executeTimer = activity.getInstrumentation().getOrCreateExecuteTimer();
From 0c77a2fe9e233119d8d9c1850131a2481db9e335 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:16:31 -0600
Subject: [PATCH 018/120] factor client metrics checker into component
attachment
---
.../core/lifecycle/session/NBSession.java | 98 +------
.../session/NBSessionSafetyMetrics.java | 253 ++++++++++++++++++
2 files changed, 255 insertions(+), 96 deletions(-)
create mode 100644 engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSessionSafetyMetrics.java
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
index e7cab4a5e..0b26dc7d1 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
@@ -16,7 +16,6 @@
package io.nosqlbench.engine.core.lifecycle.session;
-import io.nosqlbench.nb.api.components.core.NBComponentProps;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
@@ -45,7 +44,7 @@ import java.util.function.Function;
*/
public class NBSession extends NBBaseComponent implements Function, ExecutionResult>, NBTokenWords {
private final static Logger logger = LogManager.getLogger(NBSession.class);
- private final ClientSystemMetricChecker clientMetricChecker;
+// private final ClientSystemMetricChecker clientMetricChecker;
private final Map containers = new ConcurrentHashMap<>();
@@ -64,31 +63,11 @@ public class NBSession extends NBBaseComponent implements Function, Ex
labelContext.getLabels()
.and("session", sessionName)
);
-
- this.clientMetricChecker = new ClientSystemMetricChecker(this, NBLabels.forKV(), 10);
- registerLoadAvgMetrics();
- registerMemInfoMetrics();
-// registerDiskStatsMetrics();
- registerNetworkInterfaceMetrics();
- registerCpuStatMetrics();
- clientMetricChecker.start();
+ new NBSessionSafetyMetrics(this);
bufferOrphanedMetrics = true;
}
- /**
- * Notes on scenario names:
- *
- * If none are provided, then all cmds are implicitly allocated to the "default" scenario.
- * If the name "default" is provided directly, then this is considered an error.
- * Otherwise, the most recently set scenario name is the one in which all following commands are run.
- *
- *
- *
- * @param cmds
- * the function argument
- * @return
- */
public ExecutionResult apply(List cmds) {
// TODO: add container closing command
@@ -124,79 +103,6 @@ public class NBSession extends NBBaseComponent implements Function, Ex
}
- private void registerLoadAvgMetrics() {
- LoadAvgReader reader = new LoadAvgReader();
- if (!reader.fileExists())
- return;
-
- NBFunctionGauge load1m = create().gauge("loadavg_1min", reader::getOneMinLoadAverage);
- clientMetricChecker.addMetricToCheck(load1m, 50.0);
-
- NBFunctionGauge load5m = create().gauge("loadavg_5min", reader::getFiveMinLoadAverage);
- clientMetricChecker.addMetricToCheck(load5m, 50.0);
-
- NBFunctionGauge load15m = create().gauge("loadavg_15min", reader::getFifteenMinLoadAverage);
- clientMetricChecker.addMetricToCheck(load15m, 50.0);
- // add checking for CPU load averages; TODO: Modify thresholds
-
- }
-
- private void registerMemInfoMetrics() {
- MemInfoReader reader = new MemInfoReader();
- if (!reader.fileExists())
- return;
-
- NBMetricGauge memTotalGauge = create().gauge("mem_total", reader::getMemTotalkB);
- NBMetricGauge memUsedGauge = create().gauge("mem_used", reader::getMemUsedkB);
- NBMetricGauge memFreeGauge = create().gauge("mem_free", reader::getMemFreekB);
- NBMetricGauge memAvailableGauge = create().gauge("mem_avaialble", reader::getMemAvailablekB);
- NBMetricGauge memCachedGauge = create().gauge("mem_cache", reader::getMemCachedkB);
- NBMetricGauge memBufferedGauge = create().gauge("mem_buffered", reader::getMemBufferskB);
- // add checking for percent memory used at some given time; TODO: Modify percent threshold
- clientMetricChecker.addRatioMetricToCheck(memUsedGauge, memTotalGauge, 90.0, false);
-
- NBMetricGauge swapTotalGauge = create().gauge("swap_total", reader::getSwapTotalkB);
- NBMetricGauge swapFreeGauge = create().gauge("swap_free", reader::getSwapFreekB);
- NBMetricGauge swapUsedGauge = create().gauge("swap_used", reader::getSwapUsedkB);
- }
-
- private void registerDiskStatsMetrics() {
- DiskStatsReader reader = new DiskStatsReader();
- if (!reader.fileExists())
- return;
-
- for (String device : reader.getDevices()) {
- create().gauge(device + "_transactions", () -> reader.getTransactionsForDevice(device));
- create().gauge(device + "_kB_read", () -> reader.getKbReadForDevice(device));
- create().gauge(device + "_kB_written", () -> reader.getKbWrittenForDevice(device));
- }
- }
-
- private void registerNetworkInterfaceMetrics() {
- NetDevReader reader = new NetDevReader();
- if (!reader.fileExists())
- return;
- for (String iface : reader.getInterfaces()) {
- create().gauge(iface + "_rx_bytes", () -> reader.getBytesReceived(iface));
- create().gauge(iface + "_rx_packets", () -> reader.getPacketsReceived(iface));
- create().gauge(iface + "_tx_bytes", () -> reader.getBytesTransmitted(iface));
- create().gauge(iface + "_tx_packets", () -> reader.getPacketsTransmitted(iface));
- }
- }
-
- private void registerCpuStatMetrics() {
- StatReader reader = new StatReader();
- if (!reader.fileExists())
- return;
- NBMetricGauge cpuUserGauge = create().gauge("cpu_user", reader::getUserTime);
- NBMetricGauge cpuSystemGauge = create().gauge("cpu_system", reader::getSystemTime);
- NBMetricGauge cpuIdleGauge = create().gauge("cpu_idle", reader::getIdleTime);
- NBMetricGauge cpuIoWaitGauge = create().gauge("cpu_iowait", reader::getIoWaitTime);
- NBMetricGauge cpuTotalGauge = create().gauge("cpu_total", reader::getTotalTime);
- // add checking for percent of time spent in user space; TODO: Modify percent threshold
- clientMetricChecker.addRatioMetricToCheck(cpuUserGauge, cpuTotalGauge, 50.0, true);
- }
-
private NBBufferedContainer getContext(String name) {
return containers.computeIfAbsent(
name,
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSessionSafetyMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSessionSafetyMetrics.java
new file mode 100644
index 000000000..e8a9d50c1
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSessionSafetyMetrics.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.engine.core.lifecycle.session;
+
+import io.nosqlbench.engine.core.clientload.*;
+import io.nosqlbench.nb.api.components.core.NBBaseComponent;
+import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.components.core.NBComponentMetrics;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
+import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
+import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
+import io.nosqlbench.nb.api.labels.NBLabels;
+
+public class NBSessionSafetyMetrics extends NBBaseComponent {
+
+ public NBSessionSafetyMetrics(NBSession parent) {
+ super(parent, NBLabels.forKV());
+ ClientSystemMetricChecker metricsChecker = registerSessionSafetyMetrics(parent);
+ metricsChecker.start();
+ }
+
+ private ClientSystemMetricChecker registerSessionSafetyMetrics(NBSession nbSession) {
+ ClientSystemMetricChecker metricsChecker = new ClientSystemMetricChecker(
+ this,
+ NBLabels.forKV(),
+ 10
+ );
+ registerLoadAvgMetrics(metricsChecker);
+ registerMemInfoMetrics(metricsChecker);
+// registerDiskStatsMetrics();
+ registerNetworkInterfaceMetrics(metricsChecker);
+ registerCpuStatMetrics(metricsChecker);
+ return metricsChecker;
+ }
+
+ private void registerCpuStatMetrics(ClientSystemMetricChecker metricsChecker) {
+ StatReader reader = new StatReader();
+ if (!reader.fileExists())
+ return;
+ NBMetricGauge cpuUserGauge = create().gauge(
+ "cpu_user",
+ reader::getUserTime,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge cpuSystemGauge = create().gauge(
+ "cpu_system",
+ reader::getSystemTime,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge cpuIdleGauge = create().gauge(
+ "cpu_idle",
+ reader::getIdleTime,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge cpuIoWaitGauge = create().gauge(
+ "cpu_iowait",
+ reader::getIoWaitTime,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge cpuTotalGauge = create().gauge(
+ "cpu_total",
+ reader::getTotalTime,
+ MetricCategory.Internals,
+ ""
+ );
+ // add checking for percent of time spent in user space; TODO: Modify percent threshold
+ metricsChecker.addRatioMetricToCheck(
+ cpuUserGauge,
+ cpuTotalGauge,
+ 50.0,
+ true
+ );
+ }
+
+ private void registerDiskStatsMetrics(ClientSystemMetricChecker metricsChecker) {
+ DiskStatsReader reader = new DiskStatsReader();
+ if (!reader.fileExists())
+ return;
+
+ for (String device : reader.getDevices()) {
+ create().gauge(
+ device + "_transactions",
+ () -> reader.getTransactionsForDevice(device),
+ MetricCategory.Internals,
+ ""
+ );
+ create().gauge(device + "_kB_read",
+ () -> reader.getKbReadForDevice(device),
+ MetricCategory.Internals,
+ ""
+ );
+ create().gauge(device + "_kB_written",
+ () -> reader.getKbWrittenForDevice(device),
+ MetricCategory.Internals,
+ ""
+ );
+ }
+ }
+
+ private void registerNetworkInterfaceMetrics(ClientSystemMetricChecker metricsChecker) {
+ NetDevReader reader = new NetDevReader();
+ if (!reader.fileExists())
+ return;
+ for (String iface : reader.getInterfaces()) {
+ create().gauge(
+ iface + "_rx_bytes",
+ () -> reader.getBytesReceived(iface),
+ MetricCategory.Internals,
+ ""
+ );
+ create().gauge(
+ iface + "_rx_packets",
+ () -> reader.getPacketsReceived(iface),
+ MetricCategory.Internals,
+ ""
+ );
+ create().gauge(
+ iface + "_tx_bytes",
+ () -> reader.getBytesTransmitted(iface),
+ MetricCategory.Internals,
+ ""
+ );
+ create().gauge(
+ iface + "_tx_packets",
+ () -> reader.getPacketsTransmitted(iface),
+ MetricCategory.Internals,
+ ""
+ );
+ }
+ }
+
+ private void registerLoadAvgMetrics(ClientSystemMetricChecker metricsChecker) {
+ LoadAvgReader reader = new LoadAvgReader();
+ if (!reader.fileExists())
+ return;
+
+ NBFunctionGauge load1m = create().gauge(
+ "loadavg_1min",
+ reader::getOneMinLoadAverage,
+ MetricCategory.Internals,
+ "the 1 minute load average of the test client client"
+ );
+ metricsChecker.addMetricToCheck(load1m, 50.0);
+
+ NBFunctionGauge load5m = create().gauge(
+ "loadavg_5min",
+ reader::getFiveMinLoadAverage,
+ MetricCategory.Internals,
+ "the 5 minute load average of the test client client"
+ );
+ metricsChecker.addMetricToCheck(load5m, 50.0);
+
+ NBFunctionGauge load15m = create().gauge(
+ "loadavg_15min",
+ reader::getFifteenMinLoadAverage,
+ MetricCategory.Internals,
+ "the 15 minute load average of the test client"
+ );
+ metricsChecker.addMetricToCheck(load15m, 50.0);
+ // add checking for CPU load averages; TODO: Modify thresholds
+
+ }
+
+ private void registerMemInfoMetrics(ClientSystemMetricChecker metricsChecker) {
+ MemInfoReader reader = new MemInfoReader();
+ if (!reader.fileExists())
+ return;
+
+ NBMetricGauge memTotalGauge = create().gauge(
+ "mem_total",
+ reader::getMemTotalkB,
+ MetricCategory.Internals,
+ ""
+
+ );
+ NBMetricGauge memUsedGauge = create().gauge(
+ "mem_used",
+ reader::getMemUsedkB,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge memFreeGauge = create().gauge(
+ "mem_free",
+ reader::getMemFreekB,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge memAvailableGauge = create().gauge(
+ "mem_available",
+ reader::getMemAvailablekB,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge memCachedGauge = create().gauge(
+ "mem_cache",
+ reader::getMemCachedkB,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge memBufferedGauge = create().gauge(
+ "mem_buffered",
+ reader::getMemBufferskB,
+ MetricCategory.Internals,
+ ""
+ );
+ // add checking for percent memory used at some given time; TODO: Modify percent threshold
+ metricsChecker.addRatioMetricToCheck(
+ memUsedGauge,
+ memTotalGauge,
+ 90.0,
+ false
+ );
+
+ NBMetricGauge swapTotalGauge = create().gauge(
+ "swap_total",
+ reader::getSwapTotalkB,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge swapFreeGauge = create().gauge(
+ "swap_free",
+ reader::getSwapFreekB,
+ MetricCategory.Internals,
+ ""
+ );
+ NBMetricGauge swapUsedGauge = create().gauge(
+ "swap_used",
+ reader::getSwapUsedkB,
+ MetricCategory.Internals,
+ ""
+ );
+ }
+
+
+}
From 5db3988e22e5d3af5fcc7b56f6b57824c9685006 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:16:34 -0600
Subject: [PATCH 019/120] backfill missing metric source
---
.../nosqlbench/engine/api/activityimpl/input/AtomicInput.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
index 85db5bde1..b76efd947 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
@@ -71,11 +71,11 @@ public class AtomicInput extends NBBaseComponent implements Input, ActivityDefOb
}
private double getTotalRecycles() {
- return 0.0d;
+ return ((double)this.recycles_max.get())-((double)this.recycles_min.get());
}
private double getTotalCycles() {
- return 0.0d;
+ return ((double)this.cycles_max.get())-((double)this.cycles_min.get());
}
@Override
From b62c62314327aa52eb2a6dbd741cbfcd081c7682 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:16:37 -0600
Subject: [PATCH 020/120] add notes for later
---
.../engine/api/activityimpl/uniform/actions/StandardAction.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
index aad0e8d51..f5a09523f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/actions/StandardAction.java
@@ -105,7 +105,7 @@ public class StandardAction, R extends Op> impl
throw new RuntimeException("The op implementation did not implement any active logic. Implement " +
"one of [RunnableOp, CycleOp, or ChainingOp]");
}
-
+ // TODO: break out validation timer from execute
try (Timer.Context ignored = verifierTimer.time()) {
CycleFunction verifier = dispenser.getVerifier();
try {
From 274b5b119b93a9f09c6196b5779bd45267adda4d Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:16:40 -0600
Subject: [PATCH 021/120] add docs to metrics construction
---
.../adapter/amqp/util/AmqpAdapterMetrics.java | 43 +++++-
.../opdispensers/Cqld4BaseOpDispenser.java | 22 ++-
.../adapter/diag/optasks/DiagTask_gauge.java | 8 +-
.../adapter/http/core/HttpMetrics.java | 8 +-
.../kafka/util/KafkaAdapterMetrics.java | 57 ++++++--
.../pulsar/util/PulsarAdapterMetrics.java | 132 ++++++++++++++----
.../adapter/s4j/util/S4JAdapterMetrics.java | 19 ++-
.../api/activityimpl/BaseOpDispenser.java | 22 ++-
.../api/metrics/ThreadLocalNamedTimers.java | 8 +-
.../core/ActivityInstrumentation.java | 2 -
.../ComponentActivityInstrumentation.java | 84 +++++++++--
.../ratelimits/simrate/SimRate.java | 23 ++-
.../api/activityimpl/input/AtomicInput.java | 57 ++++++--
.../uniform/StandardActivity.java | 19 ++-
.../api/metrics/ExceptionCountMetrics.java | 13 +-
...tionExpectedResultVerificationMetrics.java | 13 +-
.../api/metrics/ExceptionHistoMetrics.java | 15 +-
.../api/metrics/ExceptionMeterMetrics.java | 11 +-
.../api/metrics/ExceptionTimerMetrics.java | 15 +-
.../lifecycle/activity/ActivityExecutor.java | 8 +-
.../core/lifecycle/session/NBSession.java | 1 +
.../core/NBBaseComponentMetrics.java | 3 +-
.../components/core/NBComponentMetrics.java | 3 +-
.../nb/api/components/core/NBCreators.java | 39 +++---
.../metrics/instruments/MetricCategory.java | 78 +++++++++++
.../metrics/wrappers/RelevancyMeasures.java | 3 +-
.../AttachedMetricsSummaryReporterTest.java | 37 ++++-
.../core/NBBaseComponentMetricsTest.java | 25 +++-
.../core/NBComponentServicesTest.java | 15 +-
.../components/core/NBMetricsQueryTest.java | 19 ++-
.../planners/rcurve/RCurvePlanner.java | 28 +++-
.../core/script/MetricsIntegrationTest.java | 8 +-
32 files changed, 698 insertions(+), 140 deletions(-)
create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java
diff --git a/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/util/AmqpAdapterMetrics.java b/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/util/AmqpAdapterMetrics.java
index c816ad18a..9f5f00a78 100644
--- a/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/util/AmqpAdapterMetrics.java
+++ b/adapter-amqp/src/main/java/io/nosqlbench/adapter/amqp/util/AmqpAdapterMetrics.java
@@ -20,6 +20,7 @@ import com.codahale.metrics.Counter;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import io.nosqlbench.adapter.amqp.dispensers.AmqpBaseOpDispenser;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager;
@@ -55,17 +56,45 @@ public class AmqpAdapterMetrics {
public void initS4JAdapterInstrumentation() {
// Histogram metrics
- messageSizeHistogram = amqpBaseOpDispenser.create().histogram("message_size");
+ messageSizeHistogram = amqpBaseOpDispenser.create().histogram(
+ "amqp_message_size",
+ MetricCategory.Driver,
+ "AMQP message size"
+ );
// Timer metrics
- bindTimer = amqpBaseOpDispenser.create().timer("bind");
- executeTimer = amqpBaseOpDispenser.create().timer("execute");
+ bindTimer = amqpBaseOpDispenser.create().timer(
+ "amqp_bind",
+ MetricCategory.Driver,
+ "AMQP bind timer"
+ );
+ executeTimer = amqpBaseOpDispenser.create().timer(
+ "amqp_execute",
+ MetricCategory.Driver,
+ "AMQP execute timer"
+ );
// End-to-end metrics
// Latency
- e2eMsgProcLatencyHistogram = amqpBaseOpDispenser.create().histogram("e2e_msg_latency");
+ e2eMsgProcLatencyHistogram = amqpBaseOpDispenser.create().histogram(
+ "amqp_e2e_msg_latency",
+ MetricCategory.Driver,
+ "AMQP end-to-end message processing latency"
+ );
// Error metrics
- msgErrOutOfSeqCounter = amqpBaseOpDispenser.create().counter("err_msg_oos");
- msgErrLossCounter = amqpBaseOpDispenser.create().counter("err_msg_loss");
- msgErrDuplicateCounter = amqpBaseOpDispenser.create().counter("err_msg_dup");
+ msgErrOutOfSeqCounter = amqpBaseOpDispenser.create().counter(
+ "amqp_err_msg_oos",
+ MetricCategory.Driver,
+ "AMQP out-of-sequence error count"
+ );
+ msgErrLossCounter = amqpBaseOpDispenser.create().counter(
+ "amqp_err_msg_loss",
+ MetricCategory.Driver,
+ "AMQP lost message error count"
+ );
+ msgErrDuplicateCounter = amqpBaseOpDispenser.create().counter(
+ "err_msg_dup",
+ MetricCategory.Driver,
+ "AMQP duplicate message count"
+ );
}
public Timer getBindTimer() { return bindTimer; }
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4BaseOpDispenser.java b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4BaseOpDispenser.java
index 770a0eff9..1b9e17551 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4BaseOpDispenser.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/adapter/cqld4/opdispensers/Cqld4BaseOpDispenser.java
@@ -31,6 +31,7 @@ import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.templating.ParsedOp;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -57,9 +58,24 @@ public abstract class Cqld4BaseOpDispenser extends BaseOpDispenser, NBPar
}
logger.info("Registering gauge for diag task with labels:" + getParentLabels().getLabels() + " label:" + label);
- this.gauge=parent.create().gauge(label,() -> this.sampleValue);
+ this.gauge=parent.create().gauge(
+ label,
+ () -> this.sampleValue,
+ MetricCategory.Verification,
+ "a diagnostic gauge for the purposes of testing " + description()
+ );
}
@Override
diff --git a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java
index 7437bda6f..8cd4a301a 100644
--- a/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java
+++ b/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java
@@ -17,6 +17,7 @@
package io.nosqlbench.adapter.http.core;
import com.codahale.metrics.Histogram;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.core.NBComponent;
@@ -29,7 +30,12 @@ public class HttpMetrics implements NBLabeledElement {
public HttpMetrics(NBComponent parent, HttpSpace space) {
this.parent = parent;
this.space = space;
- statusCodeHistogram = parent.create().histogram("statuscode",space.getHdrDigits());
+ statusCodeHistogram = parent.create().histogram(
+ "statuscode",
+ space.getHdrDigits(),
+ MetricCategory.Payload,
+ "A histogram of status codes received by the HTTP client"
+ );
}
public String getName() {
diff --git a/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/util/KafkaAdapterMetrics.java b/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/util/KafkaAdapterMetrics.java
index 81c489a71..a3198c0aa 100644
--- a/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/util/KafkaAdapterMetrics.java
+++ b/adapter-kafka/src/main/java/io/nosqlbench/adapter/kafka/util/KafkaAdapterMetrics.java
@@ -20,8 +20,10 @@ import com.codahale.metrics.Counter;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import io.nosqlbench.adapter.kafka.dispensers.KafkaBaseOpDispenser;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
+import org.apache.kafka.common.Metric;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -50,37 +52,70 @@ public class KafkaAdapterMetrics {
public KafkaAdapterMetrics(final KafkaBaseOpDispenser kafkaBaseOpDispenser, final NBLabeledElement labeledParent) {
this.kafkaBaseOpDispenser = kafkaBaseOpDispenser;
- labels=labeledParent.getLabels().and("name",KafkaAdapterMetrics.class.getSimpleName());
+ labels = labeledParent.getLabels().and("name", KafkaAdapterMetrics.class.getSimpleName());
}
public void initS4JAdapterInstrumentation() {
// Histogram metrics
- messageSizeHistogram = kafkaBaseOpDispenser.create().histogram("message_size");
+ messageSizeHistogram = kafkaBaseOpDispenser.create().histogram(
+ "kafka_message_size",
+ MetricCategory.Payload,
+ "kafka message size"
+ );
// Timer metrics
bindTimer =
this.kafkaBaseOpDispenser.create().timer(
- "bind");
+ "kafka_bind",
+ MetricCategory.Payload,
+ "kafka bind timer");
executeTimer =
this.kafkaBaseOpDispenser.create().timer(
- "execute");
+ "kafka_execute",
+ MetricCategory.Payload,
+ "kafka execute timer"
+ );
// End-to-end metrics
// Latency
e2eMsgProcLatencyHistogram =
- kafkaBaseOpDispenser.create().histogram("e2e_msg_latency");
+ kafkaBaseOpDispenser.create().histogram(
+ "e2e_msg_latency",
+ MetricCategory.Driver,
+ "End-to-end kafka message latency"
+ );
// Error metrics
msgErrOutOfSeqCounter =
- kafkaBaseOpDispenser.create().counter("err_msg_oos");
+ kafkaBaseOpDispenser.create().counter(
+ "kafka_err_msg_oos",
+ MetricCategory.Driver,
+ "kafka Out-of-sequence errors"
+ );
msgErrLossCounter =
- kafkaBaseOpDispenser.create().counter("err_msg_loss");
+ kafkaBaseOpDispenser.create().counter(
+ "kafka_err_msg_loss",
+ MetricCategory.Driver,
+ "kafka message loss errors"
+ );
msgErrDuplicateCounter =
- kafkaBaseOpDispenser.create().counter( "err_msg_dup");
+ kafkaBaseOpDispenser.create().counter(
+ "kafka_err_msg_dup",
+ MetricCategory.Driver,
+ "kafka duplicate message errors"
+ );
}
- public Timer getBindTimer() { return bindTimer; }
- public Timer getExecuteTimer() { return executeTimer; }
- public Histogram getMessagesizeHistogram() { return messageSizeHistogram; }
+ public Timer getBindTimer() {
+ return bindTimer;
+ }
+
+ public Timer getExecuteTimer() {
+ return executeTimer;
+ }
+
+ public Histogram getMessagesizeHistogram() {
+ return messageSizeHistogram;
+ }
public Counter getMsgErrOutOfSeqCounter() {
return msgErrOutOfSeqCounter;
diff --git a/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/util/PulsarAdapterMetrics.java b/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/util/PulsarAdapterMetrics.java
index ae7bf6fb8..1e2d04c8a 100644
--- a/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/util/PulsarAdapterMetrics.java
+++ b/adapter-pulsar/src/main/java/io/nosqlbench/adapter/pulsar/util/PulsarAdapterMetrics.java
@@ -20,6 +20,7 @@ import com.codahale.metrics.Counter;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import io.nosqlbench.adapter.pulsar.dispensers.PulsarBaseOpDispenser;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.pulsar.client.api.Consumer;
@@ -66,22 +67,52 @@ public class PulsarAdapterMetrics {
public void initPulsarAdapterInstrumentation() {
// Counter metrics
msgErrOutOfSeqCounter =
- pulsarBaseOpDispenser.create().counter("err_msg_oos");
+ pulsarBaseOpDispenser.create().counter("pulsar_err_msg_oos",
+ MetricCategory.Driver,
+ "pulsar out-of-sequence error counter"
+ );
msgErrLossCounter =
- pulsarBaseOpDispenser.create().counter("err_msg_loss");
+ pulsarBaseOpDispenser.create().counter("pulsar_err_msg_loss",
+ MetricCategory.Driver,
+ "pulsar lost message error counter"
+ );
msgErrDuplicateCounter =
- pulsarBaseOpDispenser.create().counter("err_msg_dup");
+ pulsarBaseOpDispenser.create().counter("pulsar_err_msg_dup",
+ MetricCategory.Driver,
+ "pulsar duplicate message error counter"
+ );
// Histogram metrics
- messageSizeHistogram = pulsarBaseOpDispenser.create().histogram("message_size");
- e2eMsgProcLatencyHistogram = pulsarBaseOpDispenser.create().histogram("e2e_msg_latency");
- payloadRttHistogram = pulsarBaseOpDispenser.create().histogram("payload_rtt");
+ messageSizeHistogram = pulsarBaseOpDispenser.create().histogram("pulsar_message_size",
+ MetricCategory.Driver,
+ "pulsar message size"
+ );
+ e2eMsgProcLatencyHistogram = pulsarBaseOpDispenser.create().histogram("pulsar_e2e_msg_latency",
+ MetricCategory.Driver,
+ "pulsar end-to-end message latency"
+ );
+ payloadRttHistogram = pulsarBaseOpDispenser.create().histogram("pulsar_payload_rtt",
+ MetricCategory.Driver,
+ "pulsar payload round-trip-time"
+ );
// Timer metrics
- bindTimer = pulsarBaseOpDispenser.create().timer("bind");
- executeTimer = pulsarBaseOpDispenser.create().timer("execute");
- createTransactionTimer = pulsarBaseOpDispenser.create().timer("create_transaction");
- commitTransactionTimer = pulsarBaseOpDispenser.create().timer("commit_transaction");
+ bindTimer = pulsarBaseOpDispenser.create().timer("pulsar_bind",
+ MetricCategory.Driver,
+ "pulsar bind timer"
+ );
+ executeTimer = pulsarBaseOpDispenser.create().timer("pulsar_execute",
+ MetricCategory.Driver,
+ "pulsar execution timer"
+ );
+ createTransactionTimer = pulsarBaseOpDispenser.create().timer("pulsar_create_transaction",
+ MetricCategory.Driver,
+ "pulsar create transaction timer"
+ );
+ commitTransactionTimer = pulsarBaseOpDispenser.create().timer("pulsar_commit_transaction",
+ MetricCategory.Driver,
+ "pulsar commit transaction timer"
+ );
}
public Counter getMsgErrOutOfSeqCounter() {
@@ -154,12 +185,36 @@ public class PulsarAdapterMetrics {
public void registerProducerApiMetrics(final Producer> producer) {
- pulsarBaseOpDispenser.create().gauge("total_bytes_sent", PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalBytesSent() + s.getNumBytesSent()));
- pulsarBaseOpDispenser.create().gauge("total_msg_sent", PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalMsgsSent() + s.getNumMsgsSent()));
- pulsarBaseOpDispenser.create().gauge("total_send_failed", PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalSendFailed() + s.getNumSendFailed()));
- pulsarBaseOpDispenser.create().gauge("total_ack_received", PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalAcksReceived() + s.getNumAcksReceived()));
- pulsarBaseOpDispenser.create().gauge("send_bytes_rate", PulsarAdapterMetrics.producerSafeExtractMetric(producer, ProducerStats::getSendBytesRate));
- pulsarBaseOpDispenser.create().gauge("send_msg_rate", PulsarAdapterMetrics.producerSafeExtractMetric(producer, ProducerStats::getSendMsgsRate));
+ pulsarBaseOpDispenser.create().gauge(
+ "pulsar_total_bytes_sent",
+ PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalBytesSent() + s.getNumBytesSent()),
+ MetricCategory.Driver,
+ "pulsar total bytes sent"
+ );
+ pulsarBaseOpDispenser.create().gauge(
+ "pulsar_total_msg_sent",
+ PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalMsgsSent() + s.getNumMsgsSent()),
+ MetricCategory.Driver,
+ "pulsar total message sent"
+ );
+ pulsarBaseOpDispenser.create().gauge(
+ "pulsar_total_send_failed",
+ PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalSendFailed() + s.getNumSendFailed()),
+ MetricCategory.Driver,
+ "pulsar message send failures"
+ );
+ pulsarBaseOpDispenser.create().gauge("pulsar_total_ack_received", PulsarAdapterMetrics.producerSafeExtractMetric(producer, s -> (double) s.getTotalAcksReceived() + s.getNumAcksReceived()),
+ MetricCategory.Driver,
+ "pulsar total acknowledgements received"
+ );
+ pulsarBaseOpDispenser.create().gauge("pulsar_send_bytes_rate", PulsarAdapterMetrics.producerSafeExtractMetric(producer, ProducerStats::getSendBytesRate),
+ MetricCategory.Driver,
+ "pulsar rate of bytes sent"
+ );
+ pulsarBaseOpDispenser.create().gauge("pulsar_send_msg_rate", PulsarAdapterMetrics.producerSafeExtractMetric(producer, ProducerStats::getSendMsgsRate),
+ MetricCategory.Driver,
+ "pulsar rate of messages sent"
+ );
}
@@ -193,17 +248,38 @@ public class PulsarAdapterMetrics {
public void registerConsumerApiMetrics(final Consumer> consumer, final String pulsarApiMetricsPrefix) {
- pulsarBaseOpDispenser.create().gauge("total_bytes_recv",
- PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalBytesReceived() + s.getNumBytesReceived()));
- pulsarBaseOpDispenser.create().gauge("total_msg_recv",
- PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalMsgsReceived() + s.getNumMsgsReceived()));
- pulsarBaseOpDispenser.create().gauge("total_recv_failed",
- PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalReceivedFailed() + s.getNumReceiveFailed()));
- pulsarBaseOpDispenser.create().gauge("total_acks_sent",
- PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalAcksSent() + s.getNumAcksSent()));
- pulsarBaseOpDispenser.create().gauge("recv_bytes_rate",
- PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getRateBytesReceived()));
- pulsarBaseOpDispenser.create().gauge("recv_msg_rate",
- PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getRateMsgsReceived()));
+ pulsarBaseOpDispenser.create().gauge(
+ "pulsar_total_bytes_recv",
+ PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalBytesReceived() + s.getNumBytesReceived()),
+ MetricCategory.Driver,
+ "pulsar total bytes received"
+ );
+ pulsarBaseOpDispenser.create().gauge(
+ "pulsar_total_msg_recv",
+ PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalMsgsReceived() + s.getNumMsgsReceived()),
+ MetricCategory.Driver,
+ "pulsar total messages received"
+ );
+ pulsarBaseOpDispenser.create().gauge(
+ "pulsar_total_recv_failed",
+ PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalReceivedFailed() + s.getNumReceiveFailed()),
+ MetricCategory.Driver,
+ "pulsar total receive failures"
+ );
+ pulsarBaseOpDispenser.create().gauge("pulsar_total_acks_sent",
+ PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getTotalAcksSent() + s.getNumAcksSent()),
+ MetricCategory.Driver,
+ "pulsar total acknowledgements sent"
+ );
+ pulsarBaseOpDispenser.create().gauge("pulsar_recv_bytes_rate",
+ PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getRateBytesReceived()),
+ MetricCategory.Driver,
+ "pulsar rate of bytes received"
+ );
+ pulsarBaseOpDispenser.create().gauge("pulsar_recv_msg_rate",
+ PulsarAdapterMetrics.consumerSafeExtractMetric(consumer, s -> (double) s.getRateMsgsReceived()),
+ MetricCategory.Driver,
+ "pulsar rate of message received"
+ );
}
}
diff --git a/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/util/S4JAdapterMetrics.java b/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/util/S4JAdapterMetrics.java
index cb6205be9..3b0e968a3 100644
--- a/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/util/S4JAdapterMetrics.java
+++ b/adapter-s4j/src/main/java/io/nosqlbench/adapter/s4j/util/S4JAdapterMetrics.java
@@ -19,6 +19,7 @@ package io.nosqlbench.adapter.s4j.util;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import io.nosqlbench.adapter.s4j.dispensers.S4JBaseOpDispenser;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -38,11 +39,23 @@ public class S4JAdapterMetrics {
public void initS4JAdapterInstrumentation() {
// Histogram metrics
- this.messageSizeHistogram = s4jBaseOpDispenser.create().histogram("message_size");
+ this.messageSizeHistogram = s4jBaseOpDispenser.create().histogram(
+ "s4j_message_size",
+ MetricCategory.Driver,
+ "S4J message size"
+ );
// Timer metrics
- this.bindTimer = s4jBaseOpDispenser.create().timer("bind");
- this.executeTimer = s4jBaseOpDispenser.create().timer("execute");
+ this.bindTimer = s4jBaseOpDispenser.create().timer(
+ "s4j_bind",
+ MetricCategory.Driver,
+ "S4J bind timer"
+ );
+ this.executeTimer = s4jBaseOpDispenser.create().timer(
+ "s4j_execute",
+ MetricCategory.Driver,
+ "S4j execut timer"
+ );
}
public Timer getBindTimer() { return bindTimer; }
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
index a171a1bdb..8ed2d3932 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
@@ -23,6 +23,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.evalctx.*;
import io.nosqlbench.adapters.api.metrics.ThreadLocalNamedTimers;
import io.nosqlbench.adapters.api.templating.ParsedOp;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.errors.OpConfigError;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
@@ -99,7 +100,12 @@ public abstract class BaseOpDispenser extends NBBaseComponent i
verifiers = configureVerifiers(op);
this._verifier = CycleFunctions.of((a, b) -> a && b, verifiers, true);
this.tlVerifier = ThreadLocal.withInitial(_verifier::newInstance);
- this.verifierTimer = create().timer("verifier",3);
+ this.verifierTimer = create().timer(
+ "verifier",
+ 3,
+ MetricCategory.Verification,
+ "Time verifier execution, if any."
+ );
}
private CycleFunction cloneVerifiers() {
@@ -179,8 +185,18 @@ public abstract class BaseOpDispenser extends NBBaseComponent i
if (this.instrument) {
final int hdrDigits = pop.getStaticConfigOr("hdr_digits", 4);
- successTimer = create().timer("successfor_"+getOpName(),hdrDigits);
- errorTimer = create().timer("errorsfor_"+getOpName(),hdrDigits);
+ successTimer = create().timer(
+ "successfor_"+getOpName(),
+ hdrDigits,
+ MetricCategory.Core,
+ "Successful result timer for specific operation '" + pop.getName() + "'"
+ );
+ errorTimer = create().timer(
+ "errorsfor_"+getOpName(),
+ hdrDigits,
+ MetricCategory.Core,
+ "Errored result timer for specific operation '" + pop.getName() + "'"
+ );
}
}
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/metrics/ThreadLocalNamedTimers.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/metrics/ThreadLocalNamedTimers.java
index 4051ec961..d7d3e1997 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/metrics/ThreadLocalNamedTimers.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/metrics/ThreadLocalNamedTimers.java
@@ -19,6 +19,7 @@ package io.nosqlbench.adapters.api.metrics;
import com.codahale.metrics.Timer;
import com.codahale.metrics.Timer.Context;
import io.nosqlbench.adapters.api.templating.ParsedOp;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -41,7 +42,12 @@ public class ThreadLocalNamedTimers {
public static void addTimer(final ParsedOp pop, final String name) {
if (ThreadLocalNamedTimers.timers.containsKey("name"))
ThreadLocalNamedTimers.logger.warn("A timer named '{}' was already defined and initialized.", name);
- NBMetricTimer timer = pop.create().timer(name, 3);
+ NBMetricTimer timer = pop.create().timer(
+ name,
+ 3,
+ MetricCategory.User,
+ "User-provided metric, defined on op '" + pop.getName() + "'"
+ );
ThreadLocalNamedTimers.timers.put(name, timer);
}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityInstrumentation.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityInstrumentation.java
index 4a3ce0550..4f518442c 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityInstrumentation.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ActivityInstrumentation.java
@@ -77,8 +77,6 @@ public interface ActivityInstrumentation {
*/
Counter getOrCreatePendingOpCounter();
- Counter getOrCreateOpTrackerBlockedCounter();
-
/**
* The bind timer keeps track of how long it takes for NoSQLBench to create an instance
* of an executable operation, given the cycle. This is usually done by using an
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java
index 36b26cce9..689358959 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/ComponentActivityInstrumentation.java
@@ -21,6 +21,7 @@ import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricCounter;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricHistogram;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
@@ -57,33 +58,90 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
}
private void initMetrics() {
- readInputTimer=activity.create().timer("read_input",this.hdrdigits);
- stridesServiceTimer=activity.create().timer("strides",this.hdrdigits);
+ readInputTimer=activity.create().timer(
+ "read_input",
+ this.hdrdigits,
+ MetricCategory.Internals,
+ "measures overhead of acquiring a cycle range for an activity thread"
+ );
+ stridesServiceTimer=activity.create().timer(
+ "strides",
+ this.hdrdigits,
+ MetricCategory.Core,
+ "service timer for a stride, which is the same as the op sequence length by default"
+ );
if (null != activity.getStrideLimiter()) {
this.stridesResponseTimer = activity.create().timer(
"strides" + ComponentActivityInstrumentation.RESPONSE_TIME,
- hdrdigits
+ hdrdigits,
+ MetricCategory.Core,
+ "response timer for a stride, which is the same as the op sequence length by default;" +
+ " response timers include scheduling delays which occur when an activity falls behind its target rate"
);
}
this.cyclesServiceTimer = activity.create().timer(
"cycles"+ComponentActivityInstrumentation.SERVICE_TIME,
- hdrdigits
+ hdrdigits,
+ MetricCategory.Core,
+ "service timer for a cycle, including all of bind, execute, result and result_success;" +
+ " service timers measure the time between submitting a request and receiving the response"
);
if (null != activity.getCycleLimiter()) {
this.cyclesResponseTimer = activity.create().timer(
"cycles" + ComponentActivityInstrumentation.RESPONSE_TIME,
- hdrdigits
+ hdrdigits,
+ MetricCategory.Core,
+ "response timer for a cycle, including all of bind, execut, result and result_success;" +
+ " response timers include scheduling delays which occur when an activity falls behind its target rate"
);
}
- this.pendingOpsCounter=activity.create().counter("pending_ops");
- this.opTrackerBlockedCounter=activity.create().counter("optracker_blocked");
+ this.pendingOpsCounter=activity.create().counter(
+ "pending_ops",
+ MetricCategory.Core,
+ "Indicate the number of operations which have been started, but which have not been completed." +
+ " This starts "
+ );
- this.bindTimer = activity.create().timer("bind",hdrdigits);
- this.executeTimer = activity.create().timer("execute",hdrdigits);
- this.resultTimer = activity.create().timer("result",hdrdigits);
- this.resultSuccessTimer = activity.create().timer("result_success",hdrdigits);
- this.triesHistogram = activity.create().histogram("tries",hdrdigits);
- this.verifierTimer = activity.create().timer("verifier",hdrdigits);
+ this.bindTimer = activity.create().timer(
+ "bind",
+ hdrdigits,
+ MetricCategory.Core,
+ "Time the step within a cycle which binds generated data to an op template to synthesize an executable operation."
+ );
+
+ this.executeTimer = activity.create().timer(
+ "execute",
+ hdrdigits,
+ MetricCategory.Core,
+ "Time how long it takes to submit a request and receive a result, including reading the result in the client."
+ );
+ this.resultTimer = activity.create().timer(
+ "result",
+ hdrdigits,
+ MetricCategory.Core,
+ "Time how long it takes to submit a request, receive a result, including binding, reading results, " +
+ "and optionally verifying them, including all operations whether successful or not, for each attempted request."
+ );
+ this.resultSuccessTimer = activity.create().timer(
+ "result_success",
+ hdrdigits,
+ MetricCategory.Core,
+ "The execution time of successful operations, which includes submitting the operation, waiting for a response, and reading the result"
+ );
+ this.triesHistogram = activity.create().histogram(
+ "tries",
+ hdrdigits,
+ MetricCategory.Core,
+ "A histogram of all tries for an activity. Perfect results mean all quantiles return 1." +
+ " Slight saturation is indicated by p99 or p95 returning higher values." +
+ " Lower quantiles returning more than 1, or higher values at high quantiles indicate incremental overload."
+ );
+ this.verifierTimer = activity.create().timer(
+ "verifier",
+ hdrdigits,
+ MetricCategory.Verification,
+ "Time the execution of verifier code, if any"
+ );
}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
index 646c2554c..d93430e13 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
@@ -16,6 +16,7 @@
package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.core.NBComponent;
@@ -86,9 +87,25 @@ public class SimRate extends NBBaseComponent implements RateLimiter, Thread.Unca
}
private void initMetrics() {
- create().gauge("cycles_waittime",() -> (double)getWaitTimeDuration().get(ChronoUnit.NANOS));
- create().gauge("config_cyclerate", () -> spec.opsPerSec);
- create().gauge("config_burstrate", () -> spec.burstRatio);
+ create().gauge(
+ "cycles_waittime",
+ () -> (double)getWaitTimeDuration().get(ChronoUnit.NANOS),
+ MetricCategory.Core,
+ "The cumulative scheduling delay which accrues when" +
+ " an activity is not able to execute operations as fast as requested."
+ );
+ create().gauge(
+ "config_cyclerate",
+ () -> spec.opsPerSec,
+ MetricCategory.Config,
+ "The configured cycle rate in ops/s"
+ );
+ create().gauge(
+ "config_burstrate",
+ () -> spec.burstRatio,
+ MetricCategory.Config,
+ "the configured burst rate as a multiplier to the configured cycle rate. ex: 1.05 means 5% faster is allowed."
+ );
}
public long refill() {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
index b76efd947..6a7628195 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInput.java
@@ -23,6 +23,7 @@ import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver;
import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegment;
import io.nosqlbench.engine.api.activityapi.input.Input;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -60,14 +61,54 @@ public class AtomicInput extends NBBaseComponent implements Input, ActivityDefOb
super(parent);
this.activityDef = activityDef;
onActivityDefUpdate(activityDef);
- create().gauge("input_cycles_first",() -> (double) this.cycles_min.get());
- create().gauge("input_cycles_last",() -> (double) this.cycles_max.get());
- create().gauge("input_cycle",() -> (double) this.cycle_value.get());
- create().gauge("input_cycles_total",this::getTotalCycles);
- create().gauge("input_recycles_first",() -> (double) this.recycles_min.get());
- create().gauge("input_recycles_last",() -> (double) this.recycles_max.get());
- create().gauge("input_recycle",() -> (double) this.recycle_value.get());
- create().gauge("input_recycles_total",this::getTotalRecycles);
+ create().gauge(
+ "input_cycles_first",
+ () -> (double) this.cycles_min.get(),
+ MetricCategory.Config,
+ "The first cycle of the cycle interval, inclusive"
+ );
+ create().gauge(
+ "input_cycles_last",
+ () -> (double) this.cycles_max.get(),
+ MetricCategory.Config,
+ "The last cycle of the cycle interval, exclusive"
+ );
+ create().gauge(
+ "input_cycle",
+ () -> (double) this.cycle_value.get(),
+ MetricCategory.Core,
+ "The next input cycle that will be dispatched to a thread"
+ );
+ create().gauge(
+ "input_cycles_total",
+ this::getTotalCycles,
+ MetricCategory.Config,
+ "The total number of cycles to be executed"
+ );
+ create().gauge(
+ "input_recycles_first",
+ () -> (double) this.recycles_min.get(),
+ MetricCategory.Config,
+ "The first recycle value, inclusive"
+ );
+ create().gauge(
+ "input_recycles_last",
+ () -> (double) this.recycles_max.get(),
+ MetricCategory.Config,
+ "The last recycle value, exclusive"
+ );
+ create().gauge(
+ "input_recycle",
+ () -> (double) this.recycle_value.get(),
+ MetricCategory.Core,
+ "The next recycle value that will be dispatched once cycles are completed"
+ );
+ create().gauge(
+ "input_recycles_total",
+ this::getTotalRecycles,
+ MetricCategory.Config,
+ "The total number of recycles to be executed, within which each set of cycles will be executed"
+ );
}
private double getTotalRecycles() {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
index 62531a882..31cadabe1 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
@@ -26,6 +26,7 @@ import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.decorators.SyntheticOpTemplateProvider;
import io.nosqlbench.adapters.api.activityimpl.uniform.flowtypes.Op;
import io.nosqlbench.adapters.api.templating.ParsedOp;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.lifecycle.Shutdownable;
import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.config.standard.*;
@@ -155,11 +156,23 @@ public class StandardActivity extends SimpleActivity implements
}
create().gauge(
- "ops_pending", () -> this.getProgressMeter().getSummary().pending());
+ "ops_pending",
+ () -> this.getProgressMeter().getSummary().pending(),
+ MetricCategory.Core,
+ "The current number of operations which have not been dispatched for processing yet."
+ );
create().gauge(
- "ops_active", () -> this.getProgressMeter().getSummary().current());
+ "ops_active",
+ () -> this.getProgressMeter().getSummary().current(),
+ MetricCategory.Core,
+ "The current number of operations which have been dispatched for processing, but which have not yet completed."
+ );
create().gauge(
- "ops_complete", () -> this.getProgressMeter().getSummary().complete());
+ "ops_complete",
+ () -> this.getProgressMeter().getSummary().complete(),
+ MetricCategory.Core,
+ "The current number of operations which have been completed"
+ );
}
@Override
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java
index c7cab5177..153e5d405 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionCountMetrics.java
@@ -18,6 +18,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Counter;
import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import java.util.ArrayList;
import java.util.List;
@@ -33,7 +34,11 @@ public class ExceptionCountMetrics {
public ExceptionCountMetrics(final NBComponent parent) {
this.parent = parent;
- this.allerrors=parent.create().counter( "errors_ALL");
+ this.allerrors=parent.create().counter(
+ "errors_ALL",
+ MetricCategory.Errors,
+ "all errors, regardless of type type, for " + parent.description()
+ );
}
public void count(final String name) {
@@ -41,7 +46,11 @@ public class ExceptionCountMetrics {
if (null == c) synchronized (this.counters) {
c = this.counters.computeIfAbsent(
name,
- k -> parent.create().counter("errors_" + name)
+ k -> parent.create().counter(
+ "errors_" + name,
+ MetricCategory.Errors,
+ name + " errors for " + parent.description()
+ )
);
}
c.inc();
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java
index ccd8b212f..2b9b1e37d 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionExpectedResultVerificationMetrics.java
@@ -18,6 +18,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Counter;
import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
/**
@@ -30,8 +31,16 @@ public class ExceptionExpectedResultVerificationMetrics {
public ExceptionExpectedResultVerificationMetrics(final NBComponent parent) {
this.parent = parent;
- this.verificationRetries=parent.create().counter("verificationcounts_RETRIES");
- this.verificationErrors=parent.create().counter( "verificationcounts_ERRORS");
+ this.verificationRetries=parent.create().counter(
+ "verificationcounts_RETRIES",
+ MetricCategory.Verification,
+ "The number of retries used by the optional verifier logic for a given operation"
+ );
+ this.verificationErrors=parent.create().counter(
+ "verificationcounts_ERRORS",
+ MetricCategory.Verification,
+ "The number of errors encountered while attempting to verify the result of an soperation"
+ );
}
public void countVerificationRetries() {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java
index 4f60bf0c0..a3baa8f5b 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionHistoMetrics.java
@@ -19,6 +19,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Histogram;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import java.util.ArrayList;
import java.util.List;
@@ -38,7 +39,12 @@ public class ExceptionHistoMetrics {
public ExceptionHistoMetrics(final NBComponent parent, final ActivityDef activityDef) {
this.parent = parent;
this.activityDef = activityDef;
- this.allerrors = parent.create().histogram( "errorhistos_ALL", activityDef.getParams().getOptionalInteger("hdr_digits").orElse(4));
+ this.allerrors = parent.create().histogram(
+ "errorhistos_ALL",
+ activityDef.getParams().getOptionalInteger("hdr_digits").orElse(4),
+ MetricCategory.Errors,
+ "A histogram for all exceptions"
+ );
}
public void update(final String name, final long magnitude) {
@@ -46,7 +52,12 @@ public class ExceptionHistoMetrics {
if (null == h) synchronized (this.histos) {
h = this.histos.computeIfAbsent(
name,
- errName -> parent.create().histogram( "errorhistos_"+errName, this.activityDef.getParams().getOptionalInteger("hdr_digits").orElse(4))
+ errName -> parent.create().histogram(
+ "errorhistos_"+errName,
+ this.activityDef.getParams().getOptionalInteger("hdr_digits").orElse(4),
+ MetricCategory.Errors,
+ "error histogram for exception '" + errName + "'"
+ )
);
}
h.update(magnitude);
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java
index 16186b5a1..5ab207086 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionMeterMetrics.java
@@ -18,6 +18,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Meter;
import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import java.util.ArrayList;
import java.util.List;
@@ -33,7 +34,9 @@ public class ExceptionMeterMetrics {
public ExceptionMeterMetrics(final NBComponent parent) {
this.parent = parent;
- this.allerrors = parent.create().meter("errormeters_ALL");
+ this.allerrors = parent.create().meter("errormeters_ALL", MetricCategory.Errors,
+ "all errors, regardless of type type, for the parent " + parent.description()
+ );
}
public void mark(final String name) {
@@ -41,7 +44,11 @@ public class ExceptionMeterMetrics {
if (null == c) synchronized (this.meters) {
c = this.meters.computeIfAbsent(
name,
- k -> parent.create().meter("errormeters_" + name)
+ k -> parent.create().meter(
+ "errormeters_" + name,
+ MetricCategory.Errors,
+ name + " errors for " + parent.description()
+ )
);
}
c.mark();
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java
index 3edcd751e..0dfd79ca6 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/metrics/ExceptionTimerMetrics.java
@@ -19,6 +19,7 @@ package io.nosqlbench.engine.api.metrics;
import com.codahale.metrics.Timer;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import java.util.ArrayList;
import java.util.List;
@@ -38,14 +39,24 @@ public class ExceptionTimerMetrics {
this.activityDef = activityDef;
this.parentLabels = parent;
- this.allerrors=parent.create().timer("errortimers_ALL",4);
+ this.allerrors=parent.create().timer(
+ "errortimers_ALL",
+ 4,
+ MetricCategory.Errors,
+ "exception timers for all error types"
+ );
}
public void update(final String name, final long nanosDuration) {
Timer timer = this.timers.get(name);
if (null == timer) synchronized (this.timers) {
timer = this.timers.computeIfAbsent(
- name, k -> parentLabels.create().timer("errortimers_" + name, 3)
+ name, k -> parentLabels.create().timer(
+ "errortimers_" + name,
+ 3,
+ MetricCategory.Errors,
+ "exception timers for specific error '" + name + "'"
+ )
);
}
timer.update(nanosDuration, TimeUnit.NANOSECONDS);
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java
index bd6e9743d..7ad32521b 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/activity/ActivityExecutor.java
@@ -16,6 +16,7 @@
package io.nosqlbench.engine.core.lifecycle.activity;
import com.codahale.metrics.Gauge;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
@@ -463,7 +464,12 @@ public class ActivityExecutor implements NBLabeledElement, ParameterMap.Listener
// }
private void registerMetrics() {
- this.activity.create().gauge("threads",() -> (double) this.motors.size());
+ this.activity.create().gauge(
+ "threads",
+ () -> (double) this.motors.size(),
+ MetricCategory.Core,
+ "The current number of threads in activity " + this.description()
+ );
}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
index 0b26dc7d1..9e98c6e9f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
@@ -17,6 +17,7 @@
package io.nosqlbench.engine.core.lifecycle.session;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetrics.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetrics.java
index 48ab89a65..5576d2ffc 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetrics.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetrics.java
@@ -16,6 +16,7 @@
package io.nosqlbench.nb.api.components.core;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.tagging.TagFilter;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
@@ -28,7 +29,7 @@ public class NBBaseComponentMetrics implements NBComponentMetrics {
private final Lock lock = new ReentrantLock(false);
private final Map metrics = new ConcurrentHashMap<>();
@Override
- public String addComponentMetric(NBMetric metric) {
+ public String addComponentMetric(NBMetric metric, MetricCategory category, String requiredDescription) {
try {
lock.lock();
String openMetricsName = metric.getLabels().linearizeAsMetrics();
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentMetrics.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentMetrics.java
index 47689cbca..d4dac5844 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentMetrics.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBComponentMetrics.java
@@ -16,6 +16,7 @@
package io.nosqlbench.nb.api.components.core;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import java.util.Collection;
@@ -29,7 +30,7 @@ import java.util.List;
*
*/
public interface NBComponentMetrics {
- String addComponentMetric(NBMetric metric);
+ String addComponentMetric(NBMetric metric, MetricCategory category, String requiredDescription);
/**
* If you have the serialized open metrics name of a metric, you can ask for it
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
index e52502471..1e5577e98 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
@@ -53,63 +53,64 @@ public class NBCreators {
this.base = base;
}
- public NBMetricTimer timer(String metricFamilyName) {
- return timer(metricFamilyName,3);
+ public NBMetricTimer timer(String metricFamilyName, MetricCategory category, String description) {
+ return timer(metricFamilyName,3, category,description);
}
- public NBMetricTimer timer(String metricFamilyName, int hdrdigits) {
+
+ public NBMetricTimer timer(String metricFamilyName, int hdrdigits, MetricCategory category, String description) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
NBMetricTimer timer = new NBMetricTimer(labels, new DeltaHdrHistogramReservoir(labels, hdrdigits));
- base.addComponentMetric(timer);
+ base.addComponentMetric(timer, category, description);
return timer;
}
- public Meter meter(String metricFamilyName) {
+ public Meter meter(String metricFamilyName, MetricCategory category, String requiredDescription) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
NBMetricMeter meter = new NBMetricMeter(labels);
- base.addComponentMetric(meter);
+ base.addComponentMetric(meter, category, requiredDescription);
return meter;
}
- public NBMetricCounter counter(String metricFamilyName) {
+ public NBMetricCounter counter(String metricFamilyName, MetricCategory category, String requiredDescription) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
NBMetricCounter counter = new NBMetricCounter(labels);
- base.addComponentMetric(counter);
+ base.addComponentMetric(counter, category, requiredDescription);
return counter;
}
- public NBFunctionGauge gauge(String metricFamilyName, Supplier valueSource) {
+ public NBFunctionGauge gauge(String metricFamilyName, Supplier valueSource, MetricCategory category, String requiredDescription) {
NBFunctionGauge gauge = new NBFunctionGauge(base, valueSource, metricFamilyName);
- base.addComponentMetric(gauge);
+ base.addComponentMetric(gauge, category, requiredDescription);
return gauge;
}
- public NBVariableGauge variableGauge(String metricFamilyName, double initialValue, String... additionalLabels) {
+ public NBVariableGauge variableGauge(String metricFamilyName, double initialValue, MetricCategory category, String requiredDescription, String... additionalLabels) {
NBVariableGauge gauge = new NBVariableGauge(base, metricFamilyName, initialValue, additionalLabels);
- base.addComponentMetric(gauge);
+ base.addComponentMetric(gauge, category, requiredDescription);
return gauge;
}
- public DoubleSummaryGauge summaryGauge(String name, String... statspecs) {
- List stats = Arrays.stream(statspecs).map(DoubleSummaryGauge.Stat::valueOf).toList();
+ public DoubleSummaryGauge summaryGauge(String name, List statspecs, MetricCategory category, String requiredDescription) {
+ List stats = statspecs.stream().map(DoubleSummaryGauge.Stat::valueOf).toList();
DoubleSummaryStatistics reservoir = new DoubleSummaryStatistics();
DoubleSummaryGauge anyGauge = null;
for (DoubleSummaryGauge.Stat stat : stats) {
anyGauge = new DoubleSummaryGauge(base.getLabels().and(NBLabels.forKV("name",name,"stat", stat)), stat, reservoir);
- base.addComponentMetric(anyGauge);
+ base.addComponentMetric(anyGauge, category, requiredDescription);
}
return anyGauge;
}
- public NBMetricHistogram histogram(String metricFamilyName) {
- return histogram(metricFamilyName,4);
+ public NBMetricHistogram histogram(String metricFamilyName, MetricCategory category, String requiredDescription) {
+ return histogram(metricFamilyName,4, category, requiredDescription);
}
- public NBMetricHistogram histogram(String metricFamilyName, int hdrdigits) {
+ public NBMetricHistogram histogram(String metricFamilyName, int hdrdigits, MetricCategory category, String requiredDescription) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
NBMetricHistogram histogram = new NBMetricHistogram(labels, new DeltaHdrHistogramReservoir(labels, hdrdigits));
- base.addComponentMetric(histogram);
+ base.addComponentMetric(histogram, category, requiredDescription);
return histogram;
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java
new file mode 100644
index 000000000..683b87245
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.nb.api.engine.metrics.instruments;
+
+public enum MetricCategory {
+ /**
+ * Metrics which are essential to understanding the behavior of any activity
+ */
+ Core,
+ /**
+ * Metrics which mirror configuration data, either static or dynamic during the lifetime
+ * of an activity, session, or container. These are shared because they may need to be known
+ * for further understanding or evaluation. For example, the target rate puts the achieved
+ * rate in context, and having them both together in downstream metrics view makes computation
+ * simple and direct.
+ */
+ Config,
+ /**
+ * Metrics which are used to ascertain the validity of client behavior, such as the CPU load
+ * or other potentially contending effects. This is important because test results can be invalidated
+ * when the composed system {@code client <-> infrastructure <-> target system } relies
+ * too heavily on the testing apparatus. When the testing apparatus is under any degree of measurable
+ * stress, the ability to drive the target system to its capacity is compromised, as well as the client's
+ * ability to approximate real-time measurements due to task scheduling delays.
+ */
+ Internals,
+ /**
+ * When drivers are used to augment the metrics views, such as with the CQL client, these metrics can be
+ * folded into metrics feeds. However, they are not part of the core NB metrics. Such auxiliary metric
+ * need to be identified separately.
+ */
+ Driver,
+ /**
+ * Measurements of error rates, exception counts, and any other failure modes which can be counted or
+ * otherwise quantified
+ */
+ Errors,
+ /**
+ * Verification logic is used to assert the validity or some property of results returned by individual
+ * operations. Verification is meant to indicate whether a result was valid or invalid, with no
+ * room for interpretation in between.
+ */
+ Verification,
+ /**
+ * Metrics which describe payload properties, such as result size or similar
+ */
+ Payload,
+ /**
+ * Sometimes users provide their own metrics instrumentation. These may or may not have descriptions provided.
+ */
+ User,
+ /**
+ * Some metrics help provide insight into analysis methods and progress. This can include parameters for
+ * an optimizers configuration, parameters from a single frame of simulation, achieved results in the form of
+ * a value function, or similar.
+ */
+ Analysis,
+ /**
+ * When the result returned by an operation is scrutinized for some degree of accuracy on a sliding scale,
+ * this category applies. This is distinct from Verification in that verification implies a pass/fail scenario,
+ * whereas accuracy measures are on a sliding scale where interpretation is often more subjective.
+ */
+ Accuracy
+}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java
index c0e2d4ba3..913ef2c13 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/wrappers/RelevancyMeasures.java
@@ -16,6 +16,7 @@
package io.nosqlbench.nb.api.engine.metrics.wrappers;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.engine.metrics.DoubleSummaryGauge;
@@ -58,7 +59,7 @@ public class RelevancyMeasures implements NBLabeledElement {
for (RelevancyFunction function : f) {
this.functions.add(function);
function.prependLabels(this);
- DoubleSummaryGauge gauge = parent.create().summaryGauge(function.getUniqueName(),DoubleSummaryGauge.Stat.Average.toString());
+ DoubleSummaryGauge gauge = parent.create().summaryGauge(function.getUniqueName(), List.of("average"), MetricCategory.Accuracy, DoubleSummaryGauge.Stat.Average.toString());
this.gauges.add(gauge);
}
return this;
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/AttachedMetricsSummaryReporterTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/AttachedMetricsSummaryReporterTest.java
index ade28a4b1..df353a304 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/AttachedMetricsSummaryReporterTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/AttachedMetricsSummaryReporterTest.java
@@ -17,6 +17,7 @@
package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricCounter;
import org.apache.logging.log4j.LogManager;
@@ -54,10 +55,22 @@ class AttachedMetricsSummaryReporterTest {
TestComponent root = new TestComponent("root", "root");
scope.add(root);
TestComponent l1 = new TestComponent(root, "l1", "l1");
- NBMetricCounter counter = l1.create().counter("mycounter");
+ NBMetricCounter counter = l1.create().counter(
+ "mycounter",
+ MetricCategory.Verification,
+ "A verification metric for testing"
+ );
// AttachedMetricsSummaryReporter reporter = l1.create().summaryReporter(1000);
- NBFunctionGauge g1 = root.create().gauge("rootgauge", () -> 42d);
- NBFunctionGauge g2 = l1.create().gauge("leafgauge", () -> 48d);
+ NBFunctionGauge g1 = root.create().gauge(
+ "rootgauge", () -> 42d,
+ MetricCategory.Verification,
+ "A verification metric for testing"
+ );
+ NBFunctionGauge g2 = l1.create().gauge(
+ "leafgauge", () -> 48d,
+ MetricCategory.Verification,
+ "A verification metric for testing"
+ );
// This wait state is here only to emulate some time passing while background processing
// in the component hierarchy runs. Without it, you would be standing and immediate tearing
@@ -82,10 +95,22 @@ class AttachedMetricsSummaryReporterTest {
public void testAttachedReporter() {
TestComponent root = new TestComponent("root", "root");
TestComponent l1 = new TestComponent(root, "l1", "l1");
- NBMetricCounter counter = l1.create().counter("mycounter");
+ NBMetricCounter counter = l1.create().counter(
+ "mycounter",
+ MetricCategory.Verification,
+ "A verification metric for testing"
+ );
// AttachedMetricsSummaryReporter reporter = l1.create().summaryReporter(5000);
- NBFunctionGauge g1 = root.create().gauge("rootgauge", () -> 42d);
- NBFunctionGauge g2 = l1.create().gauge("leafgauge", () -> 48d);
+ NBFunctionGauge g1 = root.create().gauge(
+ "rootgauge", () -> 42d,
+ MetricCategory.Verification,
+ "A verification metric for testing"
+ );
+ NBFunctionGauge g2 = l1.create().gauge(
+ "leafgauge", () -> 48d,
+ MetricCategory.Verification,
+ "A verification metric for testing"
+ );
// TODO: this output should also include the node itself
// TODO: end lifecycle events need to be supported for metrics flushing
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
index 0c4df26ff..f7e85df73 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
@@ -17,6 +17,7 @@
package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.components.core.NBBaseComponentMetrics;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBBaseMetric;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import org.junit.jupiter.api.Test;
@@ -31,9 +32,17 @@ class NBBaseComponentMetricsTest {
void testBasicAddAndLookup() {
NBBaseComponentMetrics cm = new NBBaseComponentMetrics();
NBMetric m1 = new NBBaseMetric("k","20");
- String m1Handle = cm.addComponentMetric(m1);
+ String m1Handle = cm.addComponentMetric(
+ m1,
+ MetricCategory.Verification,
+ "testing metric"
+ );
NBMetric m2 = new NBBaseMetric("k","27","l","62");
- String m2Handle = cm.addComponentMetric(m2);
+ String m2Handle = cm.addComponentMetric(
+ m2,
+ MetricCategory.Verification,
+ "testing metric"
+ );
assertThat(cm.getComponentMetric(m1Handle)).isEqualTo(m1);
assertThat(cm.getComponentMetric(m2Handle)).isEqualTo(m2);
@@ -42,9 +51,17 @@ class NBBaseComponentMetricsTest {
void find() {
NBBaseComponentMetrics cm = new NBBaseComponentMetrics();
NBMetric m1 = new NBBaseMetric("k","20");
- String m1Handle = cm.addComponentMetric(m1);
+ String m1Handle = cm.addComponentMetric(
+ m1,
+ MetricCategory.Verification,
+ "testing metric"
+ );
NBMetric m2 = new NBBaseMetric("k","27","l","62");
- String m2Handle = cm.addComponentMetric(m2);
+ String m2Handle = cm.addComponentMetric(
+ m2,
+ MetricCategory.Verification,
+ "testing metric"
+ );
assertThat(cm.findComponentMetrics("k=27")).isEqualTo(List.of(m2));
assertThat(cm.findComponentMetrics("k=20")).isNotEqualTo(List.of(m2));
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentServicesTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentServicesTest.java
index 16662e928..a00041154 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentServicesTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBComponentServicesTest.java
@@ -17,6 +17,7 @@
package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBFunctionGauge;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
@@ -35,7 +36,12 @@ class NBComponentServicesTest {
TestComponent a1 = new TestComponent(root, "a1", "a1");
TestComponent b1 = new TestComponent(a1, "b1", "b1");
- NBMetricTimer timer1 = a1.create().timer("mfn1", 3);
+ NBMetricTimer timer1 = a1.create().timer(
+ "mfn1",
+ 3,
+ MetricCategory.Verification,
+ "testing metric"
+ );
String handle = timer1.getHandle();
timer1.update(23L, TimeUnit.MILLISECONDS);
@@ -45,7 +51,12 @@ class NBComponentServicesTest {
NBMetric foundByPattern = root.find().metric("name:mfn1");
assertThat(foundByPattern).isEqualTo(timer1);
- NBFunctionGauge gauge = b1.create().gauge("test_gauge", () -> 5.2d);
+ NBFunctionGauge gauge = b1.create().gauge(
+ "test_gauge",
+ () -> 5.2d,
+ MetricCategory.Verification,
+ "testing metric"
+ );
String gaugeHandle = gauge.getHandle();
List metricsInTree = root.find().metrics();
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
index beecdfc05..f96e366ce 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
@@ -17,6 +17,7 @@
package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.config.standard.TestComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBBaseMetric;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import org.junit.jupiter.api.Test;
@@ -31,11 +32,23 @@ class NBMetricsQueryTest {
private final static TestComponent root_c2 = new TestComponent(root,"c2","c2");
private final static TestComponent root_c3 = new TestComponent(root,"c3","c3");
private final static NBMetric m1 = new NBBaseMetric("m1","m1");
- private final static String m1Handle = root.addComponentMetric(m1);
+ private final static String m1Handle = root.addComponentMetric(
+ m1,
+ MetricCategory.Verification,
+ "testing metric"
+ );
private final static NBMetric m2 = new NBBaseMetric("m2","m2");
- private final static String m2Handle = root_c2.addComponentMetric(m2);
+ private final static String m2Handle = root_c2.addComponentMetric(
+ m2,
+ MetricCategory.Verification,
+ "testing metric"
+ );
private final static NBMetric m3 = new NBBaseMetric("m3","m3");
- private final static String m3Handle = root_c3.addComponentMetric(m3);
+ private final static String m3Handle = root_c3.addComponentMetric(
+ m3,
+ MetricCategory.Verification,
+ "testing metric"
+ );
@Test
public void testFindInTree() {
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
index 81eed7c4a..9c8de4000 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
@@ -22,6 +22,7 @@ import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.scenarios.simframe.capture.JournalView;
import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
import io.nosqlbench.scenarios.simframe.planning.HoldAndSample;
@@ -35,10 +36,29 @@ public class RCurvePlanner extends SimFramePlanner lastFrame==null ? 0 : (double)lastFrame.step());
- create().gauge("rcurve_maxstep",() -> lastFrame==null ? 0 : (double)lastFrame.maxsteps());
- create().gauge("rcurve_ratio",() -> lastFrame==null ? 0.0 : lastFrame.ratio());
- create().gauge("rcurve_rate",() -> lastFrame==null ? 0.0 : lastFrame.rate());
+ create().gauge(
+ "rcurve_step",
+ () -> lastFrame==null ? 0 : (double)lastFrame.step(),
+ MetricCategory.Analysis,
+ "The current step which the response curve analyzer is on"
+ );
+ create().gauge(
+ "rcurve_maxstep",
+ () -> lastFrame==null ? 0 : (double)lastFrame.maxsteps(),
+ MetricCategory.Analysis,
+ "The maximum step that the response curve analyzer will run"
+ );
+ create().gauge(
+ "rcurve_ratio",
+ () -> lastFrame==null ? 0.0 : lastFrame.ratio(),
+ MetricCategory.Analysis,
+ "The fractional throughput capacity of the current response curve step"
+ );
+ create().gauge(
+ "rcurve_rate",() -> lastFrame==null ? 0.0 : lastFrame.rate(),
+ MetricCategory.Analysis,
+ "The actual throughput target of the current response curve step"
+ );
}
@Override
diff --git a/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java b/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java
index 87426d9e1..09bff454b 100644
--- a/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java
+++ b/nbr/src/test/java/io/nosqlbench/engine/core/script/MetricsIntegrationTest.java
@@ -19,6 +19,7 @@ package io.nosqlbench.engine.core.script;
import com.codahale.metrics.Histogram;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.components.core.NBComponent;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@@ -32,7 +33,12 @@ public class MetricsIntegrationTest {
@Test
public void testHistogramLogger() {
NBComponent parent = new TestComponent("metricstest","metricstest","alias","foo","driver","diag","op","noop");
- final Histogram testhistogram = parent.create().histogram("testhistogram", 3);
+ final Histogram testhistogram = parent.create().histogram(
+ "testhistogram",
+ 3,
+ MetricCategory.Verification,
+ "test metric"
+ );
// TODO: metrics
// ActivityMetrics.addHistoLogger("testsession", ".*","testhisto.log","1s");
testhistogram.update(400);
From 53b3c780bceebec0605fb7100fe31b77992d5f3e Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:16:42 -0600
Subject: [PATCH 022/120] additional work on DNN angualr1 methods
---
.../shared/vectors/dnn/DNN_angular1_v.java | 55 ++++++++++++
.../vectors/dnn/DNN_angular1_vTest.java | 83 +++++++++++++++++++
2 files changed, 138 insertions(+)
create mode 100644 virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_v.java
create mode 100644 virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_vTest.java
diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_v.java b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_v.java
new file mode 100644
index 000000000..6c8296fba
--- /dev/null
+++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_v.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.virtdata.library.basics.shared.vectors.dnn;
+
+import io.nosqlbench.virtdata.api.annotations.Categories;
+import io.nosqlbench.virtdata.api.annotations.Category;
+import io.nosqlbench.virtdata.api.annotations.ThreadSafeMapper;
+
+import java.util.Arrays;
+import java.util.function.LongFunction;
+
+@ThreadSafeMapper
+@Categories(Category.experimental)
+public class DNN_angular1_v implements LongFunction {
+
+ private final int d;
+ private final long n;
+ private final long m;
+
+ /**
+ * @param D
+ * Dimensions in each vector
+ * @param N
+ * The number of vectors in the training set
+ * @param M
+ * The modulo which is used to construct equivalence classes
+ */
+ public DNN_angular1_v(int D, long N, long M) {
+ d = D;
+ n = N;
+ m = M;
+ }
+
+ @Override
+ public float[] apply(long i) {
+ float[] vector = new float[d];
+ Arrays.fill(vector, i + 1);
+ vector[vector.length - 1] = (i + 1) * (i % m);
+ return vector;
+ }
+}
diff --git a/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_vTest.java b/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_vTest.java
new file mode 100644
index 000000000..10e985357
--- /dev/null
+++ b/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_vTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2023 nosqlbench
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.nosqlbench.virtdata.library.basics.shared.vectors.dnn;
+
+import org.jetbrains.annotations.TestOnly;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+
+class DNN_angular1_vTest {
+
+ @Test
+ public void testCosineSimilarity() {
+ assertThat(cosine_similarity(new float[]{1,2,3,4,5,6,7},new float[]{7,6,5,4,3,2,1})).isEqualTo(0.6);
+ assertThat(cosine_similarity(new float[]{1,2,3,4,5,6,7},new float[]{1,2,3,4,5,6,7})).isEqualTo(1.0);
+ }
+
+ @Test
+ public void testSimpleGeneration() {
+ DNN_angular1_v vs = new DNN_angular1_v(2,100,3);
+ assertThat(vs.apply(0)).isEqualTo(new float[]{1,0});
+ assertThat(vs.apply(1)).isEqualTo(new float[]{2,2});
+ assertThat(vs.apply(2)).isEqualTo(new float[]{3,6});
+ assertThat(vs.apply(3)).isEqualTo(new float[]{4,0});
+ assertThat(vs.apply(4)).isEqualTo(new float[]{5,5});
+ assertThat(vs.apply(5)).isEqualTo(new float[]{6,12});
+ assertThat(vs.apply(6)).isEqualTo(new float[]{7,0});
+ }
+
+ @Test
+ public void testBasicAngularVectors() {
+ DNN_angular1_v vf = new DNN_angular1_v(10, 100, 7);
+ float[][] vectors = new float[100][];
+ for (int i = 0; i < 100; i++) {
+ vectors[i] = vf.apply(i);
+ }
+ int[] same = new int[100];
+ Arrays.fill(same,-1);
+ for (int vidx = 0; vidx < same.length; vidx++) {
+ for (int compare_to = 0; compare_to < vidx; compare_to++) {
+ if (cosine_similarity(vectors[vidx],vectors[compare_to])==1.0) {
+ same[vidx]=compare_to;
+ }
+ }
+ }
+ for (int sameas = 0; sameas < same.length; sameas++) {
+ assertThat(same[sameas]==sameas%7);
+ }
+ }
+
+ private double cosine_similarity(float[] a, float[] b) {
+ double dp = 0.0d;
+ double as = 0.0d;
+ double bs = 0.0d;
+ for (int i = 0; i < a.length; i++) {
+ dp += (a[i] * b[i]);
+ as += (a[i] * a[i]);
+ bs += (b[i] * b[i]);
+ }
+ double similarity = dp / (Math.sqrt(as) * Math.sqrt(bs));
+ return similarity;
+ }
+
+}
From 84f9b84a6ea0cc62479e73bab9f858d72e055832 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 17:17:07 -0600
Subject: [PATCH 023/120] add docs graphic for DNN angular1
---
.../basics/shared/vectors/dnn/dnn_angular.svg | 846 ++++++++++++++++++
1 file changed, 846 insertions(+)
create mode 100644 virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/dnn_angular.svg
diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/dnn_angular.svg b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/dnn_angular.svg
new file mode 100644
index 000000000..2a9cc7503
--- /dev/null
+++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/dnn_angular.svg
@@ -0,0 +1,846 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ d=2,m=3 0->(1,0) 1->(2,2) 2->(3,6) 3->(4,0) 4->(5,5) 5->(6,12) 6->(7,0) 7->(8,8) 8->(9,18) 9->(10,0) 10->(11,11) 11->(12,24)
+ 0
+ 1
+ 2
+ 4
+ 5
+ 3
+ 6
+ 9
+ 10
+ 7
+ 8
+ 11
+
+
+
From 3f6abf12f811f4f6e55113af0238a27abf60dc9b Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Wed, 20 Dec 2023 18:12:30 -0600
Subject: [PATCH 024/120] caller updates for documented metrics
---
.../api/metrics/HistoIntervalLoggerTest.java | 10 +++-
.../api/metrics/NBMetricHistogramTest.java | 12 ++++-
.../nb/api/components/core/NBCreators.java | 46 ++++++++++---------
.../engine/metrics/DoubleSummaryGauge.java | 21 ++++++++-
.../metrics/instruments/NBBaseMetric.java | 18 +++++++-
.../metrics/instruments/NBFunctionGauge.java | 33 +++++++++++--
.../engine/metrics/instruments/NBMetric.java | 3 ++
.../metrics/instruments/NBMetricCounter.java | 16 ++++++-
.../instruments/NBMetricGaugeWrapper.java | 16 ++++++-
.../instruments/NBMetricHistogram.java | 32 +++++++++++--
.../metrics/instruments/NBMetricMeter.java | 16 ++++++-
.../metrics/instruments/NBMetricTimer.java | 23 +++++++++-
.../metrics/instruments/NBVariableGauge.java | 25 +++++++++-
.../core/NBBaseComponentMetricsTest.java | 9 ++--
.../components/core/NBMetricsQueryTest.java | 19 ++++++--
.../reporters/PromExpositionFormatTest.java | 40 +++++++++++++---
16 files changed, 285 insertions(+), 54 deletions(-)
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java b/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java
index b97187cdd..637fc2804 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/HistoIntervalLoggerTest.java
@@ -16,6 +16,7 @@
package io.nosqlbench.engine.api.metrics;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.engine.metrics.DeltaHdrHistogramReservoir;
import io.nosqlbench.nb.api.engine.metrics.HistoIntervalLogger;
@@ -47,7 +48,14 @@ public class HistoIntervalLoggerTest {
final int significantDigits = 4;
NBMetricHistogram NBHistogram = new NBMetricHistogram(
- NBLabels.forKV("name", "histo1"), new DeltaHdrHistogramReservoir(NBLabels.forKV("name", "histo1"), significantDigits));
+ NBLabels.forKV("name", "histo1"),
+ new DeltaHdrHistogramReservoir(
+ NBLabels.forKV("name", "histo1"),
+ significantDigits
+ ),
+ "test basic logger",
+ MetricCategory.Verification
+ );
hil.onHistogramAdded("histo1", NBHistogram);
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/NBMetricHistogramTest.java b/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/NBMetricHistogramTest.java
index ca70e5c07..5327f136f 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/NBMetricHistogramTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/api/metrics/NBMetricHistogramTest.java
@@ -16,6 +16,7 @@
package io.nosqlbench.engine.api.metrics;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.engine.metrics.ConvenientSnapshot;
import io.nosqlbench.nb.api.engine.metrics.DeltaHdrHistogramReservoir;
@@ -28,8 +29,15 @@ public class NBMetricHistogramTest {
@Test
public void testNicerHistogramValues() {
- NBMetricHistogram nh = new NBMetricHistogram(NBLabels.forKV("name","testhisto"), new DeltaHdrHistogramReservoir(
- NBLabels.forKV("name", "testhisto"), 4));
+ NBMetricHistogram nh = new NBMetricHistogram(
+ NBLabels.forKV("name","testhisto"),
+ new DeltaHdrHistogramReservoir(
+ NBLabels.forKV("name", "testhisto"),
+ 4
+ ),
+ "test nicer histogram values",
+ MetricCategory.Verification
+ );
for (int i = 1; 100 >= i; i++) {
nh.update(i);
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
index 1e5577e98..1723ce2c7 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/components/core/NBCreators.java
@@ -59,58 +59,62 @@ public class NBCreators {
public NBMetricTimer timer(String metricFamilyName, int hdrdigits, MetricCategory category, String description) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
- NBMetricTimer timer = new NBMetricTimer(labels, new DeltaHdrHistogramReservoir(labels, hdrdigits));
+ NBMetricTimer timer = new NBMetricTimer(
+ labels,
+ new DeltaHdrHistogramReservoir(labels, hdrdigits),
+ description, category
+ );
base.addComponentMetric(timer, category, description);
return timer;
}
- public Meter meter(String metricFamilyName, MetricCategory category, String requiredDescription) {
+ public Meter meter(String metricFamilyName, MetricCategory category, String description) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
- NBMetricMeter meter = new NBMetricMeter(labels);
- base.addComponentMetric(meter, category, requiredDescription);
+ NBMetricMeter meter = new NBMetricMeter(labels,description, category);
+ base.addComponentMetric(meter, category, description);
return meter;
}
- public NBMetricCounter counter(String metricFamilyName, MetricCategory category, String requiredDescription) {
+ public NBMetricCounter counter(String metricFamilyName, MetricCategory category, String description) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
- NBMetricCounter counter = new NBMetricCounter(labels);
- base.addComponentMetric(counter, category, requiredDescription);
+ NBMetricCounter counter = new NBMetricCounter(labels, description, category);
+ base.addComponentMetric(counter, category, description);
return counter;
}
- public NBFunctionGauge gauge(String metricFamilyName, Supplier valueSource, MetricCategory category, String requiredDescription) {
- NBFunctionGauge gauge = new NBFunctionGauge(base, valueSource, metricFamilyName);
- base.addComponentMetric(gauge, category, requiredDescription);
+ public NBFunctionGauge gauge(String metricFamilyName, Supplier valueSource, MetricCategory category, String description) {
+ NBFunctionGauge gauge = new NBFunctionGauge(base, valueSource, metricFamilyName, description, category);
+ base.addComponentMetric(gauge, category, description);
return gauge;
}
- public NBVariableGauge variableGauge(String metricFamilyName, double initialValue, MetricCategory category, String requiredDescription, String... additionalLabels) {
- NBVariableGauge gauge = new NBVariableGauge(base, metricFamilyName, initialValue, additionalLabels);
- base.addComponentMetric(gauge, category, requiredDescription);
+ public NBVariableGauge variableGauge(String metricFamilyName, double initialValue, MetricCategory category, String description, NBLabels additionalLabels) {
+ NBVariableGauge gauge = new NBVariableGauge(base, metricFamilyName, initialValue, additionalLabels, description, category);
+ base.addComponentMetric(gauge, category, description);
return gauge;
}
- public DoubleSummaryGauge summaryGauge(String name, List statspecs, MetricCategory category, String requiredDescription) {
+ public DoubleSummaryGauge summaryGauge(String name, List statspecs, MetricCategory category, String description) {
List stats = statspecs.stream().map(DoubleSummaryGauge.Stat::valueOf).toList();
DoubleSummaryStatistics reservoir = new DoubleSummaryStatistics();
DoubleSummaryGauge anyGauge = null;
for (DoubleSummaryGauge.Stat stat : stats) {
- anyGauge = new DoubleSummaryGauge(base.getLabels().and(NBLabels.forKV("name",name,"stat", stat)), stat, reservoir);
- base.addComponentMetric(anyGauge, category, requiredDescription);
+ anyGauge = new DoubleSummaryGauge(base.getLabels().and(NBLabels.forKV("name",name,"stat", stat)), stat, reservoir, description, category);
+ base.addComponentMetric(anyGauge, category, description);
}
return anyGauge;
}
- public NBMetricHistogram histogram(String metricFamilyName, MetricCategory category, String requiredDescription) {
- return histogram(metricFamilyName,4, category, requiredDescription);
+ public NBMetricHistogram histogram(String metricFamilyName, MetricCategory category, String description) {
+ return histogram(metricFamilyName,4, category, description);
}
- public NBMetricHistogram histogram(String metricFamilyName, int hdrdigits, MetricCategory category, String requiredDescription) {
+ public NBMetricHistogram histogram(String metricFamilyName, int hdrdigits, MetricCategory category, String description) {
NBLabels labels = base.getLabels().and("name", metricFamilyName);
- NBMetricHistogram histogram = new NBMetricHistogram(labels, new DeltaHdrHistogramReservoir(labels, hdrdigits));
- base.addComponentMetric(histogram, category, requiredDescription);
+ NBMetricHistogram histogram = new NBMetricHistogram(labels, new DeltaHdrHistogramReservoir(labels, hdrdigits), description, category);
+ base.addComponentMetric(histogram, category, description);
return histogram;
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/DoubleSummaryGauge.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/DoubleSummaryGauge.java
index 5d880913d..86ae33a0e 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/DoubleSummaryGauge.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/DoubleSummaryGauge.java
@@ -16,6 +16,7 @@
package io.nosqlbench.nb.api.engine.metrics;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
@@ -30,12 +31,24 @@ public class DoubleSummaryGauge implements NBMetricGauge, DoubleConsumer {
private final NBLabels labels;
private final Stat stat;
private final DoubleSummaryStatistics stats;
+ private final String description;
+ private final MetricCategory[] categories;
@Override
public String typeName() {
return "gauge";
}
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
+
public enum Stat {
Min,
Max,
@@ -44,16 +57,20 @@ public class DoubleSummaryGauge implements NBMetricGauge, DoubleConsumer {
Sum
}
- public DoubleSummaryGauge(NBLabels labels, Stat stat, DoubleSummaryStatistics stats) {
+ public DoubleSummaryGauge(NBLabels labels, Stat stat, DoubleSummaryStatistics stats, String description, MetricCategory... categories) {
this.labels = labels;
this.stat = stat;
this.stats = stats;
+ this.description = description;
+ this.categories = categories;
}
- public DoubleSummaryGauge(NBLabels labels, Stat stat) {
+ public DoubleSummaryGauge(NBLabels labels, Stat stat,String description, MetricCategory... categories) {
this.labels = labels;
this.stat = stat;
this.stats = new DoubleSummaryStatistics();
+ this.description = description;
+ this.categories = categories;
}
public synchronized void accept(double value) {
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBBaseMetric.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBBaseMetric.java
index 35504cae4..2bcf6872d 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBBaseMetric.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBBaseMetric.java
@@ -20,9 +20,13 @@ import io.nosqlbench.nb.api.labels.NBLabels;
public class NBBaseMetric implements NBMetric {
private final NBLabels labels;
+ private String description;
+ private MetricCategory[] categories;
- public NBBaseMetric(String... labels) {
- this.labels = NBLabels.forKV((Object[]) labels);
+ public NBBaseMetric(NBLabels labels, String description, MetricCategory... categories) {
+ this.labels = labels;
+ this.description = description;
+ this.categories = categories;
}
@Override
public NBLabels getLabels() {
@@ -33,4 +37,14 @@ public class NBBaseMetric implements NBMetric {
public String typeName() {
return "basetype";
}
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java
index 5e9b14300..9b2956a18 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBFunctionGauge.java
@@ -28,14 +28,31 @@ public class NBFunctionGauge implements NBMetricGauge {
private final Supplier source;
private final NBLabeledElement parent;
private final NBLabels labels;
+ private String description;
+ private MetricCategory[] categories;
- public NBFunctionGauge(NBComponent parent, Supplier source, String metricFamilyName, Map additionalLabels) {
+ public NBFunctionGauge(
+ NBComponent parent,
+ Supplier source,
+ String metricFamilyName,
+ Map additionalLabels,
+ String description,
+ MetricCategory... categories
+ ) {
this.parent = parent;
this.labels = NBLabels.forMap(additionalLabels).and("name",metricFamilyName);
this.source = source;
+ this.description = description;
+ this.categories = categories;
}
- public NBFunctionGauge(NBComponent parent, Supplier source, String metricFamilyName) {
- this(parent, source, metricFamilyName,Map.of());
+ public NBFunctionGauge(
+ NBComponent parent,
+ Supplier source,
+ String metricFamilyName,
+ String description,
+ MetricCategory... categories
+ ) {
+ this(parent, source, metricFamilyName,Map.of(), description, categories);
}
@Override
public Double getValue() {
@@ -56,6 +73,16 @@ public class NBFunctionGauge implements NBMetricGauge {
public String typeName() {
return "gauge";
}
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetric.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetric.java
index b65bc8402..7a18b0047 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetric.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetric.java
@@ -24,4 +24,7 @@ public interface NBMetric extends Metric, NBLabeledElement {
return this.getLabels().linearizeAsMetrics();
}
String typeName();
+
+ String getDescription();
+ MetricCategory[] getCategories();
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricCounter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricCounter.java
index 3a5d901ae..a6afb8992 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricCounter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricCounter.java
@@ -22,9 +22,13 @@ import io.nosqlbench.nb.api.labels.NBLabels;
public class NBMetricCounter extends Counter implements NBMetric {
private final NBLabels labels;
+ private String description;
+ private MetricCategory[] categories;
- public NBMetricCounter(final NBLabels labels) {
+ public NBMetricCounter(final NBLabels labels, String description, MetricCategory... categories) {
this.labels = labels;
+ this.description = description;
+ this.categories = categories;
}
@Override
@@ -37,6 +41,16 @@ public class NBMetricCounter extends Counter implements NBMetric {
return "counter";
}
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
+
@Override
public String toString() {
return description();
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricGaugeWrapper.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricGaugeWrapper.java
index 2323d4001..03eeb0533 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricGaugeWrapper.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricGaugeWrapper.java
@@ -23,14 +23,18 @@ public class NBMetricGaugeWrapper implements NBMetricGauge, NBMetric {
private final Gauge gauge;
private final NBLabels labels;
+ private final String description;
+ private final MetricCategory[] categories;
- public NBMetricGaugeWrapper(NBLabels labels, Gauge gauge) {
+ public NBMetricGaugeWrapper(NBLabels labels, Gauge gauge, String description, MetricCategory... categories) {
this.gauge = gauge;
if (gauge.getValue() instanceof Double d) {
} else {
throw new RuntimeException("NBMetricGauges only support Double values");
}
this.labels = labels;
+ this.description = description;
+ this.categories = categories;
}
@Override
@@ -47,4 +51,14 @@ public class NBMetricGaugeWrapper implements NBMetricGauge, NBMetric {
public String typeName() {
return "gauge";
}
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricHistogram.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricHistogram.java
index 9d5b2aea7..24ee07091 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricHistogram.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricHistogram.java
@@ -31,17 +31,33 @@ public class NBMetricHistogram extends Histogram implements DeltaSnapshotter, Hd
private long cacheExpiryMillis;
private long cacheTimeMillis;
private List mirrors;
+ private MetricCategory[] categories;
+ private String description;
- public NBMetricHistogram(NBLabels labels, DeltaHdrHistogramReservoir hdrHistogramReservoir) {
+ public NBMetricHistogram(
+ NBLabels labels,
+ DeltaHdrHistogramReservoir hdrHistogramReservoir,
+ String description,
+ MetricCategory... categories
+ ) {
super(hdrHistogramReservoir);
this.labels = labels;
this.hdrDeltaReservoir = hdrHistogramReservoir;
+ this.description = description;
+ this.categories = categories;
}
- public NBMetricHistogram(String name, DeltaHdrHistogramReservoir hdrHistogramReservoir) {
+ public NBMetricHistogram(
+ String name,
+ DeltaHdrHistogramReservoir hdrHistogramReservoir,
+ String description,
+ MetricCategory... categories
+ ) {
super(hdrHistogramReservoir);
this.labels = NBLabels.forKV("name",name);
this.hdrDeltaReservoir = hdrHistogramReservoir;
+ this.description = description;
+ this.categories = categories;
}
@Override
@@ -76,7 +92,7 @@ public class NBMetricHistogram extends Histogram implements DeltaSnapshotter, Hd
mirrors = new CopyOnWriteArrayList<>();
}
DeltaHdrHistogramReservoir mirrorReservoir = this.hdrDeltaReservoir.copySettings();
- NBMetricHistogram mirror = new NBMetricHistogram("mirror-" + this.labels.linearizeValues("name"), mirrorReservoir);
+ NBMetricHistogram mirror = new NBMetricHistogram("mirror-" + this.labels.linearizeValues("name"), mirrorReservoir, description, categories);
mirrors.add(mirror);
return mirror;
}
@@ -115,6 +131,16 @@ public class NBMetricHistogram extends Histogram implements DeltaSnapshotter, Hd
return "histogram";
}
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
+
@Override
public String toString() {
return description();
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricMeter.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricMeter.java
index 80c134c7c..c574e9f1c 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricMeter.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricMeter.java
@@ -22,9 +22,13 @@ import io.nosqlbench.nb.api.labels.NBLabels;
public class NBMetricMeter extends Meter implements NBMetric {
private final NBLabels labels;
+ private final MetricCategory[] categories;
+ private final String description;
- public NBMetricMeter(NBLabels labels) {
+ public NBMetricMeter(NBLabels labels, String description, MetricCategory... categories) {
this.labels = labels;
+ this.description = description;
+ this.categories = categories;
}
@Override
@@ -36,4 +40,14 @@ public class NBMetricMeter extends Meter implements NBMetric {
public String typeName() {
return "meter";
}
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricTimer.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricTimer.java
index 181fe73f4..33a1c3177 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricTimer.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBMetricTimer.java
@@ -28,12 +28,21 @@ import java.util.concurrent.TimeUnit;
public class NBMetricTimer extends Timer implements DeltaSnapshotter, HdrDeltaHistogramAttachment, TimerAttachment, NBMetric {
private final DeltaHdrHistogramReservoir deltaHdrHistogramReservoir;
+ private final String description;
+ private final MetricCategory[] categories;
private long cacheExpiry;
private List mirrors;
private final NBLabels labels;
- public NBMetricTimer(final NBLabels labels, final DeltaHdrHistogramReservoir deltaHdrHistogramReservoir) {
+ public NBMetricTimer(
+ final NBLabels labels,
+ final DeltaHdrHistogramReservoir deltaHdrHistogramReservoir,
+ String description,
+ MetricCategory... categories
+ ) {
super(deltaHdrHistogramReservoir);
+ this.description = description;
+ this.categories = categories;
this.labels = labels;
this.deltaHdrHistogramReservoir = deltaHdrHistogramReservoir;
}
@@ -60,7 +69,7 @@ public class NBMetricTimer extends Timer implements DeltaSnapshotter, HdrDeltaHi
public synchronized NBMetricTimer attachHdrDeltaHistogram() {
if (null == mirrors) this.mirrors = new CopyOnWriteArrayList<>();
final DeltaHdrHistogramReservoir sameConfigReservoir = deltaHdrHistogramReservoir.copySettings();
- final NBMetricTimer mirror = new NBMetricTimer(labels, sameConfigReservoir);
+ final NBMetricTimer mirror = new NBMetricTimer(labels, sameConfigReservoir, description, categories);
this.mirrors.add(mirror);
return mirror;
}
@@ -96,4 +105,14 @@ public class NBMetricTimer extends Timer implements DeltaSnapshotter, HdrDeltaHi
public String typeName() {
return "timer";
}
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java
index 94c7d498d..daa20d758 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/NBVariableGauge.java
@@ -28,11 +28,22 @@ public class NBVariableGauge implements NBMetricGauge {
private double value;
private final NBLabeledElement parent;
private final NBLabels labels;
+ private String description;
+ private MetricCategory[] categories;
- public NBVariableGauge(NBComponent parent, String metricFamilyName, double initialValue, String... additionalLabels) {
+ public NBVariableGauge(
+ NBComponent parent,
+ String metricFamilyName,
+ double initialValue,
+ NBLabels additionalLabels,
+ String description,
+ MetricCategory... categories
+ ) {
this.parent = parent;
- this.labels = NBLabels.forKV((Object[]) additionalLabels).and("name", metricFamilyName);
+ this.labels = additionalLabels.and("name", metricFamilyName);
this.value = initialValue;
+ this.description = description;
+ this.categories = categories;
}
@@ -50,4 +61,14 @@ public class NBVariableGauge implements NBMetricGauge {
public String typeName() {
return "gauge";
}
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public MetricCategory[] getCategories() {
+ return this.categories;
+ }
}
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
index f7e85df73..668cd1e53 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBBaseComponentMetricsTest.java
@@ -20,6 +20,7 @@ import io.nosqlbench.nb.api.components.core.NBBaseComponentMetrics;
import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBBaseMetric;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
+import io.nosqlbench.nb.api.labels.NBLabels;
import org.junit.jupiter.api.Test;
import java.util.List;
@@ -31,13 +32,13 @@ class NBBaseComponentMetricsTest {
@Test
void testBasicAddAndLookup() {
NBBaseComponentMetrics cm = new NBBaseComponentMetrics();
- NBMetric m1 = new NBBaseMetric("k","20");
+ NBMetric m1 = new NBBaseMetric(NBLabels.forKV("k","20"),"test metric", MetricCategory.Verification);
String m1Handle = cm.addComponentMetric(
m1,
MetricCategory.Verification,
"testing metric"
);
- NBMetric m2 = new NBBaseMetric("k","27","l","62");
+ NBMetric m2 = new NBBaseMetric(NBLabels.forKV("k","27","l","62"),"test metric", MetricCategory.Verification);
String m2Handle = cm.addComponentMetric(
m2,
MetricCategory.Verification,
@@ -50,13 +51,13 @@ class NBBaseComponentMetricsTest {
@Test
void find() {
NBBaseComponentMetrics cm = new NBBaseComponentMetrics();
- NBMetric m1 = new NBBaseMetric("k","20");
+ NBMetric m1 = new NBBaseMetric(NBLabels.forKV("k","20"),"test metric", MetricCategory.Verification);
String m1Handle = cm.addComponentMetric(
m1,
MetricCategory.Verification,
"testing metric"
);
- NBMetric m2 = new NBBaseMetric("k","27","l","62");
+ NBMetric m2 = new NBBaseMetric(NBLabels.forKV("k","27","l","62"),"test metric", MetricCategory.Verification);
String m2Handle = cm.addComponentMetric(
m2,
MetricCategory.Verification,
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
index f96e366ce..f3b37038f 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/components/core/NBMetricsQueryTest.java
@@ -20,6 +20,7 @@ import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBBaseMetric;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
+import io.nosqlbench.nb.api.labels.NBLabels;
import org.junit.jupiter.api.Test;
import java.util.List;
@@ -31,19 +32,31 @@ class NBMetricsQueryTest {
private final static TestComponent root = new TestComponent("root","root","type","rootelement");
private final static TestComponent root_c2 = new TestComponent(root,"c2","c2");
private final static TestComponent root_c3 = new TestComponent(root,"c3","c3");
- private final static NBMetric m1 = new NBBaseMetric("m1","m1");
+ private final static NBMetric m1 = new NBBaseMetric(
+ NBLabels.forKV("m1", "m1"),
+ "test metric",
+ MetricCategory.Verification
+ );
private final static String m1Handle = root.addComponentMetric(
m1,
MetricCategory.Verification,
"testing metric"
);
- private final static NBMetric m2 = new NBBaseMetric("m2","m2");
+ private final static NBMetric m2 = new NBBaseMetric(
+ NBLabels.forKV("m2", "m2"),
+ "test metric",
+ MetricCategory.Verification
+ );
private final static String m2Handle = root_c2.addComponentMetric(
m2,
MetricCategory.Verification,
"testing metric"
);
- private final static NBMetric m3 = new NBBaseMetric("m3","m3");
+ private final static NBMetric m3 = new NBBaseMetric(
+ NBLabels.forKV("m3", "m3"),
+ "test metric",
+ MetricCategory.Verification
+ );
private final static String m3Handle = root_c3.addComponentMetric(
m3,
MetricCategory.Verification,
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java
index 84720339f..674d2aab9 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java
@@ -46,7 +46,11 @@ public class PromExpositionFormatTest {
}
@Test
public void testCounterFormat() {
- Counter counter = new NBMetricCounter(NBLabels.forKV("name","counter_test_2342", "origin","mars"));
+ Counter counter = new NBMetricCounter(
+ NBLabels.forKV("name","counter_test_2342", "origin","mars"),
+ "test counter format",
+ MetricCategory.Verification
+ );
counter.inc(23423L);
String buffer = PromExpositionFormat.format(nowclock, counter);
@@ -64,7 +68,12 @@ public class PromExpositionFormatTest {
for (long i = 0; 1000 > i; i++) {
hdr.update(i * 37L);
}
- NBMetricHistogram nbHistogram = new NBMetricHistogram(NBLabels.forKV("name","mynameismud","label3", "value3"), hdr);
+ NBMetricHistogram nbHistogram = new NBMetricHistogram(
+ NBLabels.forKV("name","mynameismud","label3", "value3"),
+ hdr,
+ "test histogram format",
+ MetricCategory.Verification
+ );
String formatted = PromExpositionFormat.format(nowclock, nbHistogram);
assertThat(formatted).matches(Pattern.compile("""
@@ -95,7 +104,12 @@ public class PromExpositionFormatTest {
public void testTimerFormat() {
DeltaHdrHistogramReservoir hdr = new DeltaHdrHistogramReservoir(NBLabels.forKV("name","monsieurmarius","label4","value4"),3);
- NBMetricTimer nbMetricTimer = new NBMetricTimer(NBLabels.forKV("name","monsieurmarius","label4", "value4"), hdr);
+ NBMetricTimer nbMetricTimer = new NBMetricTimer(
+ NBLabels.forKV("name","monsieurmarius","label4", "value4"),
+ hdr,
+ "test timer format",
+ MetricCategory.Verification
+ );
for (long i = 0; 1000 > i; i++)
nbMetricTimer.update(i * 37L, TimeUnit.NANOSECONDS);
@@ -135,7 +149,11 @@ public class PromExpositionFormatTest {
@Test
public void testMeterFormat() {
- NBMetricMeter nbMetricMeter = new NBMetricMeter(NBLabels.forKV("name","eponine","label5", "value5"));
+ NBMetricMeter nbMetricMeter = new NBMetricMeter(
+ NBLabels.forKV("name","eponine","label5", "value5"),
+ "test meter format",
+ MetricCategory.Verification
+ );
String formatted = PromExpositionFormat.format(nowclock, nbMetricMeter);
assertThat(formatted).matches(Pattern.compile("""
@@ -155,7 +173,12 @@ public class PromExpositionFormatTest {
@Test
public void testGaugeFormat() {
Gauge cosetteGauge = () -> 1500d;
- NBMetricGauge nbMetricGauge = new NBMetricGaugeWrapper(NBLabels.forKV("name","cosette","label6", "value6"), cosetteGauge);
+ NBMetricGauge nbMetricGauge = new NBMetricGaugeWrapper(
+ NBLabels.forKV("name","cosette","label6", "value6"),
+ cosetteGauge,
+ "test gauge format",
+ MetricCategory.Verification
+ );
String formatted = PromExpositionFormat.format(nowclock, nbMetricGauge);
assertThat(formatted).matches(Pattern.compile("""
@@ -164,7 +187,12 @@ public class PromExpositionFormatTest {
"""));
Gauge cosetteGauge2 = () -> 2000.0d;
- NBMetricGauge nbMetricGauge2 = new NBMetricGaugeWrapper(NBLabels.forKV("name","cosette2","label7", "value7"), cosetteGauge2);
+ NBMetricGauge nbMetricGauge2 = new NBMetricGaugeWrapper(
+ NBLabels.forKV("name","cosette2","label7", "value7"),
+ cosetteGauge2,
+ "test gauge format 2",
+ MetricCategory.Verification
+ );
String formatted2 = PromExpositionFormat.format(nowclock, nbMetricGauge2);
assertThat(formatted2).matches(Pattern.compile("""
From e3eb6ebe13c314e94f085491a32068ebc86ab5a7 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Thu, 21 Dec 2023 16:09:12 +0000
Subject: [PATCH 025/120] fix: upgrade com.amazonaws:aws-java-sdk-dynamodb from
1.12.596 to 1.12.599
Snyk has created this PR to upgrade com.amazonaws:aws-java-sdk-dynamodb from 1.12.596 to 1.12.599.
See this package in Maven Repository:
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-dynamodb/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/db3dfb82-467b-4263-94f8-28f933540a6d?utm_source=github&utm_medium=referral&page=upgrade-pr
---
adapter-dynamodb/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/adapter-dynamodb/pom.xml b/adapter-dynamodb/pom.xml
index 0c0c0b8a5..865653b40 100644
--- a/adapter-dynamodb/pom.xml
+++ b/adapter-dynamodb/pom.xml
@@ -43,7 +43,7 @@
com.amazonaws
aws-java-sdk-dynamodb
- 1.12.596
+ 1.12.599
From 17254c79e81500d02b4e3b24d217c43a9aa8cfdd Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Thu, 21 Dec 2023 16:50:13 +0000
Subject: [PATCH 026/120] fix: upgrade org.mvel:mvel2 from 2.5.0.Final to
2.5.1.Final
Snyk has created this PR to upgrade org.mvel:mvel2 from 2.5.0.Final to 2.5.1.Final.
See this package in Maven Repository:
https://mvnrepository.com/artifact/org.mvel/mvel2/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/e1ef410a-5a4c-4ee4-9dd2-47ee3e1ab590?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 688644d24..411f708ac 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -330,7 +330,7 @@
org.mvel
mvel2
- 2.5.0.Final
+ 2.5.1.Final
org.antlr
From 080849ba3d556a6824417aebfab3803dc8a7c361 Mon Sep 17 00:00:00 2001
From: Mark Wolters
Date: Thu, 21 Dec 2023 15:36:06 -0400
Subject: [PATCH 027/120] fix for values too small to be represented as Double
causing NaN from StabilityDetector
---
.../scenarios/simframe/stabilization/StatBucket.java | 3 +++
.../scenarios/simframe/stabilization/StatFunctions.java | 3 +++
2 files changed, 6 insertions(+)
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java
index 980138ca8..18e96931c 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java
@@ -43,6 +43,9 @@ public final class StatBucket {
} else if (Double.isNaN(popped)) {
var newMean = mean + ((value - mean) / ringbuf.count());
var dSquaredIncrement = ((value - newMean) * (value - mean));
+ // If this value is too small to be interpreted as a double it gets converted to
+ // zero, which is not what we want. So we use the smallest possible double value
+ if (dSquaredIncrement == 0) dSquaredIncrement = Double.MIN_VALUE;
dSquared += dSquaredIncrement;
mean = newMean;
} else {
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatFunctions.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatFunctions.java
index 77aee3321..e6a1fe90b 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatFunctions.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatFunctions.java
@@ -41,6 +41,9 @@ public class StatFunctions {
*/
public static double sigmoidE4LowPass(double input, double highcut) {
double v = 1.0d/(1.0d + Math.pow(Math.E, (10000.0d * (input - (highcut + 0.001d)))));
+ // If this value is too small to be interpreted as a double it gets converted to
+ // zero, which is not what we want. So we use the smallest possible double value
+ if (v == 0) v = Double.MIN_VALUE;
return v;
}
From d2f302d02c59d1a50318094c2e33520ae9a9152c Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Thu, 21 Dec 2023 14:25:37 -0600
Subject: [PATCH 028/120] fixes for DNN angular1 tests
---
...ular1_vTest.java => DNNAngular1VTest.java} | 47 +++++++++----------
1 file changed, 23 insertions(+), 24 deletions(-)
rename virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/{DNN_angular1_vTest.java => DNNAngular1VTest.java} (51%)
diff --git a/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_vTest.java b/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNNAngular1VTest.java
similarity index 51%
rename from virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_vTest.java
rename to virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNNAngular1VTest.java
index 10e985357..7c9550919 100644
--- a/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNN_angular1_vTest.java
+++ b/virtdata-lib-basics/src/test/java/io/nosqlbench/virtdata/library/basics/shared/vectors/dnn/DNNAngular1VTest.java
@@ -16,54 +16,54 @@
package io.nosqlbench.virtdata.library.basics.shared.vectors.dnn;
-import org.jetbrains.annotations.TestOnly;
import org.junit.jupiter.api.Test;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.*;
-class DNN_angular1_vTest {
+class DNNAngular1VTest {
@Test
public void testCosineSimilarity() {
- assertThat(cosine_similarity(new float[]{1,2,3,4,5,6,7},new float[]{7,6,5,4,3,2,1})).isEqualTo(0.6);
- assertThat(cosine_similarity(new float[]{1,2,3,4,5,6,7},new float[]{1,2,3,4,5,6,7})).isEqualTo(1.0);
+ assertThat(cosine_similarity(new float[]{1, 2, 3, 4, 5, 6, 7}, new float[]{7, 6, 5, 4, 3, 2, 1})).isEqualTo(0.6);
+ assertThat(cosine_similarity(new float[]{1, 2, 3, 4, 5, 6, 7}, new float[]{1, 2, 3, 4, 5, 6, 7})).isEqualTo(1.0);
}
@Test
public void testSimpleGeneration() {
- DNN_angular1_v vs = new DNN_angular1_v(2,100,3);
- assertThat(vs.apply(0)).isEqualTo(new float[]{1,0});
- assertThat(vs.apply(1)).isEqualTo(new float[]{2,2});
- assertThat(vs.apply(2)).isEqualTo(new float[]{3,6});
- assertThat(vs.apply(3)).isEqualTo(new float[]{4,0});
- assertThat(vs.apply(4)).isEqualTo(new float[]{5,5});
- assertThat(vs.apply(5)).isEqualTo(new float[]{6,12});
- assertThat(vs.apply(6)).isEqualTo(new float[]{7,0});
+ DNN_angular1_v vs = new DNN_angular1_v(2, 100, 3);
+ assertThat(vs.apply(0)).isEqualTo(new float[]{1, 0});
+ assertThat(vs.apply(1)).isEqualTo(new float[]{2, 2});
+ assertThat(vs.apply(2)).isEqualTo(new float[]{3, 6});
+ assertThat(vs.apply(3)).isEqualTo(new float[]{4, 0});
+ assertThat(vs.apply(4)).isEqualTo(new float[]{5, 5});
+ assertThat(vs.apply(5)).isEqualTo(new float[]{6, 12});
+ assertThat(vs.apply(6)).isEqualTo(new float[]{7, 0});
}
@Test
public void testBasicAngularVectors() {
- DNN_angular1_v vf = new DNN_angular1_v(10, 100, 7);
+ int M = 7;
+ DNN_angular1_v vf = new DNN_angular1_v(10, 100, M);
float[][] vectors = new float[100][];
for (int i = 0; i < 100; i++) {
vectors[i] = vf.apply(i);
}
int[] same = new int[100];
- Arrays.fill(same,-1);
+ Arrays.fill(same, -1);
for (int vidx = 0; vidx < same.length; vidx++) {
- for (int compare_to = 0; compare_to < vidx; compare_to++) {
- if (cosine_similarity(vectors[vidx],vectors[compare_to])==1.0) {
- same[vidx]=compare_to;
+ for (int compare_to = 0; compare_to <= vidx; compare_to++) {
+ double similarity = cosine_similarity(vectors[vidx], vectors[compare_to]);
+ if (Math.abs(similarity - 1.0d) < 0.00000001d) {
+ same[vidx] = compare_to;
+ break;
}
}
}
- for (int sameas = 0; sameas < same.length; sameas++) {
- assertThat(same[sameas]==sameas%7);
+ for (int sameas = M; sameas < same.length; sameas++) {
+// System.out.println("idx:" + sameas + ", same[sameas] -> " + same[sameas] + " sameas%7=" + sameas % M);
+ assertThat(same[sameas] % M).isEqualTo(sameas % M);
}
}
@@ -76,8 +76,7 @@ class DNN_angular1_vTest {
as += (a[i] * a[i]);
bs += (b[i] * b[i]);
}
- double similarity = dp / (Math.sqrt(as) * Math.sqrt(bs));
- return similarity;
+ return dp / (Math.sqrt(as) * Math.sqrt(bs));
}
}
From af5955e10829ef209013c9d53581d28a9fc04498 Mon Sep 17 00:00:00 2001
From: Mark Wolters
Date: Fri, 22 Dec 2023 13:20:26 -0400
Subject: [PATCH 029/120] fix for NaN occurring with small values
---
.../scenarios/simframe/stabilization/StatBucket.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java
index 18e96931c..ffb98c5a2 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/stabilization/StatBucket.java
@@ -51,8 +51,10 @@ public final class StatBucket {
} else {
var meanIncrement = (value - popped) / ringbuf.count();
var newMean = mean + meanIncrement;
-
var dSquaredIncrement = ((value - popped) * (value - newMean + popped - mean));
+ // If this value is too small to be interpreted as a double it gets converted to
+ // zero, which is not what we want. So we use the smallest possible double value
+ if (dSquaredIncrement == 0) dSquaredIncrement = Double.MIN_VALUE;
var newDSquared = this.dSquared + dSquaredIncrement;
mean = newMean;
dSquared = newDSquared;
From fe9afb1a6d0f9ec4559541a9a87344963a13b03d Mon Sep 17 00:00:00 2001
From: Mark Wolters
Date: Fri, 22 Dec 2023 15:05:13 -0400
Subject: [PATCH 030/120] changed optimo rate param min from 20 to 10, added
more informative exception message
---
.../scenarios/simframe/optimizers/optimo/CMD_optimo.java | 2 +-
.../scenarios/simframe/optimizers/optimo/OptimoParamModel.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
index 4777717c2..1872849aa 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
@@ -83,7 +83,7 @@ public class CMD_optimo extends NBBaseCommand {
OptimoSearchSettings optimoSearchParams = new OptimoSearchSettings(params, model);
- model.add("rate", 20, optimoSearchParams.startRate(), optimoSearchParams.startRate()*4,
+ model.add("rate", 10, optimoSearchParams.startRate(), optimoSearchParams.startRate()*4,
rate -> flywheel.onEvent(ParamChange.of(new CycleRateSpec(rate, 1.1d, SimRateSpec.Verb.restart)))
);
model.add("threads", 10, 50, 2000,
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
index 536696eeb..588005626 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
@@ -29,7 +29,7 @@ public class OptimoParamModel {
public OptimoParamModel add(String name, double min, double initial, double max, DoubleConsumer effector) {
if (min>initial || initial > max) {
- throw new RuntimeException("parameters must be in min
Date: Fri, 22 Dec 2023 13:36:58 -0600
Subject: [PATCH 032/120] refactor session safety metrics into auxiliary
component
---
.../engine/core/lifecycle/session/NBSession.java | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
index 9e98c6e9f..5e3f98ced 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/NBSession.java
@@ -64,7 +64,16 @@ public class NBSession extends NBBaseComponent implements Function, Ex
labelContext.getLabels()
.and("session", sessionName)
);
+
new NBSessionSafetyMetrics(this);
+
+ create().gauge(
+ "session_time",
+ () -> (double)System.nanoTime(),
+ MetricCategory.Core,
+ "session time in nanoseconds"
+ );
+
bufferOrphanedMetrics = true;
}
From b91648e8a34991223eb49ea4653c0c86b3d92d7c Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Fri, 22 Dec 2023 13:37:01 -0600
Subject: [PATCH 033/120] improve error message for parameter bounds
---
.../scenarios/simframe/optimizers/optimo/OptimoParamModel.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
index 536696eeb..588005626 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/OptimoParamModel.java
@@ -29,7 +29,7 @@ public class OptimoParamModel {
public OptimoParamModel add(String name, double min, double initial, double max, DoubleConsumer effector) {
if (min>initial || initial > max) {
- throw new RuntimeException("parameters must be in min {
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java
index 683b87245..273f272e8 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/instruments/MetricCategory.java
@@ -21,6 +21,11 @@ public enum MetricCategory {
* Metrics which are essential to understanding the behavior of any activity
*/
Core,
+ /**
+ * Some metrics are provided only to inform the user of relative or absolute progress,
+ * in terms of cycles remaining or similar
+ */
+ Progress,
/**
* Metrics which mirror configuration data, either static or dynamic during the lifetime
* of an activity, session, or container. These are shared because they may need to be known
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormat.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormat.java
index f9de51827..be97ec94e 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormat.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormat.java
@@ -17,6 +17,8 @@
package io.nosqlbench.nb.api.engine.metrics.reporters;
import com.codahale.metrics.*;
+import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
+import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager;
@@ -26,7 +28,9 @@ import java.io.IOException;
import java.io.Writer;
import java.time.Clock;
import java.time.Instant;
+import java.util.Arrays;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* Format NBMetrics according to the prometheus exposition format.
@@ -59,6 +63,16 @@ public class PromExpositionFormat {
for (final Object metric : metrics) {
NBLabels labels = null;
+ if (metric instanceof NBMetric nbm) {
+ MetricCategory[] categories = nbm.getCategories();
+ buffer.append("# CATEGORIES: ")
+ .append(Arrays.stream(categories).map(MetricCategory::name).collect(Collectors.joining(", ")))
+ .append("\n");
+ String description = nbm.getDescription();
+ buffer.append("# DESCRIPTION: ").append(description).append("\n");
+
+ }
+
if (metric instanceof final NBLabeledElement labeled) labels = labeled.getLabels();
else throw new RuntimeException(
"Unknown label set for metric type '" + metric.getClass().getCanonicalName() + '\''
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java
index 587ea2d4c..c88f5ff36 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromPushReporterComponent.java
@@ -33,8 +33,10 @@ import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandler;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
@@ -49,18 +51,18 @@ public class PromPushReporterComponent extends PeriodicTaskComponent {
private String bearerToken;
public PromPushReporterComponent(NBComponent parent, String endpoint, long intervalMs, NBLabels nbLabels) {
- super(parent,nbLabels.and("_type","prom-push"),intervalMs,true,"REPORT-PROMPUSH");
+ super(parent, nbLabels.and("_type", "prom-push"), intervalMs, true, "REPORT-PROMPUSH");
String jobname = getLabels().valueOfOptional("jobname").orElse("default");
String instance = getLabels().valueOfOptional("instance").orElse("default");
- if (jobname.equals("default")||instance.equals("default")) {
+ if (jobname.equals("default") || instance.equals("default")) {
logger.warn("It is highly recommended that you set a value for labels jobname and instance other than 'default'.");
}
if (endpoint.matches("victoria:[a-zA-Z0-9._-]+:[0-9]+")) {
String[] parts = endpoint.split(":", 2);
- endpoint = "https://"+parts[1]+"/api/v1/import/prometheus/metrics/job/JOBNAME/instance/INSTANCE";
+ endpoint = "https://" + parts[1] + "/api/v1/import/prometheus/metrics/job/JOBNAME/instance/INSTANCE";
}
- endpoint=endpoint.replace("JOBNAME",jobname).replace("INSTANCE",instance);
+ endpoint = endpoint.replace("JOBNAME", jobname).replace("INSTANCE", instance);
if (!endpoint.contains(jobname)) {
throw new BasicError("Mismatch between jobname in prompush URI and specified jobname label. You should use the short form for --report-prompush-to victoria:addr:port and set the jobname with --add-labels");
}
@@ -109,9 +111,24 @@ public class PromPushReporterComponent extends PeriodicTaskComponent {
remainingRetries--;
final HttpClient client = getCachedClient();
final HttpRequest.Builder rb = HttpRequest.newBuilder().uri(uri);
- if (bearerToken!=null) {
+ if (bearerToken != null) {
rb.setHeader("Authorization", "Bearer " + bearerToken);
}
+ getComponentProp("prompush_cache")
+ .map(cache -> Path.of(getComponentProp("logsdir").orElse("."))
+ .resolve("cache")).ifPresent(
+ prompush_cache_path -> {
+ try {
+ Files.writeString(
+ prompush_cache_path,
+ exposition,
+ StandardOpenOption.TRUNCATE_EXISTING,
+ StandardOpenOption.CREATE,
+ StandardOpenOption.WRITE);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ });
final HttpRequest request = rb.POST(BodyPublishers.ofString(exposition)).build();
final BodyHandler handler = HttpResponse.BodyHandlers.ofString();
HttpResponse response = null;
From ecdf38ebe89e4ac1eaddbb1aadecd7416a4d6bbe Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Fri, 22 Dec 2023 13:41:08 -0600
Subject: [PATCH 035/120] unit test fixes for doc format
---
.../metrics/reporters/PromExpositionFormatTest.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java
index 674d2aab9..c20fbecef 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/engine/metrics/reporters/PromExpositionFormatTest.java
@@ -55,6 +55,8 @@ public class PromExpositionFormatTest {
String buffer = PromExpositionFormat.format(nowclock, counter);
assertThat(buffer).matches(Pattern.compile("""
+ # CATEGORIES: Verification
+ # DESCRIPTION: test counter format
# TYPE counter_test_2342_total counter
counter_test_2342_total\\{origin="mars"} \\d+ \\d+
"""));
@@ -77,6 +79,8 @@ public class PromExpositionFormatTest {
String formatted = PromExpositionFormat.format(nowclock, nbHistogram);
assertThat(formatted).matches(Pattern.compile("""
+ # CATEGORIES: Verification
+ # DESCRIPTION: test histogram format
# TYPE mynameismud_total counter
mynameismud_total\\{label3="value3"} 0 \\d+
# TYPE mynameismud histogram
@@ -116,6 +120,8 @@ public class PromExpositionFormatTest {
String formatted = PromExpositionFormat.format(nowclock, nbMetricTimer);
assertThat(formatted).matches(Pattern.compile("""
+ # CATEGORIES: Verification
+ # DESCRIPTION: test timer format
# TYPE monsieurmarius_total counter
monsieurmarius_total\\{label4="value4"} 1000 \\d+
# TYPE monsieurmarius histogram
@@ -157,6 +163,8 @@ public class PromExpositionFormatTest {
String formatted = PromExpositionFormat.format(nowclock, nbMetricMeter);
assertThat(formatted).matches(Pattern.compile("""
+ # CATEGORIES: Verification
+ # DESCRIPTION: test meter format
# TYPE eponine_total counter
eponine_total\\{label5="value5"} 0 \\d+
# TYPE eponine_1mRate gauge
@@ -182,6 +190,8 @@ public class PromExpositionFormatTest {
String formatted = PromExpositionFormat.format(nowclock, nbMetricGauge);
assertThat(formatted).matches(Pattern.compile("""
+ # CATEGORIES: Verification
+ # DESCRIPTION: test gauge format
# TYPE cosette gauge
cosette\\{label6="value6"} 1500.0
"""));
@@ -196,6 +206,8 @@ public class PromExpositionFormatTest {
String formatted2 = PromExpositionFormat.format(nowclock, nbMetricGauge2);
assertThat(formatted2).matches(Pattern.compile("""
+ # CATEGORIES: Verification
+ # DESCRIPTION: test gauge format 2
# TYPE cosette2 gauge
cosette2\\{label7="value7"} 2000.0
"""));
From b9008c75f58b76b4572de6774ac067a72f004a47 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Thu, 28 Dec 2023 17:15:09 +0000
Subject: [PATCH 036/120] fix: upgrade io.dropwizard.metrics:metrics-core from
4.2.22 to 4.2.23
Snyk has created this PR to upgrade io.dropwizard.metrics:metrics-core from 4.2.22 to 4.2.23.
See this package in Maven Repository:
https://mvnrepository.com/artifact/io.dropwizard.metrics/metrics-core/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/024e32ec-7f80-485c-b7bf-f69d45f933ce?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 688644d24..4b68ba0e1 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -127,7 +127,7 @@
io.dropwizard.metrics
metrics-core
- 4.2.22
+ 4.2.23
org.apache.commons
From 5b5a2cc26a6a4987957b37f568454a874a3e4a1c Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Thu, 28 Dec 2023 19:55:06 +0000
Subject: [PATCH 037/120] fix: upgrade io.dropwizard.metrics:metrics-graphite
from 4.2.22 to 4.2.23
Snyk has created this PR to upgrade io.dropwizard.metrics:metrics-graphite from 4.2.22 to 4.2.23.
See this package in Maven Repository:
https://mvnrepository.com/artifact/io.dropwizard.metrics/metrics-graphite/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/6a966a50-08ee-405a-ae9a-1cfab95ff2c5?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 688644d24..b4b5237d5 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -122,7 +122,7 @@
io.dropwizard.metrics
metrics-graphite
- 4.2.22
+ 4.2.23
io.dropwizard.metrics
From 945638e720ec9091ff075aae6f4d5b2494be1fa4 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Mon, 1 Jan 2024 18:54:49 +0000
Subject: [PATCH 038/120] fix: upgrade net.java.dev.jna:jna-platform from
5.13.0 to 5.14.0
Snyk has created this PR to upgrade net.java.dev.jna:jna-platform from 5.13.0 to 5.14.0.
See this package in Maven Repository:
https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform/
See this project in Snyk:
https://app.snyk.io/org/nosqlbench/project/024e32ec-7f80-485c-b7bf-f69d45f933ce?utm_source=github&utm_medium=referral&page=upgrade-pr
---
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 688644d24..aeefe09ae 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -101,7 +101,7 @@
net.java.dev.jna
jna-platform
- 5.13.0
+ 5.14.0
org.junit.jupiter
From 01bd518612f323b6ce52fc29126640818e01b7fa Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 2 Jan 2024 11:34:05 -0600
Subject: [PATCH 039/120] move simrate to its own package
---
.../io/nosqlbench/adapter/diag/DiagOpDispenser.java | 2 +-
.../java/io/nosqlbench/adapter/diag/DiagSpace.java | 2 +-
.../adapter/diag/optasks/DiagTask_diagrate.java | 6 +++---
.../engine/api/activityapi/core/Activity.java | 2 +-
.../{ratelimits => }/simrate/CycleRateSpec.java | 2 +-
.../{ratelimits => simrate}/RateLimiter.java | 4 ++--
.../{ratelimits => simrate}/RateLimiters.java | 4 +---
.../activityapi/{ratelimits => }/simrate/SimRate.java | 3 +--
.../{ratelimits => }/simrate/SimRateSpec.java | 2 +-
.../{ratelimits => }/simrate/SimThreads.java | 2 +-
.../{ratelimits => }/simrate/StrideRateSpec.java | 2 +-
.../engine/api/activityimpl/SimpleActivity.java | 10 +++++-----
.../engine/api/activityimpl/motor/CoreMotor.java | 6 +-----
.../api/activityimpl/uniform/StandardActivity.java | 4 ++--
.../api/activityapi/ratelimits/SimRateSpecTest.java | 2 +-
.../nosqlbench/engine/sandbox/SimRateSanityTest.java | 4 ++--
.../java/io/nosqlbench/engine/sandbox/SimRateTest.java | 4 ++--
.../nbr/examples/injava/NB_cocycledelay_bursty.java | 2 +-
.../nosqlbench/scenarios/simframe/SimFrameUtils.java | 4 ++--
.../simframe/optimizers/optimo/CMD_optimo.java | 4 ++--
.../optimizers/planners/findmax/FindmaxPlanner.java | 6 ++----
.../optimizers/planners/ratchet/RatchetPlanner.java | 6 ++----
.../optimizers/planners/rcurve/RCurvePlanner.java | 4 ++--
23 files changed, 38 insertions(+), 49 deletions(-)
rename engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/{ratelimits => }/simrate/CycleRateSpec.java (94%)
rename engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/{ratelimits => simrate}/RateLimiter.java (95%)
rename engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/{ratelimits => simrate}/RateLimiters.java (86%)
rename engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/{ratelimits => }/simrate/SimRate.java (99%)
rename engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/{ratelimits => }/simrate/SimRateSpec.java (99%)
rename engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/{ratelimits => }/simrate/SimThreads.java (97%)
rename engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/{ratelimits => }/simrate/StrideRateSpec.java (94%)
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java
index 203604981..6c3c72bc4 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagOpDispenser.java
@@ -23,7 +23,7 @@ import io.nosqlbench.nb.api.config.standard.NBConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfiguration;
import io.nosqlbench.nb.api.config.standard.NBReconfigurable;
import io.nosqlbench.nb.api.components.core.NBParentComponentInjection;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiter;
import io.nosqlbench.nb.annotations.ServiceSelector;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagSpace.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagSpace.java
index a41b04898..7d0a8928a 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagSpace.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/DiagSpace.java
@@ -17,7 +17,7 @@
package io.nosqlbench.adapter.diag;
import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiter;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import io.nosqlbench.nb.api.config.standard.ConfigModel;
import io.nosqlbench.nb.api.config.standard.NBConfigModel;
diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_diagrate.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_diagrate.java
index 37c50367d..eef207739 100644
--- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_diagrate.java
+++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_diagrate.java
@@ -16,9 +16,9 @@
package io.nosqlbench.adapter.diag.optasks;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiters;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiter;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiters;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.api.config.standard.*;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
index 9dcd74d71..5ab967f9f 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/core/Activity.java
@@ -25,7 +25,7 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.filters.IntPredicateDispens
import io.nosqlbench.engine.api.activityapi.errorhandling.ErrorMetrics;
import io.nosqlbench.engine.api.activityapi.input.InputDispenser;
import io.nosqlbench.engine.api.activityapi.output.OutputDispenser;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiter;
import io.nosqlbench.engine.api.activityimpl.SimpleActivity;
import io.nosqlbench.engine.api.activityimpl.motor.RunStateTally;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/CycleRateSpec.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/CycleRateSpec.java
similarity index 94%
rename from engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/CycleRateSpec.java
rename to engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/CycleRateSpec.java
index b4c0b39b5..cf386ff31 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/CycleRateSpec.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/CycleRateSpec.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
+package io.nosqlbench.engine.api.activityapi.simrate;
import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiter.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/RateLimiter.java
similarity index 95%
rename from engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiter.java
rename to engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/RateLimiter.java
index 01f95c7eb..8112c90ad 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiter.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/RateLimiter.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.api.activityapi.ratelimits;
+package io.nosqlbench.engine.api.activityapi.simrate;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import java.time.Duration;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/RateLimiters.java
similarity index 86%
rename from engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java
rename to engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/RateLimiters.java
index 1a52e0990..676a873e6 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiters.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/RateLimiters.java
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.api.activityapi.ratelimits;
+package io.nosqlbench.engine.api.activityapi.simrate;
import io.nosqlbench.nb.api.components.core.NBComponent;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRate;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimRate.java
similarity index 99%
rename from engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
rename to engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimRate.java
index d93430e13..9488b60d6 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRate.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimRate.java
@@ -14,13 +14,12 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
+package io.nosqlbench.engine.api.activityapi.simrate;
import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.labels.NBLabels;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.core.NBComponent;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRateSpec.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimRateSpec.java
similarity index 99%
rename from engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRateSpec.java
rename to engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimRateSpec.java
index 710f0fa79..6dfdca1c6 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimRateSpec.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimRateSpec.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
+package io.nosqlbench.engine.api.activityapi.simrate;
import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap;
import io.nosqlbench.nb.api.engine.util.Unit;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimThreads.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimThreads.java
similarity index 97%
rename from engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimThreads.java
rename to engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimThreads.java
index ae42e790e..caca422a6 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/SimThreads.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/SimThreads.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
+package io.nosqlbench.engine.api.activityapi.simrate;
import java.util.concurrent.Semaphore;
import java.util.function.Function;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/StrideRateSpec.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/StrideRateSpec.java
similarity index 94%
rename from engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/StrideRateSpec.java
rename to engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/StrideRateSpec.java
index 64791cb31..23e679176 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/simrate/StrideRateSpec.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityapi/simrate/StrideRateSpec.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.api.activityapi.ratelimits.simrate;
+package io.nosqlbench.engine.api.activityapi.simrate;
import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
index 706cb3560..ca4670583 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
@@ -29,9 +29,9 @@ import io.nosqlbench.engine.api.activityapi.errorhandling.ErrorMetrics;
import io.nosqlbench.engine.api.activityapi.errorhandling.modular.NBErrorHandler;
import io.nosqlbench.engine.api.activityapi.planning.OpSequence;
import io.nosqlbench.engine.api.activityapi.planning.SequencerType;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiters;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiters;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import io.nosqlbench.adapters.api.activityimpl.OpDispenser;
import io.nosqlbench.adapters.api.activityimpl.OpMapper;
import io.nosqlbench.nb.api.labels.NBLabels;
@@ -42,12 +42,12 @@ import io.nosqlbench.engine.api.activityapi.cyclelog.filters.IntPredicateDispens
import io.nosqlbench.engine.api.activityapi.input.InputDispenser;
import io.nosqlbench.engine.api.activityapi.output.OutputDispenser;
import io.nosqlbench.engine.api.activityapi.planning.SequencePlanner;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiter;
import io.nosqlbench.adapters.api.activityconfig.OpsLoader;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplateFormat;
import io.nosqlbench.adapters.api.activityconfig.yaml.OpsDocList;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.StrideRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.StrideRateSpec;
import io.nosqlbench.engine.api.activityimpl.motor.RunStateTally;
import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter;
import io.nosqlbench.adapters.api.activityimpl.uniform.DryRunOpDispenserWrapper;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java
index 82d76c614..ddaf76329 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/motor/CoreMotor.java
@@ -15,20 +15,16 @@
*/
package io.nosqlbench.engine.api.activityimpl.motor;
-import com.codahale.metrics.Counter;
import com.codahale.metrics.Timer;
import io.nosqlbench.engine.api.activityapi.core.*;
-import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.TrackedOp;
-import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.op_output.StrideOutputConsumer;
import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResultSegmentBuffer;
import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResultsSegment;
import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegment;
import io.nosqlbench.engine.api.activityimpl.MotorState;
import io.nosqlbench.engine.api.activityapi.core.ops.fluent.OpTracker;
-import io.nosqlbench.engine.api.activityapi.core.ops.fluent.OpTrackerImpl;
import io.nosqlbench.engine.api.activityapi.input.Input;
import io.nosqlbench.engine.api.activityapi.output.Output;
-import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter;
+import io.nosqlbench.engine.api.activityapi.simrate.RateLimiter;
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
index 31cadabe1..35d1642b9 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java
@@ -39,8 +39,8 @@ import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.nb.api.components.events.SetThreads;
import io.nosqlbench.engine.api.activityapi.core.ActivityDefObserver;
import io.nosqlbench.engine.api.activityapi.planning.OpSequence;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.StrideRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.StrideRateSpec;
import io.nosqlbench.engine.api.activityimpl.SimpleActivity;
import io.nosqlbench.nb.annotations.ServiceSelector;
import org.apache.logging.log4j.LogManager;
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/SimRateSpecTest.java b/engine-core/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/SimRateSpecTest.java
index d6438d6a6..1ca9a6c1c 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/SimRateSpecTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/SimRateSpecTest.java
@@ -16,7 +16,7 @@
package io.nosqlbench.engine.api.activityapi.ratelimits;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java
index 761624069..a2498a4a3 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateSanityTest.java
@@ -18,8 +18,8 @@ package io.nosqlbench.engine.sandbox;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.components.core.NBComponent;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRate;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRate;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import org.junit.jupiter.api.Disabled;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java
index dddef78be..17a9551cd 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/sandbox/SimRateTest.java
@@ -18,8 +18,8 @@ package io.nosqlbench.engine.sandbox;
import io.nosqlbench.nb.api.config.standard.TestComponent;
import io.nosqlbench.nb.api.components.core.NBComponent;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRate;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRate;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.openjdk.jmh.annotations.*;
diff --git a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java
index eda7766f6..1d98d41e2 100644
--- a/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java
+++ b/nbr-examples/src/test/java/io/nosqlbench/nbr/examples/injava/NB_cocycledelay_bursty.java
@@ -24,7 +24,7 @@ import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
import io.nosqlbench.nb.api.components.core.NBComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.engine.api.activityapi.core.Activity;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/SimFrameUtils.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/SimFrameUtils.java
index 4da4f34e5..388e78c4d 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/SimFrameUtils.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/SimFrameUtils.java
@@ -17,8 +17,8 @@
package io.nosqlbench.scenarios.simframe;
import io.nosqlbench.engine.api.activityapi.core.Activity;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
index 1872849aa..56564e13b 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/optimo/CMD_optimo.java
@@ -24,8 +24,8 @@ import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.nb.api.components.events.SetThreads;
import io.nosqlbench.engine.api.activityapi.core.Activity;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.scenarios.simframe.SimFrameUtils;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
index ec27fc4c0..642f5ec43 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/findmax/FindmaxPlanner.java
@@ -17,16 +17,14 @@
package io.nosqlbench.scenarios.simframe.optimizers.planners.findmax;
import io.nosqlbench.engine.api.activityapi.core.Activity;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.scenarios.simframe.capture.JournalView;
import io.nosqlbench.scenarios.simframe.planning.SimFrame;
import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import java.util.Comparator;
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java
index 8e186c7ea..ca0f3d2e3 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/ratchet/RatchetPlanner.java
@@ -17,16 +17,14 @@
package io.nosqlbench.scenarios.simframe.optimizers.planners.ratchet;
import io.nosqlbench.engine.api.activityapi.core.Activity;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
import io.nosqlbench.scenarios.simframe.capture.JournalView;
import io.nosqlbench.scenarios.simframe.planning.SimFrame;
import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
public class RatchetPlanner extends SimFramePlanner {
public RatchetPlanner(NBBaseComponent parent, NBCommandParams params) {
diff --git a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
index 9c8de4000..10c4fa9fb 100644
--- a/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
+++ b/nbr/src/main/java/io/nosqlbench/scenarios/simframe/optimizers/planners/rcurve/RCurvePlanner.java
@@ -17,8 +17,8 @@
package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
import io.nosqlbench.engine.api.activityapi.core.Activity;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
-import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.CycleRateSpec;
+import io.nosqlbench.engine.api.activityapi.simrate.SimRateSpec;
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
import io.nosqlbench.nb.api.components.core.NBBaseComponent;
import io.nosqlbench.nb.api.components.events.ParamChange;
From a3283ab06f0398b6b45732d5740534529531b6ec Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 2 Jan 2024 12:27:43 -0600
Subject: [PATCH 040/120] remove read-only config parameter
---
mvn-defaults/pom.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml
index acd3866e3..cb7c6c34e 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -641,7 +641,6 @@
21
${javadoc.name}
${javadoc.name}
- false
false
false
false
From 3fd98f0044ce8794c845256b79dcee13398946a1 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 2 Jan 2024 12:36:03 -0600
Subject: [PATCH 041/120] testing workflow fixes
---
.github/workflows/build.yml | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 1177173e1..196d6e95e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -14,24 +14,20 @@ jobs:
build:
runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
name: checkout nosqlbench
- with:
- node-version: '16'
- - uses: actions/setup-java@v3
+ - uses: actions/setup-java@v4
name: setup java
with:
- node-version: '16'
- java-version: '21'
- java-package: jdk
architecture: x64
distribution: 'oracle'
+ java-package: jdk
+ java-version: '21'
- name: Cache Maven packages
- uses: actions/cache@v1
+ uses: actions/cache@v3
with:
- node-version: '16'
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
@@ -71,9 +67,8 @@ jobs:
- name: upload docs artifact
if: success()
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- node-version: '16'
name: exported-docs
path: exported_docs.zip
@@ -90,9 +85,8 @@ jobs:
run: git config --global user.name "${{ secrets.NBDROID_NAME }}"
- name: download exported_docs
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
- node-version: '16'
name: exported-docs
- run: ls -la
From 49d2c41c9fff763996a62793c0be4ae261df6583 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 2 Jan 2024 12:47:57 -0600
Subject: [PATCH 042/120] add missing logfile for main and test scope
---
.../src/{test/resources => main}/log4j2.xml | 0
nb-api/src/test/resources/log4j2-test.xml | 56 +++++++++++++++++++
2 files changed, 56 insertions(+)
rename nb-api/src/{test/resources => main}/log4j2.xml (100%)
create mode 100644 nb-api/src/test/resources/log4j2-test.xml
diff --git a/nb-api/src/test/resources/log4j2.xml b/nb-api/src/main/log4j2.xml
similarity index 100%
rename from nb-api/src/test/resources/log4j2.xml
rename to nb-api/src/main/log4j2.xml
diff --git a/nb-api/src/test/resources/log4j2-test.xml b/nb-api/src/test/resources/log4j2-test.xml
new file mode 100644
index 000000000..48588be00
--- /dev/null
+++ b/nb-api/src/test/resources/log4j2-test.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %d %p %C{1.} [%t] %m%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From dfcbb1826c3ccb9ffa6c5aaaa07c2437dc430130 Mon Sep 17 00:00:00 2001
From: Jonathan Shook
Date: Tue, 2 Jan 2024 12:50:14 -0600
Subject: [PATCH 043/120] minor copyright update
---
nb-api/src/main/log4j2.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nb-api/src/main/log4j2.xml b/nb-api/src/main/log4j2.xml
index 003d82533..1f356bc2d 100644
--- a/nb-api/src/main/log4j2.xml
+++ b/nb-api/src/main/log4j2.xml
@@ -1,6 +1,6 @@