From def7e99ed83384331fd00fa86c8ae5b29ed853e1 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 28 Aug 2023 16:15:21 -0500 Subject: [PATCH] allow ops to layer labels within activity labels --- .../adapters/api/templating/ParsedOp.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java index eb585cf87..ecf58d013 100644 --- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java +++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/templating/ParsedOp.java @@ -17,6 +17,7 @@ package io.nosqlbench.adapters.api.templating; import io.nosqlbench.adapters.api.activityconfig.yaml.OpTemplate; +import io.nosqlbench.api.config.NBLabelSpec; import io.nosqlbench.api.config.NBLabeledElement; import io.nosqlbench.api.config.NBLabels; import io.nosqlbench.api.config.fieldreaders.DynamicFieldReader; @@ -328,19 +329,19 @@ public class ParsedOp implements LongFunction>, NBLabeledElement, * The activity configuration, used to resolve nested config parameters * @param preprocessors * Map->Map transformers. - * @param labels */ public ParsedOp( OpTemplate opTemplate, NBConfiguration activityCfg, List, Map>> preprocessors, - NBLabeledElement parent) { + NBLabeledElement parent + ) { this._opTemplate = opTemplate; this.activityCfg = activityCfg; - labels=parent.getLabels().and("op", this.getName()); Map map = opTemplate.getOp().orElseThrow(() -> new OpConfigError("ParsedOp constructor requires a non-null value for the op field, but it was missing.")); + for (Function, Map> preprocessor : preprocessors) { map = preprocessor.apply(map); } @@ -353,6 +354,19 @@ public class ParsedOp implements LongFunction>, NBLabeledElement, activityCfg.getMap()) ); + NBLabels opLabels = parent.getLabels().andTypes("op", this.getName()); + if (tmap.isStatic("labels")) { + Object labelSpecObject = tmap.takeStaticValue("labels", Object.class); + if (labelSpecObject instanceof String labelsSpec) { + NBLabels op_specific_labels = NBLabelSpec.parseLabels(labelsSpec); + opLabels=opLabels.and(op_specific_labels); + } else { + throw new OpConfigError("parsing labels as type '" + labelSpecObject.getClass().getSimpleName() +"' is not supported."); + } + } else if (tmap.isDynamic("labels")) { + throw new OpConfigError("Labels may not be dynamic."); + } + this.labels=opLabels; }