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 <[email protected]> Authored: Fri Oct 9 14:29:51 2015 +0100 Committer: Alasdair Hodge <[email protected]> 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
