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:50 UTC

[1/7] incubator-brooklyn git commit: Enable passing unit test.

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master ed692e059 -> 388668abb


Enable passing unit test.


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

Branch: refs/heads/master
Commit: 028ec41e3e91e7e11ca0dab7d90c401a389c9ebe
Parents: b0ae1e3
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Sat Oct 10 08:07:30 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Mon Oct 19 08:51:15 2015 +0100

----------------------------------------------------------------------
 .../camp/brooklyn/ExternalConfigYamlTest.java   | 54 +++++++++-----------
 1 file changed, 25 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/028ec41e/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
index 5d1ab39..2644303 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
@@ -54,49 +54,44 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
         props.put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName());
         props.put("brooklyn.external.myprovider.mykey", "myval");
         props.put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName());
-        
+
         return LocalManagementContextForTests.builder(true)
                 .useProperties(props)
                 .build();
     }
-    
+
     @Test
     public void testExternalisedConfigReferencedFromYaml() throws Exception {
         ConfigKey<String> MY_CONFIG_KEY = ConfigKeys.newStringConfigKey("my.config.key");
-        
+
         String yaml = Joiner.on("\n").join(
             "services:",
             "- serviceType: org.apache.brooklyn.core.test.entity.TestApplication",
             "  brooklyn.config:",
             "    my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")");
-        
+
         TestApplication app = (TestApplication) createAndStartApplication(new StringReader(yaml));
         waitForApplicationTasks(app);
 
         assertEquals(app.getConfig(MY_CONFIG_KEY), "myval");
     }
 
-    // FIXME fails currently - see comment at ConfigBag.get; fix at AbstractLocation.BasicConfigurationSupport to enable this?
-//    at org.apache.brooklyn.util.core.config.ConfigBag.coerceFirstNonNullKeyValue(ConfigBag.java:464)
-//    at org.apache.brooklyn.util.core.config.ConfigBag.get(ConfigBag.java:458)
-//    at org.apache.brooklyn.util.core.config.ConfigBag.get(ConfigBag.java:345)
-//    at org.apache.brooklyn.core.location.AbstractLocation$BasicConfigurationSupport.get(AbstractLocation.java:364)    @Test
-    @Test(groups="WIP")
+    @Test
     public void testExternalisedLocationConfigReferencedFromYaml() throws Exception {
         ConfigKey<String> MY_CONFIG_KEY = ConfigKeys.newStringConfigKey("my.config.key");
-        
+
         String yaml = Joiner.on("\n").join(
             "services:",
             "- type: org.apache.brooklyn.core.test.entity.TestApplication",
             "location:",
             "  localhost:",
             "    my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")");
-        
+
         TestApplication app = (TestApplication) createAndStartApplication(new StringReader(yaml));
         waitForApplicationTasks(app);
         assertEquals(Iterables.getOnlyElement( app.getLocations() ).config().get(MY_CONFIG_KEY), "myval");
     }
-    
+
     @Test(groups="Integration")
     public void testExternalisedLocationConfigSetViaProvisioningPropertiesReferencedFromYaml() throws Exception {
         String yaml = Joiner.on("\n").join(
@@ -105,23 +100,23 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
             "  provisioning.properties:",
             "    credential: $brooklyn:external(\"myprovider\", \"mykey\")",
             "location: localhost");
-        
+
         Entity app = createAndStartApplication(new StringReader(yaml));
         waitForApplicationTasks(app);
         Entity entity = Iterables.getOnlyElement( app.getChildren() );
         assertEquals(Iterables.getOnlyElement( entity.getLocations() ).config().get(CloudLocationConfig.ACCESS_CREDENTIAL), "myval");
     }
-    
+
     @Test
     public void testExternalisedConfigFromSupplierWithoutMapArg() throws Exception {
         ConfigKey<String> MY_CONFIG_KEY = ConfigKeys.newStringConfigKey("my.config.key");
-        
+
         String yaml = Joiner.on("\n").join(
             "services:",
             "- serviceType: org.apache.brooklyn.core.test.entity.TestApplication",
             "  brooklyn.config:",
             "    my.config.key: $brooklyn:external(\"myproviderWithoutMapArg\", \"mykey\")");
-        
+
         TestApplication app = (TestApplication) createAndStartApplication(new StringReader(yaml));
         waitForApplicationTasks(app);
 
@@ -132,7 +127,7 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
     public void testWhenExternalisedConfigSupplierDoesNotExist() throws Exception {
         BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
         props.put("brooklyn.external.myprovider", "wrong.classname.DoesNotExist");
-        
+
         try {
             LocalManagementContextForTests.builder(true)
                     .useProperties(props)
@@ -144,12 +139,12 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
             }
         }
     }
