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 2015/06/24 10:05:30 UTC
[19/22] incubator-brooklyn git commit: use constants for wait
periods/limits in code
use constants for wait periods/limits in code
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/8df4cdfd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/8df4cdfd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/8df4cdfd
Branch: refs/heads/master
Commit: 8df4cdfd130103776a0abfbb77ddc10177fd004c
Parents: 8e99674
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Jun 23 23:36:06 2015 -0700
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Jun 24 01:04:24 2015 -0700
----------------------------------------------------------------------
.../brooklyn/enricher/basic/Propagator.java | 4 ++--
.../brooklyn/enricher/basic/Transformer.java | 6 +++---
.../entity/basic/ServiceStateLogic.java | 3 ++-
.../rebind/PeriodicDeltaChangeListener.java | 3 ++-
.../event/basic/DependentConfiguration.java | 10 ++++++----
.../src/main/java/brooklyn/util/task/Tasks.java | 2 +-
.../java/brooklyn/util/task/ValueResolver.java | 20 ++++++++++++++++++++
.../effector/SelectMasterEffectorBody.java | 2 +-
.../brooklyn/entity/software/StaticSensor.java | 18 ++++++++++++++++--
.../nosql/couchbase/CouchbaseNodeSshDriver.java | 2 +-
.../rest/resources/EntityConfigResource.java | 3 ++-
.../brooklyn/rest/resources/SensorResource.java | 3 ++-
.../rest/transform/EffectorTransformer.java | 5 ++---
.../java/brooklyn/util/repeat/Repeater.java | 7 +++++++
14 files changed, 67 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/core/src/main/java/brooklyn/enricher/basic/Propagator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/Propagator.java b/core/src/main/java/brooklyn/enricher/basic/Propagator.java
index 86795c6..06f63c4 100644
--- a/core/src/main/java/brooklyn/enricher/basic/Propagator.java
+++ b/core/src/main/java/brooklyn/enricher/basic/Propagator.java
@@ -37,7 +37,7 @@ import brooklyn.event.SensorEventListener;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.flags.SetFromFlag;
import brooklyn.util.task.Tasks;
-import brooklyn.util.time.Duration;
+import brooklyn.util.task.ValueResolver;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
@@ -96,7 +96,7 @@ public class Propagator extends AbstractEnricher implements SensorEventListener<
}
for (Object sensorO : getConfig(PROPAGATING)) {
- Sensor<?> sensor = Tasks.resolving(sensorO).as(Sensor.class).timeout(Duration.millis(50)).context(producer).get();
+ Sensor<?> sensor = Tasks.resolving(sensorO).as(Sensor.class).timeout(ValueResolver.REAL_QUICK_WAIT).context(producer).get();
if (!sensorMappingTemp.containsKey(sensor)) {
sensorMappingTemp.put(sensor, sensor);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/core/src/main/java/brooklyn/enricher/basic/Transformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/Transformer.java b/core/src/main/java/brooklyn/enricher/basic/Transformer.java
index 0f6c409..6b2f7a8 100644
--- a/core/src/main/java/brooklyn/enricher/basic/Transformer.java
+++ b/core/src/main/java/brooklyn/enricher/basic/Transformer.java
@@ -28,7 +28,7 @@ import brooklyn.entity.basic.ConfigKeys;
import brooklyn.event.SensorEvent;
import brooklyn.util.collections.MutableSet;
import brooklyn.util.task.Tasks;
-import brooklyn.util.time.Duration;
+import brooklyn.util.task.ValueResolver;
import com.google.common.base.Function;
import com.google.common.reflect.TypeToken;
@@ -84,7 +84,7 @@ public class Transformer<T,U> extends AbstractTransformer<T,U> {
return new Function<SensorEvent<T>, U>() {
@Override public U apply(SensorEvent<T> input) {
// evaluate immediately, or return null
- // 200ms seems a reasonable compromise for tasks which require BG evaluation
+ // PRETTY_QUICK/200ms seems a reasonable compromise for tasks which require BG evaluation
// but which are non-blocking
// TODO better would be to have a mode in which tasks are not permitted to block on
// external events; they can submit tasks and block on them (or even better, have a callback architecture);
@@ -92,7 +92,7 @@ public class Transformer<T,U> extends AbstractTransformer<T,U> {
return (U) Tasks.resolving(targetValueRaw).as(targetSensor.getType())
.context(entity)
.description("Computing sensor "+targetSensor+" from "+targetValueRaw)
- .timeout(Duration.millis(200))
+ .timeout(ValueResolver.PRETTY_QUICK_WAIT)
.getMaybe().orNull();
}
public String toString() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java b/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
index 75bf9a6..eff8e2d 100644
--- a/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
+++ b/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
@@ -56,6 +56,7 @@ import brooklyn.util.collections.QuorumCheck;
import brooklyn.util.guava.Functionals;
import brooklyn.util.guava.Maybe;
import brooklyn.util.repeat.Repeater;
+import brooklyn.util.task.ValueResolver;
import brooklyn.util.text.Strings;
import brooklyn.util.time.Duration;
@@ -148,7 +149,7 @@ public class ServiceStateLogic {
if (!Boolean.TRUE.equals(up) && !Boolean.TRUE.equals(Entities.isReadOnly(entity))) {
// pause briefly to allow any recent problem-clearing processing to complete
Stopwatch timer = Stopwatch.createStarted();
- boolean nowUp = Repeater.create().every(Duration.millis(10)).limitTimeTo(Duration.millis(200)).until(entity,
+ boolean nowUp = Repeater.create().every(ValueResolver.REAL_QUICK_PERIOD).limitTimeTo(ValueResolver.PRETTY_QUICK_WAIT).until(entity,
EntityPredicates.attributeEqualTo(Attributes.SERVICE_UP, true)).run();
if (nowUp) {
log.debug("Had to wait "+Duration.of(timer)+" for "+entity+" "+Attributes.SERVICE_UP+" to be true before setting "+state);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
index 2c3271d..0d88330 100644
--- a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
+++ b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
@@ -50,6 +50,7 @@ import brooklyn.util.collections.MutableMap;
import brooklyn.util.collections.MutableSet;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.exceptions.RuntimeInterruptedException;
+import brooklyn.util.repeat.Repeater;
import brooklyn.util.task.ScheduledTask;
import brooklyn.util.task.Tasks;
import brooklyn.util.time.CountdownTimer;
@@ -279,7 +280,7 @@ public class PeriodicDeltaChangeListener implements ChangeListener {
Duration left = timer.getDurationRemaining();
if (left.isPositive()) {
synchronized(writeCount) {
- writeCount.wait(left.lowerBound(Duration.millis(10)).toMilliseconds());
+ writeCount.wait(left.lowerBound(Repeater.DEFAULT_REAL_QUICK_PERIOD).toMilliseconds());
}
} else {
throw new TimeoutException("Timeout waiting for independent write of rebind-periodic-delta, after "+timer.getDurationElapsed());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/core/src/main/java/brooklyn/event/basic/DependentConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/basic/DependentConfiguration.java b/core/src/main/java/brooklyn/event/basic/DependentConfiguration.java
index b462107..14a159d 100644
--- a/core/src/main/java/brooklyn/event/basic/DependentConfiguration.java
+++ b/core/src/main/java/brooklyn/event/basic/DependentConfiguration.java
@@ -70,6 +70,7 @@ import brooklyn.util.task.DynamicTasks;
import brooklyn.util.task.ParallelTask;
import brooklyn.util.task.TaskInternal;
import brooklyn.util.task.Tasks;
+import brooklyn.util.task.ValueResolver;
import brooklyn.util.text.Strings;
import brooklyn.util.time.CountdownTimer;
import brooklyn.util.time.Duration;
@@ -297,8 +298,8 @@ public class DependentConfiguration {
}
CountdownTimer timer = timeout!=null ? timeout.countdownTimer() : null;
- Duration maxPeriod = Duration.millis(200);
- Duration nextPeriod = Duration.millis(10);
+ Duration maxPeriod = ValueResolver.PRETTY_QUICK_WAIT;
+ Duration nextPeriod = ValueResolver.REAL_QUICK_PERIOD;
while (true) {
// check the source on initial run (could be done outside the loop)
// and also (optionally) on each iteration in case it is more recent
@@ -407,7 +408,7 @@ public class DependentConfiguration {
/** Returns a task which waits for multiple other tasks (submitting if necessary)
* and performs arbitrary computation over the List of results.
* @see #transform(Task, Function) but note argument order is reversed (counterintuitive) to allow for varargs */
- public static <U,T> Task<T> transformMultiple(Function<List<U>,T> transformer, TaskAdaptable<U> ...tasks) {
+ public static <U,T> Task<T> transformMultiple(Function<List<U>,T> transformer, @SuppressWarnings("unchecked") TaskAdaptable<U> ...tasks) {
return transformMultiple(MutableMap.of("displayName", "transforming multiple"), transformer, tasks);
}
@@ -425,7 +426,7 @@ public class DependentConfiguration {
/** @see #transformMultiple(Function, TaskAdaptable...) */
@SuppressWarnings({ "rawtypes" })
- public static <U,T> Task<T> transformMultiple(Map flags, final Function<List<U>,T> transformer, TaskAdaptable<U> ...tasks) {
+ public static <U,T> Task<T> transformMultiple(Map flags, final Function<List<U>,T> transformer, @SuppressWarnings("unchecked") TaskAdaptable<U> ...tasks) {
return transformMultiple(flags, transformer, Arrays.asList(tasks));
}
@SuppressWarnings({ "rawtypes" })
@@ -687,6 +688,7 @@ public class DependentConfiguration {
validate();
return new WaitInTaskForAttributeReady<T,V>(this).call();
}
+ @SuppressWarnings({ "unchecked", "rawtypes" })
private void validate() {
checkNotNull(source, "Entity source");
checkNotNull(sensor, "Sensor");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/core/src/main/java/brooklyn/util/task/Tasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/task/Tasks.java b/core/src/main/java/brooklyn/util/task/Tasks.java
index 573b342..f59e2d1 100644
--- a/core/src/main/java/brooklyn/util/task/Tasks.java
+++ b/core/src/main/java/brooklyn/util/task/Tasks.java
@@ -421,7 +421,7 @@ public class Tasks {
}
if (timer.isExpired())
return false;
- Time.sleep(Duration.millis(10));
+ Time.sleep(Repeater.DEFAULT_REAL_QUICK_PERIOD);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/core/src/main/java/brooklyn/util/task/ValueResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/task/ValueResolver.java b/core/src/main/java/brooklyn/util/task/ValueResolver.java
index 71b34a0..0670ad6 100644
--- a/core/src/main/java/brooklyn/util/task/ValueResolver.java
+++ b/core/src/main/java/brooklyn/util/task/ValueResolver.java
@@ -38,6 +38,7 @@ import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.flags.TypeCoercions;
import brooklyn.util.guava.Maybe;
import brooklyn.util.javalang.JavaClassNames;
+import brooklyn.util.repeat.Repeater;
import brooklyn.util.time.CountdownTimer;
import brooklyn.util.time.Duration;
import brooklyn.util.time.Durations;
@@ -57,6 +58,25 @@ import com.google.common.reflect.TypeToken;
*/
public class ValueResolver<T> implements DeferredSupplier<T> {
+ /**
+ * Period to wait if we're expected to return real quick
+ * but we want fast things to have time to finish.
+ * <p>
+ * Timings are always somewhat arbitrary but this at least
+ * allows some intention to be captured in code rather than arbitrary values. */
+ public static Duration REAL_QUICK_WAIT = Duration.millis(50);
+ /**
+ * Period to wait if we're expected to return quickly
+ * but we want to be a bit more generous for things to finish,
+ * without letting a caller get annoyed.
+ * <p>
+ * See {@link #REAL_QUICK_WAIT}. */
+ public static Duration PRETTY_QUICK_WAIT = Duration.millis(200);
+
+ /** Period to wait when we have to poll but want to give the illusion of no wait.
+ * See {@link Repeater#DEFAULT_REAL_QUICK_PERIOD} */
+ public static Duration REAL_QUICK_PERIOD = Repeater.DEFAULT_REAL_QUICK_PERIOD;
+
private static final Logger log = LoggerFactory.getLogger(ValueResolver.class);
final Object value;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/software/base/src/main/java/brooklyn/entity/brooklynnode/effector/SelectMasterEffectorBody.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/effector/SelectMasterEffectorBody.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/effector/SelectMasterEffectorBody.java
index 7ed3cb8..af07f3a 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/effector/SelectMasterEffectorBody.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/effector/SelectMasterEffectorBody.java
@@ -107,7 +107,7 @@ public class SelectMasterEffectorBody extends EffectorBody<Void> implements Sele
private void waitMasterHandover(final Entity oldMaster, final Entity newMaster) {
boolean masterChanged = Repeater.create()
- .backoff(Duration.millis(50), 1.5, Duration.FIVE_SECONDS)
+ .backoff(Repeater.DEFAULT_REAL_QUICK_PERIOD, 1.5, Duration.FIVE_SECONDS)
.limitTimeTo(Duration.ONE_MINUTE)
.until(new Callable<Boolean>() {
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/software/base/src/main/java/brooklyn/entity/software/StaticSensor.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/software/StaticSensor.java b/software/base/src/main/java/brooklyn/entity/software/StaticSensor.java
index 8688ec8..4b7c9d6 100644
--- a/software/base/src/main/java/brooklyn/entity/software/StaticSensor.java
+++ b/software/base/src/main/java/brooklyn/entity/software/StaticSensor.java
@@ -22,14 +22,28 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.config.ConfigKey;
+import brooklyn.enricher.basic.Propagator;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.EntityLocal;
import brooklyn.entity.effector.AddSensor;
+import brooklyn.management.Task;
import brooklyn.util.config.ConfigBag;
import brooklyn.util.guava.Maybe;
import brooklyn.util.task.Tasks;
-import brooklyn.util.time.Duration;
+import brooklyn.util.task.ValueResolver;
+import com.google.common.base.Supplier;
+
+/**
+ * Provides an initializer/feed which simply sets a given value.
+ * <p>
+ * {@link Task}/{@link Supplier} values are resolved when written,
+ * unlike config values which are resolved on each read.
+ * <p>
+ * This supports a {@link StaticSensor#SENSOR_PERIOD}
+ * which can be useful if the supplied value is such a function.
+ * However when the source is another sensor,
+ * consider using {@link Propagator} which listens for changes instead. */
public class StaticSensor<T> extends AddSensor<T> {
private static final Logger log = LoggerFactory.getLogger(StaticSensor.class);
@@ -48,7 +62,7 @@ public class StaticSensor<T> extends AddSensor<T> {
public void apply(EntityLocal entity) {
super.apply(entity);
- Maybe<T> v = Tasks.resolving(value).as((Class<T>)sensor.getType()).timeout(Duration.millis(200)).getMaybe();
+ 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.setAttribute(sensor, v.get());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
index 129bf3d..6dd97d6 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
@@ -344,7 +344,7 @@ public class CouchbaseNodeSshDriver extends AbstractSoftwareProcessSshDriver imp
// wait until the re-balance is started
// (if it's quick, this might miss it, but it will only block for 30s if so)
Repeater.create()
- .backoff(Duration.millis(10), 2, Duration.millis(500))
+ .backoff(Repeater.DEFAULT_REAL_QUICK_PERIOD, 2, Duration.millis(500))
.limitTimeTo(Duration.THIRTY_SECONDS)
.until(new Callable<Boolean>() {
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
index 219d67a..e7104c9 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
@@ -39,6 +39,7 @@ import brooklyn.rest.filter.HaHotStateRequired;
import brooklyn.rest.transform.EntityTransformer;
import brooklyn.rest.util.WebResourceUtils;
import brooklyn.util.flags.TypeCoercions;
+import brooklyn.util.task.ValueResolver;
import brooklyn.util.text.Strings;
import brooklyn.util.time.Duration;
@@ -96,7 +97,7 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
EntityLocal entity = brooklyn().getEntity(application, entityToken);
ConfigKey<?> ck = findConfig(entity, configKeyName);
Object value = ((EntityInternal)entity).config().getRaw(ck).orNull();
- return resolving(value).preferJson(preferJson).asJerseyOutermostReturnValue(true).raw(raw).context(entity).timeout(Duration.millis(100)).renderAs(ck).resolve();
+ return resolving(value).preferJson(preferJson).asJerseyOutermostReturnValue(true).raw(raw).context(entity).timeout(ValueResolver.PRETTY_QUICK_WAIT).renderAs(ck).resolve();
}
private ConfigKey<?> findConfig(EntityLocal entity, String configKeyName) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
index 6e49acc..05bf73e 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
@@ -38,6 +38,7 @@ import brooklyn.rest.domain.SensorSummary;
import brooklyn.rest.filter.HaHotStateRequired;
import brooklyn.rest.transform.SensorTransformer;
import brooklyn.rest.util.WebResourceUtils;
+import brooklyn.util.task.ValueResolver;
import brooklyn.util.text.Strings;
import brooklyn.util.time.Duration;
@@ -83,7 +84,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
final EntityLocal entity = brooklyn().getEntity(application, entityToken);
AttributeSensor<?> sensor = findSensor(entity, sensorName);
Object value = entity.getAttribute(sensor);
- return resolving(value).preferJson(preferJson).asJerseyOutermostReturnValue(true).raw(raw).context(entity).timeout(Duration.millis(100)).renderAs(sensor).resolve();
+ return resolving(value).preferJson(preferJson).asJerseyOutermostReturnValue(true).raw(raw).context(entity).timeout(ValueResolver.PRETTY_QUICK_WAIT).renderAs(sensor).resolve();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/usage/rest-server/src/main/java/brooklyn/rest/transform/EffectorTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/transform/EffectorTransformer.java b/usage/rest-server/src/main/java/brooklyn/rest/transform/EffectorTransformer.java
index 925ed8f..c71680a 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/transform/EffectorTransformer.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/transform/EffectorTransformer.java
@@ -26,7 +26,6 @@ import javax.annotation.Nullable;
import brooklyn.entity.Effector;
import brooklyn.entity.Entity;
import brooklyn.entity.ParameterType;
-import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.basic.EntityLocal;
import brooklyn.rest.domain.EffectorSummary;
import brooklyn.rest.domain.EffectorSummary.ParameterSummary;
@@ -34,7 +33,7 @@ import brooklyn.rest.util.WebResourceUtils;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.guava.Maybe;
import brooklyn.util.task.Tasks;
-import brooklyn.util.time.Duration;
+import brooklyn.util.task.ValueResolver;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
@@ -76,7 +75,7 @@ public class EffectorTransformer {
protected static EffectorSummary.ParameterSummary<?> parameterSummary(Entity entity, ParameterType<?> parameterType) {
try {
Maybe<?> defaultValue = Tasks.resolving(parameterType.getDefaultValue()).as(parameterType.getParameterClass())
- .context(entity).timeout(Duration.millis(50)).getMaybe();
+ .context(entity).timeout(ValueResolver.REAL_QUICK_WAIT).getMaybe();
return new ParameterSummary(parameterType.getName(), parameterType.getParameterClassName(),
parameterType.getDescription(),
WebResourceUtils.getValueForDisplay(defaultValue.orNull(), true, false));
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8df4cdfd/utils/common/src/main/java/brooklyn/util/repeat/Repeater.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/brooklyn/util/repeat/Repeater.java b/utils/common/src/main/java/brooklyn/util/repeat/Repeater.java
index bd76ea8..a80bb27 100644
--- a/utils/common/src/main/java/brooklyn/util/repeat/Repeater.java
+++ b/utils/common/src/main/java/brooklyn/util/repeat/Repeater.java
@@ -83,6 +83,13 @@ public class Repeater {
private static final Logger log = LoggerFactory.getLogger(Repeater.class);
+ /** A small initial duration that something should wait between repeats,
+ * e.g. when doing {@link #backoffTo(Duration)}.
+ * <p>
+ * Chosen to be small enough that a user won't notice at all,
+ * but we're not going to be chewing up CPU while waiting. */
+ public static final Duration DEFAULT_REAL_QUICK_PERIOD = Duration.millis(10);
+
private final String description;
private Callable<?> body = Callables.returning(null);
private Callable<Boolean> exitCondition;