From 9413b4b79f9cdafaa2b303ed528baa6c8861ef8d Mon Sep 17 00:00:00 2001 From: Andrew Donald Kennedy Date: Mon, 10 Apr 2017 05:48:08 +0100 Subject: [PATCH] Use deep resolving task for policy effector args --- .../AbstractScheduledEffectorPolicy.java | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/policy/src/main/java/org/apache/brooklyn/policy/action/AbstractScheduledEffectorPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/action/AbstractScheduledEffectorPolicy.java index e1e13a9271b..2afff65e3cb 100644 --- a/policy/src/main/java/org/apache/brooklyn/policy/action/AbstractScheduledEffectorPolicy.java +++ b/policy/src/main/java/org/apache/brooklyn/policy/action/AbstractScheduledEffectorPolicy.java @@ -24,13 +24,11 @@ import java.util.Calendar; import java.util.Date; import java.util.Map; -import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import org.apache.brooklyn.api.effector.Effector; import org.apache.brooklyn.api.entity.EntityLocal; -import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.entity.EntityInitializers; @@ -50,7 +48,6 @@ import com.google.common.base.Predicates; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; @Beta @@ -146,22 +143,14 @@ protected Duration getWaitUntil(String time) { public void run() { synchronized (mutex) { try { - final ConfigBag bag = ResolvingConfigBag.newInstanceExtending(getManagementContext(), config().getBag()); - final Map args = EntityInitializers.resolve(bag, EFFECTOR_ARGUMENTS); + ConfigBag bag = ResolvingConfigBag.newInstanceExtending(getManagementContext(), config().getBag()); + Map args = EntityInitializers.resolve(bag, EFFECTOR_ARGUMENTS); LOG.debug("{}: Resolving arguments for {}: {}", new Object[] { this, effector.getName(), Iterables.toString(args.keySet()) }); - bag.putAll(args); - Task> resolve = Tasks.create("resolveArguments", new Callable>() { - @Override - public Map call() { - Map resolved = Maps.newLinkedHashMap(); - for (String key : args.keySet()) { - resolved.put(key, bag.getStringKey(key)); - } - return resolved; - } - }); - getManagementContext().getExecutionContext(entity).submit(resolve); - Map resolved = resolve.getUnchecked(); + Map resolved = (Map) Tasks.resolving(args, Object.class) + .deep(true) + .context(entity) + .get(); + LOG.debug("{}: Invoking effector on {}, {}({})", new Object[] { this, entity, effector.getName(), resolved }); Object result = entity.invoke(effector, resolved).getUnchecked(); LOG.debug("{}: Effector {} returned {}", new Object[] { this, effector.getName(), result });