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 f29962fa2aa021d1f25a6daed6b298b92d09c8e3 Author: Alex Heneveld <[email protected]> AuthorDate: Mon Jun 26 13:55:41 2023 +0100 provide a way to record notional/independent children against a DSTask useful to show related tasks in the ui --- .../util/core/task/DynamicSequentialTask.java | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java b/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java index ed76e7b12c..48cb54b937 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java @@ -20,11 +20,7 @@ package org.apache.brooklyn.util.core.task; import groovy.lang.Closure; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Queue; +import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; import java.util.concurrent.ConcurrentLinkedQueue; @@ -35,6 +31,7 @@ import org.apache.brooklyn.api.mgmt.TaskAdaptable; import org.apache.brooklyn.api.mgmt.TaskQueueingContext; import org.apache.brooklyn.core.mgmt.BrooklynTaskTags; import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal; +import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.time.CountdownTimer; @@ -75,6 +72,7 @@ public class DynamicSequentialTask<T> extends BasicTask<T> implements HasTaskChi protected final Queue<Task<?>> secondaryJobsAll = new ConcurrentLinkedQueue<Task<?>>(); protected final Queue<Task<?>> secondaryJobsRemaining = new ConcurrentLinkedQueue<Task<?>>(); + protected final List<Task<?>> notionalChildren = MutableList.of(); protected final Object jobTransitionLock = new Object(); protected volatile boolean primaryStarted = false; protected volatile boolean primaryFinished = false; @@ -165,6 +163,11 @@ public class DynamicSequentialTask<T> extends BasicTask<T> implements HasTaskChi } } + /** adds a child which this task is not dependent upon, but which should be known as a child of this, eg in the UI */ + public void recordIndependentChild(Task<?> independentChild) { + notionalChildren.add(independentChild); + } + @Override protected boolean doCancel(TaskCancellationMode mode) { boolean result = false; @@ -218,7 +221,13 @@ public class DynamicSequentialTask<T> extends BasicTask<T> implements HasTaskChi @Override public Iterable<Task<?>> getChildren() { - return Collections.unmodifiableCollection(secondaryJobsAll); + Collection<Task<?>> result; + if (notionalChildren!=null && !notionalChildren.isEmpty()) { + result = MutableList.copyOf(secondaryJobsAll).appendAll(notionalChildren); + } else { + result = secondaryJobsAll; + } + return Collections.unmodifiableCollection(result); } /** submits the indicated task for execution in the current execution context, and returns immediately */
