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 b7f138d3b95a557dfd413edb6045e851e3b910a0 Author: Alex Heneveld <[email protected]> AuthorDate: Thu Sep 30 11:49:23 2021 +0100 when we create placeholder tasks for forgotten submitters, keep the original ID this allows equals checks to pass --- .../util/core/task/BasicExecutionManager.java | 11 ++------ .../apache/brooklyn/util/core/task/BasicTask.java | 30 +++++++++++++++++++++- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java index 5f94d40..8afb111 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java @@ -70,6 +70,7 @@ import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.collections.MutableSet; import org.apache.brooklyn.util.core.task.BasicExecutionManager.BrooklynTaskLoggingMdc; +import org.apache.brooklyn.util.core.task.BasicTask.PlaceholderTask; import org.apache.brooklyn.util.core.task.TaskInternal.TaskCancellationMode; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.exceptions.RuntimeInterruptedException; @@ -1083,15 +1084,7 @@ public class BasicExecutionManager implements ExecutionManager { } private <T> Task<T> gone() { - Task<T> t = Tasks.<T>builder().dynamic(false).displayName(displayName + " (placeholder for " + id + ")") - .description("Details of the original task have been forgotten.") - .body(Callables.returning((T) null)).build(); - // don't really want anyone executing the "gone" task... - // also if we are GC'ing tasks then cancelled may help with cleanup - // of sub-tasks that have lost their submitted-by-task reference ? - // also don't want warnings when it's finalized, this means we don't need ignoreIfNotRun() - ((BasicTask<T>) t).cancelled = true; - return t; + return PlaceholderTask.newPlaceholderForForgottenTask(id, displayName); } } diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java index a6fe8d0..3a00082 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java @@ -18,6 +18,7 @@ */ package org.apache.brooklyn.util.core.task; +import com.google.common.util.concurrent.Callables; import static org.apache.brooklyn.util.JavaGroovyEquivalents.asString; import static org.apache.brooklyn.util.JavaGroovyEquivalents.elvisString; @@ -45,6 +46,7 @@ import org.apache.brooklyn.api.mgmt.HasTaskChildren; import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.core.mgmt.BrooklynTaskTags; import org.apache.brooklyn.util.JavaGroovyEquivalents; +import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.guava.Maybe; import org.apache.brooklyn.util.text.Identifiers; @@ -111,7 +113,7 @@ public class BasicTask<T> implements TaskInternal<T> { */ @Deprecated protected BasicTask() { this(Collections.emptyMap()); } - + protected BasicTask(Map<?,?> flags) { this(flags, (Callable<T>) null); } public BasicTask(Callable<T> job) { this(Collections.emptyMap(), job); } @@ -940,4 +942,30 @@ public class BasicTask<T> implements TaskInternal<T> { public Task<?> getProxyTarget() { return proxyTargetTask; } + + public static class PlaceholderTask extends BasicTask { + private PlaceholderTask(Map flags) { + super(flags); + } + + public static PlaceholderTask newPlaceholderForForgottenTask(String id, String displayName) { + PlaceholderTask result = new PlaceholderTask(MutableMap.of( + "displayName", displayName + " (placeholder)", + "description", "Details of the original task have been forgotten." + )); + + // since 2021-10 claim the ID of the thing we are placeholding so we get treated as an equal + ((BasicTask)result).id = id; + + result.job = Callables.returning(null); + + // don't really want anyone executing the "gone" task... + // also if we are GC'ing tasks then cancelled may help with cleanup + // of sub-tasks that have lost their submitted-by-task reference ? + // also don't want warnings when it's finalized, this means we don't need ignoreIfNotRun() + result.cancelled = true; + + return result; + } + } }
