Use configuration definitions from SequenceGroup and add local mutex
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/77d0ddb7 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/77d0ddb7 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/77d0ddb7 Branch: refs/heads/master Commit: 77d0ddb7336e60dcf9ed9b1f3085c422c6811a3f Parents: a5aff68 Author: Andrew Donald Kennedy <[email protected]> Authored: Tue Feb 7 09:44:37 2017 +0000 Committer: Andrew Donald Kennedy <[email protected]> Committed: Tue Apr 11 14:34:26 2017 +0100 ---------------------------------------------------------------------- .../brooklyn/entity/stock/SequenceEntity.java | 44 +++--------- .../entity/stock/SequenceEntityImpl.java | 74 ++++++++++++-------- 2 files changed, 52 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/77d0ddb7/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntity.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntity.java b/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntity.java index 5135f3c..f53ba65 100644 --- a/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntity.java +++ b/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntity.java @@ -23,15 +23,10 @@ import org.apache.brooklyn.api.entity.ImplementedBy; import org.apache.brooklyn.api.sensor.AttributeSensor; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.annotation.Effector; -import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.effector.MethodEffector; import org.apache.brooklyn.core.entity.trait.Startable; -import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey; -import org.apache.brooklyn.core.sensor.Sensors; +import org.apache.brooklyn.entity.group.SequenceGroup; import org.apache.brooklyn.util.core.flags.SetFromFlag; -import org.apache.brooklyn.util.text.StringPredicates; - -import com.google.common.base.Predicates; /** * An entity that supplies a sequence of values through an effector. @@ -44,46 +39,23 @@ import com.google.common.base.Predicates; * sequence.start: 0 * sequence.increment: 1 * sequence.format: "global-%03d" - * sequence.name: "global" * }</pre> */ @ImplementedBy(SequenceEntityImpl.class) public interface SequenceEntity extends Entity, Startable { + AttributeSensor<Integer> SEQUENCE_VALUE = SequenceGroup.SEQUENCE_VALUE; + + AttributeSensor<String> SEQUENCE_STRING = SequenceGroup.SEQUENCE_STRING; + @SetFromFlag("sequenceStart") - ConfigKey<Integer> SEQUENCE_START = ConfigKeys.builder(Integer.class) - .name("sequence.start") - .description("The starting point of the sequence") - .defaultValue(1) - .constraint(Predicates.<Integer>notNull()) - .build(); + ConfigKey<Integer> SEQUENCE_START = SequenceGroup.SEQUENCE_START; @SetFromFlag("sequenceIncrement") - ConfigKey<Integer> SEQUENCE_INCREMENT = ConfigKeys.builder(Integer.class) - .name("sequence.increment") - .description("The sequence increment for the next value") - .defaultValue(1) - .constraint(Predicates.<Integer>notNull()) - .build(); + ConfigKey<Integer> SEQUENCE_INCREMENT = SequenceGroup.SEQUENCE_INCREMENT; @SetFromFlag("sequenceFormat") - ConfigKey<String> SEQUENCE_FORMAT = ConfigKeys.builder(String.class) - .name("sequence.format") - .description("A format used to generate a string representation of the sequence") - .defaultValue("%d") - .constraint(StringPredicates.containsRegex("%[-#+ 0,(]*[0-9]*[doxX]")) - .build(); - - @SetFromFlag("sequenceName") - AttributeSensorAndConfigKey<String, String> SEQUENCE_NAME = ConfigKeys.newStringSensorAndConfigKey("sequence.name", "The name of the sequence", "sequence"); - - AttributeSensor<Integer> SEQUENCE_VALUE = Sensors.builder(Integer.class, "sequence.value") - .description("The current value of the sequence") - .build(); - - AttributeSensor<String> SEQUENCE_STRING = Sensors.builder(String.class, "sequence.string") - .description("The current value of the sequence formatted as a string") - .build(); + ConfigKey<String> SEQUENCE_FORMAT = SequenceGroup.SEQUENCE_FORMAT; MethodEffector<Void> RESET = new MethodEffector<Void>(SequenceEntity.class, "reset"); MethodEffector<Void> INCREMENT = new MethodEffector<Void>(SequenceEntity.class, "increment"); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/77d0ddb7/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntityImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntityImpl.java b/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntityImpl.java index 338b323..0ddb134 100644 --- a/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntityImpl.java +++ b/core/src/main/java/org/apache/brooklyn/entity/stock/SequenceEntityImpl.java @@ -22,17 +22,16 @@ import java.util.Collection; import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.core.entity.AbstractEntity; -import org.apache.brooklyn.core.feed.ConfigToAttributes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class SequenceEntityImpl extends AbstractEntity implements SequenceEntity { - public SequenceEntityImpl() { } + private static final Logger LOG = LoggerFactory.getLogger(SequenceEntity.class); - public void init() { - super.init(); + private Object mutex = new Object(); - ConfigToAttributes.apply(this, SEQUENCE_NAME); - } + public SequenceEntityImpl() { } @Override public void start(Collection<? extends Location> locations) { @@ -52,48 +51,63 @@ public class SequenceEntityImpl extends AbstractEntity implements SequenceEntity start(getLocations()); } - protected void sequence(Integer value) { - String format = config().get(SEQUENCE_FORMAT); - - sensors().set(SEQUENCE_VALUE, value); - sensors().set(SEQUENCE_STRING, String.format(format, value)); - } - @Override public Integer currentValue() { - return sensors().get(SEQUENCE_VALUE); + synchronized (mutex) { + return sensors().get(SEQUENCE_VALUE); + } } @Override public String currentString() { - return sensors().get(SEQUENCE_STRING); + synchronized (mutex) { + return sensors().get(SEQUENCE_STRING); + } } @Override - public synchronized Integer nextValue() { - increment(); - return currentValue(); + public Integer nextValue() { + synchronized (mutex) { + increment(); + return currentValue(); + } } @Override - public synchronized String nextString() { - increment(); - return currentString(); + public String nextString() { + synchronized (mutex) { + increment(); + return currentString(); + } } @Override - public synchronized Void increment() { - Integer increment = config().get(SEQUENCE_INCREMENT); - Integer current = currentValue(); - sequence(current + increment); - return null; + public Void increment() { + synchronized (mutex) { + Integer increment = config().get(SEQUENCE_INCREMENT); + Integer current = currentValue(); + sequence(current + increment); + return null; + } } @Override - public synchronized Void reset() { - Integer start = config().get(SEQUENCE_START); - sequence(start); - return null; + public Void reset() { + synchronized (mutex) { + Integer start = config().get(SEQUENCE_START); + sequence(start); + return null; + } + } + + private void sequence(Integer value) { + String format = config().get(SEQUENCE_FORMAT); + String string = String.format(format, value); + + sensors().set(SEQUENCE_VALUE, value); + sensors().set(SEQUENCE_STRING, string); + + LOG.debug("Sequence for {} set to {}", this, value); } }
