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;
+        }
+    }
 }