-    
+
     @Test
     public void testWhenExternalisedConfigSupplierDoesNotHavingRightConstructor() throws Exception {
         BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
         props.put("brooklyn.external.myprovider", MyExternalConfigSupplierWithWrongConstructor.class.getName());
-        
+
         try {
             LocalManagementContext mgmt2 = LocalManagementContextForTests.builder(true)
                     .useProperties(props)
@@ -162,45 +157,46 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
             }
         }
     }
-    
+
     @Override
     protected Logger getLogger() {
         return log;
     }
-    
+
     public static class MyExternalConfigSupplier extends AbstractExternalConfigSupplier {
         private final Map<String, String> conf;
-        
+
         public MyExternalConfigSupplier(ManagementContext mgmt, String name, Map<String, String> conf) {
             super(mgmt, name);
             this.conf = conf;
         }
-        
+
         @Override public String get(String key) {
             return conf.get(key);
         }
     }
-    
+
     public static class MyExternalConfigSupplierWithoutMapArg extends AbstractExternalConfigSupplier {
         public MyExternalConfigSupplierWithoutMapArg(ManagementContext mgmt, String name) {
             super(mgmt, name);
         }
-        
+
         @Override public String get(String key) {
             return key.equals("mykey") ? "myHardcodedVal" : null;
         }
     }
-    
+
     public static class MyExternalConfigSupplierWithWrongConstructor implements ExternalConfigSupplier {
         public MyExternalConfigSupplierWithWrongConstructor(double d) {
         }
-        
+
         @Override public String getName() {
             return "myname";
         }
-        
+
         @Override public String get(String key) {
             return null;
         }
     }
+
 }


[3/7] incubator-brooklyn git commit: Trivial tidies.

Posted by sj...@apache.org.
Trivial tidies.


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

