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 86adeebf54f88c2599ab0af9e9f852da71613ce8
Author: Alex Heneveld <[email protected]>
AuthorDate: Mon Mar 6 22:46:48 2023 +0000

    avoid unnecessary cross-context wrapping and add blocking info for 
same-thread wrapping
---
 .../util/core/task/BasicExecutionContext.java      | 26 ++++++++++++++--------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git 
a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
 
b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
index dc69347889..5b182edd44 100644
--- 
a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
+++ 
b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
@@ -222,7 +222,8 @@ public class BasicExecutionContext extends 
AbstractExecutionContext {
         Set<Object> mutableTags = ((TaskInternal<T>) task).getMutableTags();
         mutableTags.addAll(tags);
 
-        if (Tasks.current()!=null && 
BrooklynTaskTags.isTransient(Tasks.current())
+        Task currentTask = Tasks.current();
+        if (currentTask !=null && BrooklynTaskTags.isTransient(currentTask)
                 && 
!mutableTags.contains(BrooklynTaskTags.NON_TRANSIENT_TASK_TAG) && 
!mutableTags.contains(BrooklynTaskTags.TRANSIENT_TASK_TAG)) {
             // tag as transient if submitter is transient, unless explicitly 
tagged as non-transient
             mutableTags.add(BrooklynTaskTags.TRANSIENT_TASK_TAG);
@@ -236,6 +237,7 @@ public class BasicExecutionContext extends 
AbstractExecutionContext {
         SimpleFuture<T> future = new SimpleFuture<>();
         Throwable error = null;
 
+        if (currentTask instanceof BasicTask) ((BasicTask) 
currentTask).setBlockingTask(task);
         try (BrooklynTaskLoggingMdc mdc = 
BrooklynTaskLoggingMdc.create(task).start()) {
             
((BasicExecutionManager)executionManager).afterSubmitRecordFuture(task, future);
             
((BasicExecutionManager)executionManager).beforeStartInSameThreadTask(null, 
task);
@@ -250,6 +252,7 @@ public class BasicExecutionContext extends 
AbstractExecutionContext {
             return null;  // not actually returned
             
         } finally {
+            if (currentTask instanceof BasicTask) ((BasicTask) 
currentTask).resetBlockingTask();
             try {
                 
((BasicExecutionManager)executionManager).afterEndInSameThreadTask(null, task, 
error);
             } finally {
@@ -487,14 +490,19 @@ public class BasicExecutionContext extends 
AbstractExecutionContext {
         }
             
         return 
-            // 2017-09 changed, doesn't have to be a dynamic task; can be a 
simple sequential task wrapping the child
-            new ContextSwitchingInfo<>(tc, 
Tasks.<T>builder().displayName("Cross-context execution: 
"+t.getDescription()).dynamic(false).parallel(false).body(new Callable<T>() {
-                @Override
-                public T call() throws Exception {
-                    if (immediate) return tc.<T>getImmediately(t).get();
-                    return tc.get(t); 
-                }
-            }).build());
+//            // 2017-09 changed, doesn't have to be a dynamic task; can be a 
simple sequential task wrapping the child
+//          new ContextSwitchingInfo<>(tc, 
Tasks.<T>builder().displayName("Cross-context execution: 
"+t.getDescription()).dynamic(false).parallel(false).body(new Callable<T>() {
+//                @Override
+//                public T call() throws Exception {
+//                    if (immediate) return tc.<T>getImmediately(t).get();
+//                    return tc.get(t);
+//                }
+//            }).build());
+
+            // 2023-03 we can just do this, we don't need the extra wrapper
+            // (in fact the extra wrapper now makes the UI harder to use as 
the child task eg tagged EFFECTOR is no longer top-level or cross-context,
+            // and this cross-context task is not tagged in a useful way) - if 
this doesn't work then probably the wrapper (above) should copy the interesting 
tags
+            new ContextSwitchingInfo<>(tc, t);
     }
 
     private void registerPerThreadExecutionContext() { 
perThreadExecutionContext.set(this); }

Reply via email to