You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2021/10/04 11:21:37 UTC
[brooklyn-server] 01/14: when we create placeholder tasks for
forgotten submitters, keep the original ID
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 <al...@cloudsoftcorp.com>
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;
+ }
+ }
}