This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 275e090f3755f042dbf8d17e136cdfb1151e768f
Author: Alex Heneveld <[email protected]>
AuthorDate: Tue Jun 6 23:12:59 2023 +0100

    make unique tag more configurable and smarter default for workflow sensors 
and policies
---
 .../apache/brooklyn/core/workflow/WorkflowPolicy.java  | 18 +++++++++++++++---
 .../apache/brooklyn/core/workflow/WorkflowSensor.java  | 13 +++++++++++++
 .../steps/variables/TransformVariableWorkflowStep.java |  1 +
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git 
a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java 
b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
index 3eadfd568d..88324b3d9b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
@@ -59,6 +59,10 @@ public class WorkflowPolicy<T> extends AbstractPolicy {
     public static final ConfigKey<Map<String,Object>> INPUT = 
WorkflowCommonConfig.INPUT;
     public static final ConfigKey<List<Object>> STEPS = 
WorkflowCommonConfig.STEPS;
 
+    public static final ConfigKey<String> UNIQUE_TAG_CAMEL = 
WorkflowSensor.UNIQUE_TAG_CAMEL;
+    public static final ConfigKey<String> UNIQUE_TAG_UNDERSCORE = 
WorkflowSensor.UNIQUE_TAG_UNDERSCORE;
+    public static final ConfigKey<String> UNIQUE_TAG_DASH = 
WorkflowSensor.UNIQUE_TAG_DASH;
+
     protected transient Poller<Object> poller;
 
     // ? - do we need to have an option not to run when added?
@@ -110,18 +114,26 @@ public class WorkflowPolicy<T> extends AbstractPolicy {
 
     @Override
     public void init() {
-        initUniqueTag();
         super.init();
     }
 
     public String initUniqueTag() {
-        if (uniqueTag==null) uniqueTag = "workflow-policy-hash-"+ 
Objects.hash(getDisplayName(), config().getBag());
+        return getUniqueTag();
+    }
+
+    @Override
+    public String getUniqueTag() {
+        if (uniqueTag==null) {
+            uniqueTag = WorkflowSensor.getUniqueTag(config().getBag(), null);
+            if (uniqueTag==null) {
+                uniqueTag = "workflow-policy-hash-" + 
Objects.hash(getDisplayName(), config().getBag());
+            }
+        }
         return super.getUniqueTag();
     }
 
     @Override
     public void setEntity(EntityLocal entity) {
-        initUniqueTag();
         super.setEntity(entity);
 
         poller = new Poller<>(getEntity(), this, false);
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java 
b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java
index 7c67301fc7..d86b623631 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java
@@ -64,6 +64,18 @@ public class WorkflowSensor<T> extends 
AbstractAddTriggerableSensor<T> implement
 
     public static final ConfigKey<EntityValueToSet> SENSOR = 
ConfigKeys.newConfigKey(EntityValueToSet.class, "sensor");
 
+    public static final ConfigKey<String> UNIQUE_TAG_CAMEL = 
ConfigKeys.newStringConfigKey("uniqueTag");
+    public static final ConfigKey<String> UNIQUE_TAG_UNDERSCORE = 
ConfigKeys.newStringConfigKey("unique_tag");
+    public static final ConfigKey<String> UNIQUE_TAG_DASH = 
ConfigKeys.newStringConfigKey("unique-tag");
+
+    static String getUniqueTag(ConfigBag bag, String defaultValue) {
+        String result = bag.get(UNIQUE_TAG_CAMEL);
+        if (result==null) result = bag.get(UNIQUE_TAG_UNDERSCORE);
+        if (result==null) result = bag.get(UNIQUE_TAG_DASH);
+        if (result==null) result = defaultValue;
+        return result;
+    }
+
     // do we need to have an option not to run when initialization is done?
 
     public WorkflowSensor() {}
@@ -98,6 +110,7 @@ public class WorkflowSensor<T> extends 
AbstractAddTriggerableSensor<T> implement
                 .name("Sensor Workflow Feed: "+sensor.getName())
                 .entity(entity)
                 
.onlyIfServiceUp(Maybe.ofDisallowingNull(EntityInitializers.resolve(params, 
ONLY_IF_SERVICE_UP)).or(false))
+                .uniqueTag(getUniqueTag(params, 
"workflow_sensor_feed:"+sensor.getName()))
                 .poll(pollConfig);
 
         wc.init(feedBuilder.build(true));
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java
 
b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java
index d59f797fb6..14c8ff78d8 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java
@@ -220,6 +220,7 @@ public class TransformVariableWorkflowStep extends 
WorkflowStepDefinition {
         TRANSFORMATIONS.put("average", () -> v -> average(v, "average"));
         TRANSFORMATIONS.put("size", () -> v -> size(v, "size"));
         TRANSFORMATIONS.put("get", () -> v -> {
+            // TODO should this be able to get indexes etc
             if (v instanceof Supplier) return ((Supplier)v).get();
             return v;
         });

Reply via email to