You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/24 19:42:05 UTC

[2/4] brooklyn-server git commit: resolves static sensor value as a task, allowing DSLComponents to be set

resolves static sensor value as a task, allowing DSLComponents to be set


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

Branch: refs/heads/master
Commit: c4a95e6b4af3002b65970e8516c9a8a771bd7558
Parents: 6299c35
Author: Robert Moss <ro...@cloudsoftcorp.com>
Authored: Tue Feb 23 17:17:16 2016 +0000
Committer: Robert Moss <ro...@cloudsoftcorp.com>
Committed: Tue Feb 23 17:17:16 2016 +0000

----------------------------------------------------------------------
 .../brooklyn/core/sensor/StaticSensor.java      | 41 ++++++++++++++++----
 .../brooklyn/core/sensor/StaticSensorTest.java  |  4 +-
 2 files changed, 35 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c4a95e6b/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
index 5dac80a..18978fa 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
@@ -18,16 +18,21 @@
  */
 package org.apache.brooklyn.core.sensor;
 
+import java.util.concurrent.Callable;
+
 import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.api.mgmt.TaskAdaptable;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.effector.AddSensor;
+import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.enricher.stock.Propagator;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.core.task.ValueResolver;
 import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.time.Duration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,25 +53,45 @@ public class StaticSensor<T> extends AddSensor<T> {
     private static final Logger log = LoggerFactory.getLogger(StaticSensor.class);
     
     public static final ConfigKey<Object> STATIC_VALUE = ConfigKeys.newConfigKey(Object.class, "static.value");
+    public static final ConfigKey<Duration> TIMEOUT = ConfigKeys.newConfigKey(
+            Duration.class, "static.timeout", "Duration to wait for the value to resolve", Duration.PRACTICALLY_FOREVER);
 
     private final Object value;
+    private final Duration timeout;
 
     public StaticSensor(ConfigBag params) {
         super(params);
         value = params.get(STATIC_VALUE);
+        timeout = params.get(TIMEOUT);
     }
 
     @SuppressWarnings("unchecked")
     @Override
-    public void apply(EntityLocal entity) {
+    public void apply(final EntityLocal entity) {
         super.apply(entity);
-        
-        Maybe<T> v = Tasks.resolving(value).as((Class<T>)sensor.getType()).timeout(ValueResolver.PRETTY_QUICK_WAIT).getMaybe();
-        if (v.isPresent()) {
-            log.debug(this+" setting sensor "+sensor+" to "+v.get());
-            entity.sensors().set(sensor, v.get());
-        } else {
-            log.debug(this+" not setting sensor "+sensor+"; cannot resolve "+value);
+
+        class ResolveValue implements Callable<Maybe<T>> {
+            @Override
+            public Maybe<T> call() throws Exception {
+                return Tasks.resolving(value).as((Class<T>)sensor.getType()).timeout(timeout).getMaybe();
+            }
         }
+        final Task<Maybe<T>> resolveValue = Tasks.<Maybe<T>>builder().displayName("resolving " + value).body(new ResolveValue()).build();
+
+        class SetValue implements Callable<T> {
+            @Override
+            public T call() throws Exception {
+                Maybe<T> v = resolveValue.get();
+                if (!v.isPresent()) {
+                    log.debug(this+" not setting sensor "+sensor+"; cannot resolve "+value+" after timeout " + timeout);
+                    return null;
+                }
+                log.debug(this+" setting sensor "+sensor+" to "+v.get());
+                return entity.sensors().set(sensor, v.get());
+            }
+        }
+        Task<T> setValue = Tasks.<T>builder().displayName("setting " + sensor).body(new SetValue()).build();
+
+        Entities.submit(entity, Tasks.sequential("resolving and setting " + sensor, resolveValue, setValue));
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c4a95e6b/core/src/test/java/org/apache/brooklyn/core/sensor/StaticSensorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/sensor/StaticSensorTest.java b/core/src/test/java/org/apache/brooklyn/core/sensor/StaticSensorTest.java
index a574aeb..0a6dcbb 100644
--- a/core/src/test/java/org/apache/brooklyn/core/sensor/StaticSensorTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/sensor/StaticSensorTest.java
@@ -37,7 +37,7 @@ public class StaticSensorTest extends BrooklynAppUnitTestSupport {
                         StaticSensor.SENSOR_TYPE, String.class.getName(),
                         StaticSensor.STATIC_VALUE, "myval")))));
         
-        EntityAsserts.assertAttributeEquals(entity, Sensors.newSensor(String.class, "myname"), "myval");
+        EntityAsserts.assertAttributeEqualsEventually(entity, Sensors.newSensor(String.class, "myname"), "myval");
     }
     
     @Test
@@ -48,6 +48,6 @@ public class StaticSensorTest extends BrooklynAppUnitTestSupport {
                         StaticSensor.SENSOR_TYPE, Integer.class.getName(),
                         StaticSensor.STATIC_VALUE, "1")))));
         
-        EntityAsserts.assertAttributeEquals(entity, Sensors.newSensor(Integer.class, "myname"), 1);
+        EntityAsserts.assertAttributeEqualsEventually(entity, Sensors.newSensor(Integer.class, "myname"), 1);
     }
 }