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);
}
}