Branch: refs/heads/master
Commit: 16f9a9a214c3bd19d03093592bf91ac1f5eb0bb3
Parents: 51750e2
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Fri Oct 9 13:36:21 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Mon Oct 19 08:51:15 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/util/core/task/ValueResolver.java      | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/16f9a9a2/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
index 4a1d030..2809482 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
@@ -309,7 +309,7 @@ public class ValueResolver<T> implements DeferredSupplier<T> {
                 }
 
             } else if (v instanceof DeferredSupplier<?>) {
-                final Object vf = v;
+                final DeferredSupplier<?> ds = (DeferredSupplier<?>) v;
 
                 if ((!Boolean.FALSE.equals(embedResolutionInTask) && (exec!=null || timeout!=null)) || Boolean.TRUE.equals(embedResolutionInTask)) {
                     if (exec==null)
@@ -318,16 +318,16 @@ public class ValueResolver<T> implements DeferredSupplier<T> {
                     Callable<Object> callable = new Callable<Object>() {
                         public Object call() throws Exception {
                             try {
-                                Tasks.setBlockingDetails("Retrieving "+vf);
-                                return ((DeferredSupplier<?>) vf).get();
+                                Tasks.setBlockingDetails("Retrieving "+ds);
+                                return ds.get();
                             } finally {
                                 Tasks.resetBlockingDetails();
                             }
                         } };
                     String description = getDescription();
-                    TaskBuilder<Object> vb = Tasks.<Object>builder().body(callable).displayName("Resolving dependent value").description(description);
-                    if (isTransientTask) vb.tag(BrooklynTaskTags.TRANSIENT_TASK_TAG);
-                    Task<Object> vt = exec.submit(vb.build());
+                    TaskBuilder<Object> tb = Tasks.<Object>builder().body(callable).displayName("Resolving dependent value").description(description);
+                    if (isTransientTask) tb.tag(BrooklynTaskTags.TRANSIENT_TASK_TAG);
+                    Task<Object> vt = exec.submit(tb.build());
                     // TODO to handle immediate resolution, it would be nice to be able to submit 
                     // so it executes in the current thread,
                     // or put a marker in the target thread or task while it is running that the task 
@@ -340,8 +340,8 @@ public class ValueResolver<T> implements DeferredSupplier<T> {
                     
                 } else {
                     try {
-                        Tasks.setBlockingDetails("Retrieving (non-task) "+vf);
-                        v = ((DeferredSupplier<?>) vf).get();
+                        Tasks.setBlockingDetails("Retrieving (non-task) "+ds);
+                        v = ((DeferredSupplier<?>) ds).get();
                     } finally {
                         Tasks.resetBlockingDetails();
                     }


[4/7] incubator-brooklyn git commit: Get a valid execution context even if no entity is available.

Posted by sj...@apache.org.
Get a valid execution context even if no entity is available.


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

Branch: refs/heads/master
Commit: 51750e2b1f3c2585d08ff774caf68c38d071de9d
Parents: f1d90c6
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Fri Oct 9 13:35:48 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Mon Oct 19 08:51:15 2015 +0100

----------------------------------------------------------------------
 .../spi/dsl/BrooklynDslDeferredSupplier.java    | 26 +++++++++++++++-----
 1 file changed, 20 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/51750e2b/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 389fe69..05eea1f 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
@@ -28,9 +28,11 @@ 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.Entities;
 import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
+import org.apache.brooklyn.util.core.task.BasicExecutionContext;
 import org.apache.brooklyn.util.core.task.DeferredSupplier;
+import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -59,18 +61,18 @@ public abstract class BrooklynDslDeferredSupplier<T> implements DeferredSupplier
     private static final long serialVersionUID = -8789624905412198233L;
 
     private static final Logger log = LoggerFactory.getLogger(BrooklynDslDeferredSupplier.class);
-    
+
     // TODO json of this object should *be* this, not wrapped this ($brooklyn:literal is a bit of a hack, though it might work!)
     @JsonInclude
     @JsonProperty(value="$brooklyn:literal")
     // currently marked transient because it's only needed for logging
     private transient Object dsl = "(gone)";
-    
+
     public BrooklynDslDeferredSupplier() {
         PlanInterpretationNode sourceNode = BrooklynDslInterpreter.currentNode();
         dsl = sourceNode!=null ? sourceNode.getOriginalValue() : null;
     }
-    
+
     /** returns the current entity; for use in implementations of {@link #get()} */
     protected final static EntityInternal entity() {
         // rely on implicit ThreadLocal for now
@@ -82,15 +84,27 @@ public abstract class BrooklynDslDeferredSupplier<T> implements DeferredSupplier
         try {
             if (log.isDebugEnabled())
                 log.debug("Queuing task to resolve "+dsl);
-            T result = Entities.submit(entity(), newTask()).get();
+
+            EntityInternal entity = (EntityInternal) BrooklynTaskTags.getTargetOrContextEntity(Tasks.current());
+            ExecutionContext exec =
+                    (entity != null) ? entity.getExecutionContext()
+                                     : BasicExecutionContext.getCurrentExecutionContext();
+            if (exec == null) {
+                throw new IllegalStateException("No execution context available to resolve " + dsl);
+            }
+
+            Task<T> task = newTask();
+            T result = exec.submit(task).get();
+
             if (log.isDebugEnabled())
                 log.debug("Resolved "+result+" from "+dsl);
             return result;
+
         } catch (Exception e) {
             throw Exceptions.propagate(e);
         }
     }
-    
+
     @Override
     public abstract Task<T> newTask();
 


[2/7] incubator-brooklyn git commit: DslExternal obtains mgmt context without requiring an in-scope entity.

Posted by sj...@apache.org.
DslExternal obtains mgmt context without requiring an in-scope entity.


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

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

----------------------------------------------------------------------
 .../camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java    | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b0ae1e38/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
index 92dc14e..8cdcb76 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
@@ -35,8 +35,9 @@ import org.apache.brooklyn.camp.brooklyn.spi.creation.EntitySpecConfiguration;
 import org.apache.brooklyn.camp.brooklyn.spi.dsl.BrooklynDslDeferredSupplier;
 import org.apache.brooklyn.camp.brooklyn.spi.dsl.DslUtils;
 import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent.Scope;
+import org.apache.brooklyn.core.config.external.ExternalConfigSupplier;
 import org.apache.brooklyn.core.entity.EntityDynamicType;
-import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.mgmt.internal.ExternalConfigSupplierRegistry;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.mgmt.persist.DeserializingClassRenamesProvider;
 import org.apache.brooklyn.core.sensor.DependentConfiguration;
@@ -48,7 +49,6 @@ import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.core.task.DeferredSupplier;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.javalang.Reflections;
 import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
 import org.apache.brooklyn.util.text.Strings;
@@ -328,13 +328,12 @@ public class BrooklynDslCommon {
         @Override
         public Task<Object> newTask() {
             return Tasks.<Object>builder()
-                .name("resolving external configuration: '" + key + "' from provider '" + providerName + "'")
+                .displayName("resolving external configuration: '" + key + "' from provider '" + providerName + "'")
                 .dynamic(false)
                 .body(new Callable<Object>() {
                     @Override
                     public Object call() throws Exception {
-                        EntityInternal entity = (EntityInternal) BrooklynDslDeferredSupplier.entity();
-                        ManagementContextInternal managementContext = (ManagementContextInternal) entity.getManagementContext();
+                        ManagementContextInternal managementContext = DslExternal.managementContext();
                         return managementContext.getExternalConfigProviderRegistry().getConfig(providerName, key);
                     }
                 })


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

Posted by sj...@apache.org.
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


[5/7] incubator-brooklyn git commit: Support deferred suppliers within location config.

Posted by sj...@apache.org.
Support deferred suppliers within location config.


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

Branch: refs/heads/master
Commit: 3c3b4794ee805a083b82f6fb6758e8b8f151b859
Parents: 16f9a9a
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Fri Oct 9 13:37:41 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Mon Oct 19 08:51:15 2015 +0100

----------------------------------------------------------------------
 .../core/location/AbstractLocation.java         | 38 +++++++++++++++-----
 1 file changed, 29 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3c3b4794/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
index 98a7e38..b5a91c7 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
@@ -34,6 +34,7 @@ import org.apache.brooklyn.api.entity.Group;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.location.LocationSpec;
 import org.apache.brooklyn.api.mgmt.ExecutionContext;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.SubscriptionContext;
 import org.apache.brooklyn.api.mgmt.SubscriptionHandle;
 import org.apache.brooklyn.api.mgmt.Task;
@@ -66,6 +67,9 @@ import org.apache.brooklyn.util.collections.SetFromLiveMap;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.core.flags.FlagUtils;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
+import org.apache.brooklyn.util.core.task.DeferredSupplier;
+import org.apache.brooklyn.util.core.task.Tasks;
+import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.stream.Streams;
 import org.slf4j.Logger;
@@ -386,17 +390,33 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
 
         @Override
         public <T> T get(ConfigKey<T> key) {
-            if (hasConfig(key, false)) return getLocalBag().get(key);
-            if (getParent() != null && isInherited(key)) {
-                return getParent().getConfig(key);
+            Object result = null;
+            if (hasConfig(key, false)) {
+                result = getLocalBag().getAllConfigRaw().get(key.getName());
+
+            } else if (getParent() != null && isInherited(key)) {
+                result = getParent().getConfig(key);
+
+            } else {
+                // In case this entity class has overridden the given key (e.g. to set default), then retrieve this entity's key
+                // TODO when locations become entities, the duplication of this compared to EntityConfigMap.getConfig will disappear.
+                @SuppressWarnings("unchecked")
+                ConfigKey<T> ownKey = (ConfigKey<T>) elvis(locationType.getConfigKey(key.getName()), key);
+                result = ownKey.getDefaultValue();
+            }
+
+            if (result instanceof DeferredSupplier<?>) {
+                try {
+                    ManagementContext mgmt = AbstractLocation.this.getManagementContext();
+                    ExecutionContext exec = mgmt.getServerExecutionContext();
+                    result = Tasks.resolveValue(result, key.getType(), exec);
+
+                } catch (Exception e) {
+                    throw Exceptions.propagate(e);
+                }
             }
-            
-            // In case this entity class has overridden the given key (e.g. to set default), then retrieve this entity's key
-            // TODO when locations become entities, the duplication of this compared to EntityConfigMap.getConfig will disappear.
-            @SuppressWarnings("unchecked")
-            ConfigKey<T> ownKey = (ConfigKey<T>) elvis(locationType.getConfigKey(key.getName()), key);
 
-            return ownKey.getDefaultValue();
+            return TypeCoercions.coerce(result, key.getTypeToken());
         }
 
         @Override


[7/7] incubator-brooklyn git commit: This closes #946

Posted by sj...@apache.org.
This closes #946


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

Branch: refs/heads/master
Commit: 388668abb768a71b7f6758958d16bf4874fe3c19
Parents: ed692e0 028ec41
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Mon Oct 19 10:46:39 2015 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Mon Oct 19 10:46:39 2015 +0100

----------------------------------------------------------------------
 .../core/location/AbstractLocation.java         | 38 ++++++++++----
 .../brooklyn/core/mgmt/BrooklynTaskTags.java    |  8 +++
 .../internal/AbstractManagementContext.java     | 13 ++++-
 .../brooklyn/util/core/task/ValueResolver.java  | 16 +++---
 .../spi/dsl/BrooklynDslDeferredSupplier.java    | 40 +++++++++++----
 .../spi/dsl/methods/BrooklynDslCommon.java      |  9 ++--
 .../camp/brooklyn/ExternalConfigYamlTest.java   | 54 +++++++++-----------
 7 files changed, 116 insertions(+), 62 deletions(-)
----------------------------------------------------------------------