From 50b7416c18c70d46f639895fd6d8b669673eac6c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Thu, 18 May 2023 14:57:36 -0500 Subject: [PATCH] refactor diag tasks to better support labels --- .../adapter/diag/DiagOpDispenser.java | 5 +- .../adapter/diag/optasks/BaseDiagTask.java | 54 +++++++++++++++++++ .../adapter/diag/optasks/DiagTask.java | 14 +++-- .../diag/optasks/DiagTask_diagrate.java | 15 +----- .../diag/optasks/DiagTask_erroroncycle.java | 11 +--- .../diag/optasks/DiagTask_initdelay.java | 13 +---- .../adapter/diag/optasks/DiagTask_log.java | 11 +--- .../adapter/diag/optasks/DiagTask_noop.java | 11 ++-- 8 files changed, 78 insertions(+), 56 deletions(-) create mode 100644 adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java 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 87ad8e76f..12b85a12c 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -62,10 +62,13 @@ public class DiagOpDispenser extends BaseOpDispenser implement taskcfg.computeIfAbsent("name",l -> taskname); taskcfg.computeIfAbsent("type",l -> taskname); String optype = taskcfg.remove("type").toString(); + String opname = taskcfg.get("name").toString(); // Dynamically load the named task instance, based on the op field key AKA the taskname // and ensure that exactly one is found or throw an error DiagTask task = ServiceSelector.of(optype, ServiceLoader.load(DiagTask.class)).getOne(); + task.setLabelsFrom(op); + task.setName(opname); // Load the configuration model of the dynamically loaded task for type-safe configuration NBConfigModel cfgmodel = task.getConfigModel(); diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java new file mode 100644 index 000000000..a20ece395 --- /dev/null +++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/BaseDiagTask.java @@ -0,0 +1,54 @@ +/* + * 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.adapter.diag.optasks; + +import io.nosqlbench.api.config.NBLabeledElement; +import io.nosqlbench.api.config.NBLabels; + +import java.util.Map; + +public abstract class BaseDiagTask implements DiagTask { + private NBLabeledElement parentLabels; + private String name; + + @Override + public abstract Map apply(Long cycle, Map opstate); + + @Override + public NBLabels getLabels() { + return parentLabels.getLabels(); + } + + public void setName(String name) { + this.name = name; + } + + @Override + public void setLabelsFrom(NBLabeledElement labeledElement) { + this.parentLabels = labeledElement; + } + + @Override + public NBLabeledElement getParentLabels() { + return parentLabels; + } + + public String getName() { + return this.name; + } + +} diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java index bc452ac9c..b8d19423b 100644 --- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java +++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,9 +16,9 @@ package io.nosqlbench.adapter.diag.optasks; -import io.nosqlbench.api.config.NBNamedElement; -import io.nosqlbench.api.config.standard.NBReconfigurable; +import io.nosqlbench.api.config.NBLabeledElement; import io.nosqlbench.api.config.standard.NBConfigurable; +import io.nosqlbench.api.config.standard.NBReconfigurable; import java.util.Map; import java.util.function.BiFunction; @@ -44,7 +44,13 @@ import java.util.function.BiFunction; public interface DiagTask extends BiFunction, Map>, NBConfigurable, - NBNamedElement + NBLabeledElement { Map apply(Long cycle, Map opstate); + + void setName(String opname); + + void setLabelsFrom(NBLabeledElement labeledElement); + + NBLabeledElement getParentLabels(); } 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 768045935..d383da70c 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,8 +16,6 @@ package io.nosqlbench.adapter.diag.optasks; -import io.nosqlbench.api.config.NBLabeledElement; -import io.nosqlbench.api.config.NBLabels; import io.nosqlbench.api.config.standard.*; import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiter; import io.nosqlbench.engine.api.activityapi.ratelimits.RateLimiters; @@ -27,7 +25,7 @@ import io.nosqlbench.nb.annotations.Service; import java.util.Map; @Service(value = DiagTask.class, selector = "diagrate") -public class DiagTask_diagrate implements DiagTask, NBReconfigurable, NBLabeledElement { +public class DiagTask_diagrate extends BaseDiagTask implements NBReconfigurable { private String name; private RateLimiter rateLimiter; private RateSpec rateSpec; @@ -73,15 +71,4 @@ public class DiagTask_diagrate implements DiagTask, NBReconfigurable, NBLabeledE rateLimiter.maybeWaitForOp(); return stringObjectMap; } - - - @Override - public String getName() { - return name; - } - - @Override - public NBLabels getLabels() { - return NBLabels.forKV("diagop", name); - } } diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_erroroncycle.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_erroroncycle.java index a8739cca4..7b86a0a15 100644 --- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_erroroncycle.java +++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_erroroncycle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,14 +29,12 @@ import java.util.Map; * of this owning operation for a number of milliseconds. */ @Service(value = DiagTask.class, selector = "erroroncycle") -public class DiagTask_erroroncycle implements DiagTask { +public class DiagTask_erroroncycle extends BaseDiagTask { - private String name; private long error_on_cycle; @Override public void applyConfig(NBConfiguration cfg) { - this.name = cfg.get("name", String.class); error_on_cycle = cfg.get("erroroncycle", long.class); } @@ -55,9 +53,4 @@ public class DiagTask_erroroncycle implements DiagTask { } return Map.of(); } - - @Override - public String getName() { - return name; - } } diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_initdelay.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_initdelay.java index 2f11adebb..03b22f0ce 100644 --- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_initdelay.java +++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_initdelay.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,13 +29,10 @@ import java.util.Map; * of this owning operation for a number of milliseconds. */ @Service(value= DiagTask.class,selector = "initdelay") -public class DiagTask_initdelay implements DiagTask { - - private String name; +public class DiagTask_initdelay extends BaseDiagTask { @Override public void applyConfig(NBConfiguration cfg) { - this.name = cfg.get("name",String.class); long initdelay = cfg.get("initdelay",long.class); try { Thread.sleep(initdelay); @@ -54,12 +51,6 @@ public class DiagTask_initdelay implements DiagTask { @Override public Map apply(Long aLong, Map stringObjectMap) { - return Map.of(); } - - @Override - public String getName() { - return name; - } } diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_log.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_log.java index df8d6ab3e..f960179ca 100644 --- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_log.java +++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_log.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,12 +25,11 @@ import org.apache.logging.log4j.Logger; import java.util.Map; @Service(value= DiagTask.class,selector="log") -public class DiagTask_log implements DiagTask, NBConfigurable { +public class DiagTask_log extends BaseDiagTask { private final static Logger logger = LogManager.getLogger("DIAG"); private Level level; private long modulo; private long interval; - private String name; @Override public Map apply(Long aLong, Map stringObjectMap) { @@ -43,7 +42,6 @@ public class DiagTask_log implements DiagTask, NBConfigurable { @Override public void applyConfig(NBConfiguration cfg) { String level = cfg.getOptional("level").orElse("INFO"); - this.name = cfg.get("name"); this.level = Level.valueOf(level); this.modulo = cfg.get("modulo",long.class); this.interval = cfg.get("interval",long.class); @@ -58,9 +56,4 @@ public class DiagTask_log implements DiagTask, NBConfigurable { .add(Param.defaultTo("interval",1000)) .asReadOnly(); } - - @Override - public String getName() { - return name; - } } diff --git a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_noop.java b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_noop.java index 5f56bb65c..9806a9f58 100644 --- a/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_noop.java +++ b/adapter-diag/src/main/java/io/nosqlbench/adapter/diag/optasks/DiagTask_noop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 nosqlbench + * Copyright (c) 2022-2023 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,22 +16,21 @@ package io.nosqlbench.adapter.diag.optasks; -import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.api.config.standard.ConfigModel; import io.nosqlbench.api.config.standard.NBConfigModel; import io.nosqlbench.api.config.standard.NBConfiguration; import io.nosqlbench.api.config.standard.Param; +import io.nosqlbench.nb.annotations.Service; import java.util.Map; @Service(value= DiagTask.class,selector = "noop") -public class DiagTask_noop implements DiagTask { +public class DiagTask_noop extends BaseDiagTask { private String name; @Override public void applyConfig(NBConfiguration cfg) { - this.name = cfg.get("name",String.class); } @Override @@ -46,8 +45,4 @@ public class DiagTask_noop implements DiagTask { return Map.of(); } - @Override - public String getName() { - return name; - } }