You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2014/07/17 11:08:02 UTC
[3/4] git commit: MembershipTrackingPolicy: default to not notifying
of duplicates
MembershipTrackingPolicy: default to not notifying of duplicates
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/e832afb3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/e832afb3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/e832afb3
Branch: refs/heads/master
Commit: e832afb3959f7f7e0226a128bf0a26ade0d8cff7
Parents: 6325e50
Author: Aled Sage <al...@gmail.com>
Authored: Wed Jul 16 15:34:03 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Jul 16 16:22:49 2014 +0100
----------------------------------------------------------------------
.../group/AbstractMembershipTrackingPolicy.java | 36 +++++++++-----------
.../group/MembershipTrackingPolicyTest.java | 25 +++++++++++---
.../brooklyn/entity/pool/ServerPoolImpl.java | 3 +-
.../entity/proxy/AbstractControllerImpl.java | 3 +-
4 files changed, 39 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e832afb3/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java b/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
index e4508fd..e3f0dce 100644
--- a/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
+++ b/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
@@ -33,7 +33,6 @@ import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.DynamicGroup;
import brooklyn.entity.basic.EntityLocal;
-import brooklyn.entity.trait.Startable;
import brooklyn.event.Sensor;
import brooklyn.event.SensorEvent;
import brooklyn.event.SensorEventListener;
@@ -60,7 +59,7 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
public static final ConfigKey<Boolean> NOTIFY_ON_DUPLICATES = ConfigKeys.newBooleanConfigKey("notifyOnDuplicates",
"Whether to notify listeners when a sensor is published with the same value as last time",
- true);
+ false);
public static final ConfigKey<Group> GROUP = ConfigKeys.newConfigKey(Group.class, "group");
@@ -175,28 +174,25 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
for (Sensor<?> sensor : getSensorsToTrack()) {
subscribeToMembers(group, sensor, new SensorEventListener<Object>() {
- boolean hasWarnedOfServiceUp = false;
-
@Override public void onEvent(SensorEvent<Object> event) {
boolean notifyOnDuplicates = getRequiredConfig(NOTIFY_ON_DUPLICATES);
- if (Startable.SERVICE_UP.equals(event.getSensor()) && notifyOnDuplicates && !hasWarnedOfServiceUp) {
- LOG.warn("Deprecated behaviour: not notifying of duplicate value for service-up in {}, group {}", AbstractMembershipTrackingPolicy.this, group);
- hasWarnedOfServiceUp = true;
- notifyOnDuplicates = false;
- }
-
String entityId = event.getSource().getId();
- Map<Sensor<Object>, Object> newMap = MutableMap.<Sensor<Object>, Object>of();
- // NOTE: putIfAbsent returns null if the key is not present, or the *previous* value if present
- Map<Sensor<Object>, Object> sensorCache = entitySensorCache.putIfAbsent(entityId, newMap);
- if (sensorCache == null) {
- sensorCache = newMap;
- }
-
- if (!notifyOnDuplicates && Objects.equal(event.getValue(), sensorCache.put(event.getSensor(), event.getValue()))) {
- // ignore if value has not changed
- return;
+ if (!notifyOnDuplicates) {
+ Map<Sensor<Object>, Object> newMap = MutableMap.<Sensor<Object>, Object>of();
+ // NOTE: putIfAbsent returns null if the key is not present, or the *previous* value if present
+ Map<Sensor<Object>, Object> sensorCache = entitySensorCache.putIfAbsent(entityId, newMap);
+ if (sensorCache == null) {
+ sensorCache = newMap;
+ }
+
+ boolean oldExists = sensorCache.containsKey(event.getSensor());
+ Object oldVal = sensorCache.put(event.getSensor(), event.getValue());
+
+ if (oldExists && Objects.equal(event.getValue(), oldVal)) {
+ // ignore if value has not changed
+ return;
+ }
}
onEntityEvent(EventType.ENTITY_CHANGE, event.getSource());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e832afb3/core/src/test/java/brooklyn/entity/group/MembershipTrackingPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/MembershipTrackingPolicyTest.java b/core/src/test/java/brooklyn/entity/group/MembershipTrackingPolicyTest.java
index 86a5eb9..8fe0e19 100644
--- a/core/src/test/java/brooklyn/entity/group/MembershipTrackingPolicyTest.java
+++ b/core/src/test/java/brooklyn/entity/group/MembershipTrackingPolicyTest.java
@@ -35,6 +35,7 @@ import brooklyn.entity.basic.Entities;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.trait.Startable;
import brooklyn.event.Sensor;
+import brooklyn.location.LocationSpec;
import brooklyn.location.basic.SimulatedLocation;
import brooklyn.management.EntityManager;
import brooklyn.policy.PolicySpec;
@@ -60,7 +61,7 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
@Override
public void setUp() throws Exception {
super.setUp();
- loc = new SimulatedLocation();
+ loc = mgmt.getLocationManager().createLocation(LocationSpec.create(SimulatedLocation.class));
entityManager = app.getManagementContext().getEntityManager();
group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)
@@ -169,25 +170,41 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
.configure(AbstractMembershipTrackingPolicy.GROUP, group));
e1.setAttribute(TestEntity.NAME, "myname");
-
assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
e1.setAttribute(TestEntity.NAME, "myname");
-
assertRecordsContinually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
e1.setAttribute(TestEntity.NAME, "mynewname");
+ assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1), Record.newChanged(e1));
+ }
+
+ // NOTIFY_ON_DUPLICATES==false is default
+ @Test
+ public void testDefaultNotNotifiedOfExtraTrackedSensorsIfDuplicate() throws Exception {
+ TestEntity e1 = createAndManageChildOf(group);
+
+ RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.addPolicy(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
+ .configure(AbstractMembershipTrackingPolicy.SENSORS_TO_TRACK, ImmutableSet.<Sensor<?>>of(TestEntity.NAME))
+ .configure(AbstractMembershipTrackingPolicy.GROUP, group));
+
+ e1.setAttribute(TestEntity.NAME, "myname");
+ assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
+ e1.setAttribute(TestEntity.NAME, "myname");
+ assertRecordsContinually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
+
+ e1.setAttribute(TestEntity.NAME, "mynewname");
assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1), Record.newChanged(e1));
}
- // NOTIFY_ON_DUPLICATES==true is default
@Test
public void testNotifiedOfExtraTrackedSensorsIfDuplicate() throws Exception {
TestEntity e1 = createAndManageChildOf(group);
RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.addPolicy(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
.configure(AbstractMembershipTrackingPolicy.SENSORS_TO_TRACK, ImmutableSet.<Sensor<?>>of(TestEntity.NAME))
+ .configure(AbstractMembershipTrackingPolicy.NOTIFY_ON_DUPLICATES, true)
.configure(AbstractMembershipTrackingPolicy.GROUP, group));
e1.setAttribute(TestEntity.NAME, "myname");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e832afb3/software/base/src/main/java/brooklyn/entity/pool/ServerPoolImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/pool/ServerPoolImpl.java b/software/base/src/main/java/brooklyn/entity/pool/ServerPoolImpl.java
index b05a4dc..5ca8646 100644
--- a/software/base/src/main/java/brooklyn/entity/pool/ServerPoolImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/pool/ServerPoolImpl.java
@@ -118,8 +118,7 @@ public class ServerPoolImpl extends DynamicClusterImpl implements ServerPool {
private void addMembershipTrackerPolicy() {
membershipTracker = addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
.displayName(getDisplayName() + " membership tracker")
- .configure("group", this)
- .configure("notifyOnDuplicates", false));
+ .configure("group", this));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e832afb3/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
index 2e0c0bd..9542b88 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -124,8 +124,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
serverPoolMemberTrackerPolicy = addPolicy(PolicySpec.create(ServerPoolMemberTrackerPolicy.class)
.displayName("Controller targets tracker")
.configure("group", serverPool)
- .configure("sensorsToTrack", sensorsToTrack)
- .configure(ServerPoolMemberTrackerPolicy.NOTIFY_ON_DUPLICATES, false));
+ .configure("sensorsToTrack", sensorsToTrack));
LOG.info("Added policy {} to {}", serverPoolMemberTrackerPolicy, this);