You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sj...@apache.org on 2015/10/19 11:46:55 UTC

[6/7] incubator-brooklyn git commit: Tag execution contexts (hence all submitted tasks) with the current management context.

Tag execution contexts (hence all submitted tasks) with the current management context.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/492788d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/492788d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/492788d4

Branch: refs/heads/master
Commit: 492788d4c98e9e50417b69a789281ccfd6f013d1
Parents: 3c3b479
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Fri Oct 9 14:29:51 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Mon Oct 19 08:51:15 2015 +0100

----------------------------------------------------------------------
 .../apache/brooklyn/core/mgmt/BrooklynTaskTags.java   |  8 ++++++++
 .../core/mgmt/internal/AbstractManagementContext.java | 13 +++++++++++--
 .../brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java | 14 +++++++++++---
 3 files changed, 30 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/492788d4/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
index 6c8e6be..1fba49d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
@@ -31,6 +31,7 @@ import javax.annotation.Nullable;
 import org.apache.brooklyn.api.effector.Effector;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.mgmt.ExecutionManager;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.mgmt.entitlement.EntitlementContext;
 import org.apache.brooklyn.util.core.config.ConfigBag;
@@ -157,6 +158,13 @@ public class BrooklynTaskTags extends TaskTags {
         return em.getTasksWithTag(tagForContextEntity(e));
     }
 
+    public static ManagementContext getManagementContext(Task<?> task) {
+        for (Object tag : task.getTags())
+            if ((tag instanceof ManagementContext))
+                return (ManagementContext) tag;
+        return null;
+    }
+
     // ------------- stream tags -------------------------
 
     public static class WrappedStream {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/492788d4/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
index 343528d..01b507f 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
@@ -83,6 +83,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Function;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
 
 public abstract class AbstractManagementContext implements ManagementContextInternal {
     private static final Logger log = LoggerFactory.getLogger(AbstractManagementContext.class);
@@ -242,7 +243,11 @@ public abstract class AbstractManagementContext implements ManagementContextInte
     public ExecutionContext getExecutionContext(Entity e) {
         // BEC is a thin wrapper around EM so fine to create a new one here; but make sure it gets the real entity
         if (e instanceof AbstractEntity) {
-            return new BasicExecutionContext(MutableMap.of("tag", BrooklynTaskTags.tagForContextEntity(e)), getExecutionManager());
+            ImmutableSet<Object> tags = ImmutableSet.<Object>of(
+                    BrooklynTaskTags.tagForContextEntity(e),
+                    this
+            );
+            return new BasicExecutionContext(MutableMap.of("tags", tags), getExecutionManager());
         } else {
             return ((EntityInternal)e).getManagementSupport().getExecutionContext();
         }
@@ -251,7 +256,11 @@ public abstract class AbstractManagementContext implements ManagementContextInte
     @Override
     public ExecutionContext getServerExecutionContext() {
         // BEC is a thin wrapper around EM so fine to create a new one here
-        return new BasicExecutionContext(MutableMap.of("tag", BrooklynTaskTags.BROOKLYN_SERVER_TASK_TAG), getExecutionManager());
+        ImmutableSet<Object> tags = ImmutableSet.<Object>of(
+                this,
+                BrooklynTaskTags.BROOKLYN_SERVER_TASK_TAG
+        );
+        return new BasicExecutionContext(MutableMap.of("tags", tags), getExecutionManager());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/492788d4/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
index 05eea1f..65bf561 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
@@ -21,15 +21,16 @@ package org.apache.brooklyn.camp.brooklyn.spi.dsl;
 import java.io.Serializable;
 
 import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.mgmt.ExecutionContext;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.mgmt.TaskFactory;
 import org.apache.brooklyn.camp.spi.Assembly;
 import org.apache.brooklyn.camp.spi.AssemblyTemplate;
 import org.apache.brooklyn.camp.spi.resolve.interpret.PlanInterpretationNode;
 import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.effector.EffectorTasks;
 import org.apache.brooklyn.core.entity.EntityInternal;
 import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
+import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.util.core.task.BasicExecutionContext;
 import org.apache.brooklyn.util.core.task.DeferredSupplier;
 import org.apache.brooklyn.util.core.task.Tasks;
@@ -75,8 +76,15 @@ public abstract class BrooklynDslDeferredSupplier<T> implements DeferredSupplier
 
     /** returns the current entity; for use in implementations of {@link #get()} */
     protected final static EntityInternal entity() {
-        // rely on implicit ThreadLocal for now
-        return (EntityInternal) EffectorTasks.findEntity();
+        return (EntityInternal) BrooklynTaskTags.getTargetOrContextEntity(Tasks.current());
+    }
+
+    /**
+     * Returns the current management context; for use in implementations of {@link #get()} that are not associated
+     * with an entity.
+     */
+    protected final static ManagementContextInternal managementContext() {
+        return (ManagementContextInternal) BrooklynTaskTags.getManagementContext(Tasks.current());
     }
 
     @Override