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/01 18:49:33 UTC

[47/50] brooklyn-server git commit: MembershipTrackingPolicy: support configuring sensors to track

MembershipTrackingPolicy: support configuring sensors to track


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/24c3a4ce
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/24c3a4ce
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/24c3a4ce

Branch: refs/heads/0.5.0
Commit: 24c3a4cea85e9e08bca772d7841bff10d9b433bd
Parents: 1bdb182
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 17 14:39:28 2013 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Apr 26 14:40:05 2013 +0100

----------------------------------------------------------------------
 .../group/AbstractMembershipTrackingPolicy.java | 19 +++++++++++++++++++
 .../group/MembershipTrackingPolicyTest.java     | 20 +++++++++++++++++++-
 2 files changed, 38 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/24c3a4ce/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 c42ec71..d345bc5 100644
--- a/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
+++ b/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
@@ -2,6 +2,7 @@ package brooklyn.entity.group;
 
 import java.util.Collections;
 import java.util.Map;
+import java.util.Set;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,11 +11,14 @@ import brooklyn.entity.Entity;
 import brooklyn.entity.Group;
 import brooklyn.entity.basic.DynamicGroup;
 import brooklyn.entity.trait.Startable;
+import brooklyn.event.Sensor;
 import brooklyn.event.SensorEvent;
 import brooklyn.event.SensorEventListener;
 import brooklyn.policy.basic.AbstractPolicy;
+import brooklyn.util.flags.SetFromFlag;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
 
 /** abstract class which helps track membership of a group, invoking (empty) methods in this class on MEMBER{ADDED,REMOVED} events, as well as SERVICE_UP {true,false} for those members. */
 public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
@@ -22,9 +26,14 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
     
     private Group group;
     
+    @SetFromFlag
+    private Set<Sensor<?>> sensorsToTrack;
+    
     public AbstractMembershipTrackingPolicy(Map flags) {
         super(flags);
+        if (sensorsToTrack == null)  sensorsToTrack = Sets.newLinkedHashSet();
     }
+    
     public AbstractMembershipTrackingPolicy() {
         this(Collections.emptyMap());
     }
@@ -67,6 +76,8 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
     protected void subscribeToGroup() {
         Preconditions.checkNotNull(group, "The group cannot be null");
 
+        LOG.debug("Subscribing to group "+group+", for memberAdded, memberRemoved, serviceUp, and {}", sensorsToTrack);
+        
         subscribe(group, DynamicGroup.MEMBER_ADDED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 onEntityAdded(event.getValue());
@@ -83,6 +94,14 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
                 onEntityChange(event.getSource());
             }
         });
+        for (Sensor<?> sensor : sensorsToTrack) {
+            subscribeToMembers(group, sensor, new SensorEventListener<Object>() {
+                @Override public void onEvent(SensorEvent<Object> event) {
+                    onEntityChange(event.getSource());
+                }
+            });
+        }
+        
         for (Entity it : group.getMembers()) { onEntityAdded(it); }
         
         // FIXME cluster may be remote, we need to make this retrieve the remote values, or store members in local mgmt node, or use children

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/24c3a4ce/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 a2d2257..a8f20e6 100644
--- a/core/src/test/java/brooklyn/entity/group/MembershipTrackingPolicyTest.java
+++ b/core/src/test/java/brooklyn/entity/group/MembershipTrackingPolicyTest.java
@@ -25,6 +25,7 @@ import brooklyn.util.MutableMap;
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 
 public class MembershipTrackingPolicyTest {
 
@@ -115,7 +116,24 @@ public class MembershipTrackingPolicyTest {
         assertRecordsEventually(Record.newAdded(e1));
     }
 
+    @Test
+    public void testNotifiedOfExtraTrackedSensors() throws Exception {
+        TestEntity e1 = createAndManageChildOf(group);
+
+        RecordingMembershipTrackingPolicy policy2 = new RecordingMembershipTrackingPolicy(MutableMap.of("group", group, "sensorsToTrack", ImmutableSet.of(TestEntity.NAME)));
+        group.addPolicy(policy2);
+        policy2.setGroup(group);
+
+        e1.setAttribute(TestEntity.NAME, "myname");
+        
+        assertRecordsEventually(policy2, Record.newAdded(e1), Record.newChanged(e1));
+    }
+
     private void assertRecordsEventually(final Record... expected) {
+        assertRecordsEventually(policy, expected);
+    }
+    
+    private void assertRecordsEventually(final RecordingMembershipTrackingPolicy policy, final Record... expected) {
         TestUtils.assertEventually(MutableMap.of("timeout", TIMEOUT_MS), new Runnable() {
             public void run() {
                 assertEquals(policy.records, ImmutableList.copyOf(expected), "actual="+policy.records);
@@ -132,7 +150,7 @@ public class MembershipTrackingPolicyTest {
     static class RecordingMembershipTrackingPolicy extends AbstractMembershipTrackingPolicy {
         final List<Record> records = new CopyOnWriteArrayList<Record>();
         
-        public RecordingMembershipTrackingPolicy(MutableMap<String, BasicGroup> flags) {
+        public RecordingMembershipTrackingPolicy(MutableMap<String, ?> flags) {
             super(flags);
         }