less magic
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/d79f9ef0 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/d79f9ef0 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/d79f9ef0 Branch: refs/heads/master Commit: d79f9ef0775dd426485839ee681f06b55dda7c23 Parents: ae8eb9e Author: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com> Authored: Wed Jan 25 13:48:35 2017 +0200 Committer: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com> Committed: Wed Jan 25 13:48:35 2017 +0200 ---------------------------------------------------------------------- .../brooklyn/core/sensor/ReleaseableLatch.java | 24 ++++++++++---------- .../MachineLifecycleEffectorTasks.java | 1 + .../base/SoftwareProcessEntityLatchTest.java | 9 -------- 3 files changed, 13 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d79f9ef0/core/src/main/java/org/apache/brooklyn/core/sensor/ReleaseableLatch.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/ReleaseableLatch.java b/core/src/main/java/org/apache/brooklyn/core/sensor/ReleaseableLatch.java index 41ed779..8d28f93 100644 --- a/core/src/main/java/org/apache/brooklyn/core/sensor/ReleaseableLatch.java +++ b/core/src/main/java/org/apache/brooklyn/core/sensor/ReleaseableLatch.java @@ -21,13 +21,13 @@ package org.apache.brooklyn.core.sensor; import java.util.concurrent.Semaphore; import org.apache.brooklyn.api.entity.Entity; -import org.apache.brooklyn.util.core.task.DeferredSupplier; -import org.apache.brooklyn.util.core.task.ImmediateSupplier; +import org.apache.brooklyn.util.core.flags.TypeCoercions; import org.apache.brooklyn.util.exceptions.Exceptions; -import org.apache.brooklyn.util.guava.Maybe; + +import com.google.common.base.Function; // DeferredSupplier used as a marker interface to prevent coercion. When resolved it must evaluate to {@code Boolean.TRUE}. -public interface ReleaseableLatch extends DeferredSupplier<Boolean>, ImmediateSupplier<Boolean> { +public interface ReleaseableLatch { /** * Increment usage count for the {@code caller} entity */ @@ -38,21 +38,21 @@ public interface ReleaseableLatch extends DeferredSupplier<Boolean>, ImmediateSu */ void release(Entity caller); - static abstract class AbstractReleaseableLatch implements ReleaseableLatch { - // Instances coerce to TRUE as they are non-null. - @Override public Boolean get() {return Boolean.TRUE;} - @Override public Maybe<Boolean> getImmediately() {return Maybe.of(Boolean.TRUE);} - } - ReleaseableLatch NOP = new Factory.NopLatch(); static class Factory { - private static class NopLatch extends AbstractReleaseableLatch { + static { + TypeCoercions.registerAdapter(ReleaseableLatch.class, Boolean.class, new Function<ReleaseableLatch, Boolean>() { + @Override public Boolean apply(ReleaseableLatch input) { return Boolean.TRUE; } + }); + } + + private static class NopLatch implements ReleaseableLatch { @Override public void acquire(Entity caller) {} @Override public void release(Entity caller) {} } - private static class MaxConcurrencyLatch extends AbstractReleaseableLatch { + private static class MaxConcurrencyLatch implements ReleaseableLatch { private int permits; private transient final Semaphore sem; http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d79f9ef0/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java index c0d80af..2acb604 100644 --- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java +++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java @@ -1152,6 +1152,7 @@ public abstract class MachineLifecycleEffectorTasks { return ReleaseableLatch.NOP; } else { ValueResolverIterator<Boolean> iter = resolveLatchIterator(entity, rawValue.get(), configKey); + // The iterator is used to prevent coercion; the value should always be the last one, but iter.last() will return a coerced Boolean Maybe<ReleaseableLatch> releasableLatchMaybe = iter.next(ReleaseableLatch.class); if (releasableLatchMaybe.isPresent()) { ReleaseableLatch latch = releasableLatchMaybe.get(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d79f9ef0/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java ---------------------------------------------------------------------- diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java index c5e7fc5..f53c377 100644 --- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java +++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java @@ -56,7 +56,6 @@ import org.apache.brooklyn.test.Asserts; import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.task.DynamicTasks; import org.apache.brooklyn.util.core.task.TaskInternal; -import org.apache.brooklyn.util.guava.Maybe; import org.apache.brooklyn.util.time.Duration; import org.apache.brooklyn.util.time.Time; import org.slf4j.Logger; @@ -288,14 +287,6 @@ public class SoftwareProcessEntityLatchTest extends BrooklynAppUnitTestSupport { this.maxConcurrency = maxConcurrency; } - public Boolean get() { - return delegate.get(); - } - - public Maybe<Boolean> getImmediately() { - return delegate.getImmediately(); - } - public void acquire(Entity caller) { delegate.acquire(caller); assertCount(cnt.incrementAndGet());