You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by gr...@apache.org on 2014/12/03 17:50:17 UTC

[1/3] incubator-brooklyn git commit: Fix the DynamicMultiGroup rebind actions

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 6db032864 -> 0493d6300


Fix the DynamicMultiGroup rebind actions


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

Branch: refs/heads/master
Commit: edfe1219e5715ff0f282cf6fdf7e6c9a63f28c76
Parents: 4b11fea
Author: Andrew Kennedy <gr...@apache.org>
Authored: Wed Dec 3 16:06:26 2014 +0100
Committer: Andrew Kennedy <gr...@apache.org>
Committed: Wed Dec 3 16:06:26 2014 +0100

----------------------------------------------------------------------
 .../entity/group/DynamicMultiGroup.java         |  5 ++
 .../entity/group/DynamicMultiGroupImpl.java     | 58 +++++++++++++++-----
 2 files changed, 49 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/edfe1219/core/src/main/java/brooklyn/entity/group/DynamicMultiGroup.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/group/DynamicMultiGroup.java b/core/src/main/java/brooklyn/entity/group/DynamicMultiGroup.java
index 07b6693..44a3378 100644
--- a/core/src/main/java/brooklyn/entity/group/DynamicMultiGroup.java
+++ b/core/src/main/java/brooklyn/entity/group/DynamicMultiGroup.java
@@ -18,6 +18,8 @@
  */
 package brooklyn.entity.group;
 
+import java.util.Map;
+
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.Group;
@@ -66,6 +68,9 @@ public interface DynamicMultiGroup extends DynamicGroup {
     );
 
 
+    AttributeSensor<Map<String, BasicGroup>> BUCKETS = Sensors.newSensor(new TypeToken<Map<String, BasicGroup>>() { },
+            "brooklyn.multigroup.buckets", "The bucket name to Group mappings");
+
     /**
      * Interval (in seconds) between scans of all entities for membership and distribution into buckets.
      */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/edfe1219/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java b/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
index afb51e0..b5d9039 100644
--- a/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
+++ b/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
@@ -34,12 +34,13 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.feed.function.FunctionFeed;
 import brooklyn.event.feed.function.FunctionPollConfig;
+import brooklyn.util.collections.MutableMap;
 
 import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.Sets;
@@ -47,22 +48,35 @@ import com.google.common.collect.Sets;
 public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMultiGroup {
 
     /**
+     * {@link Function} for deriving bucket names from a sensor value.
+     */
+    public static class BucketFromAttribute implements Function<Entity, String> {
+        private final AttributeSensor<?> sensor;
+        private final String defaultValue;
+
+        public BucketFromAttribute(AttributeSensor<?> sensor, String defaultValue) {
+            this.sensor = Preconditions.checkNotNull(sensor, "sensor");
+            this.defaultValue = defaultValue;
+        }
+
+        @Override
+        public String apply(@Nullable Entity input) {
+            Object value = input.getAttribute(sensor);
+            if (value == null) {
+                return defaultValue;
+            } else {
+                return String.valueOf(value);
+            }
+        };
+    }
+
+    /**
      * Convenience factory method for the common use-case of deriving the bucket directly from a sensor value.
      *
      * @see DynamicMultiGroup#BUCKET_FUNCTION
      */
     public static Function<Entity, String> bucketFromAttribute(final AttributeSensor<?> sensor, final String defaultValue) {
-        return new Function<Entity, String>() {
-            @Override
-            public String apply(@Nullable Entity input) {
-                Object value = input.getAttribute(sensor);
-                if (value == null) {
-                    return defaultValue;
-                } else {
-                    return String.valueOf(value);
-                }
-            };
-        };
+        return new BucketFromAttribute(sensor, defaultValue);
     }
 
     /**
@@ -74,13 +88,16 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
         return bucketFromAttribute(sensor, null);
     }
 
-    private Map<String, BasicGroup> buckets = Maps.newHashMap();
-    private volatile FunctionFeed rescan;
+    private transient FunctionFeed rescan;
 
     @Override
     public void init() {
         super.init();
+        setAttribute(BUCKETS, MutableMap.<String, BasicGroup>of());
+        connectScanner();
+    }
 
+    private void connectScanner() {
         Long interval = getConfig(RESCAN_INTERVAL);
         if (interval != null && interval > 0L) {
             rescan = FunctionFeed.builder()
@@ -99,6 +116,15 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
     }
 
     @Override
+    public void rebind() {
+        super.rebind();
+
+        if (rescan == null) {
+            connectScanner();
+        }
+    }
+
+    @Override
     public void stop() {
         super.stop();
 
@@ -145,6 +171,7 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
             Function<Entity, String> bucketFunction = getConfig(BUCKET_FUNCTION);
             EntitySpec<? extends BasicGroup> bucketSpec = getConfig(BUCKET_SPEC);
             if (bucketFunction == null || bucketSpec == null) return;
+            Map<String, BasicGroup> buckets = getAttribute(BUCKETS);
 
             // Bucketize the members where the function gives a non-null bucket
             Multimap<String, Entity> entityMapping = Multimaps.index(
@@ -168,6 +195,9 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
                 removeChild(removed);
                 Entities.unmanage(removed);
             }
+
+            // Save the bucket mappings
+            setAttribute(BUCKETS, buckets);
         }
     }
 


[3/3] incubator-brooklyn git commit: This closes #372

Posted by gr...@apache.org.
This closes #372

* github/pr/372:
  Make BUCKETS map immutable (see review comment from @aledsage)
  Fix the DynamicMultiGroup rebind actions


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0493d630
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0493d630
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0493d630

Branch: refs/heads/master
Commit: 0493d6300d99013fc53b76a653e30cd73219970b
Parents: 6db0328 e417468
Author: Andrew Kennedy <gr...@apache.org>
Authored: Wed Dec 3 17:50:04 2014 +0100
Committer: Andrew Kennedy <gr...@apache.org>
Committed: Wed Dec 3 17:50:04 2014 +0100

----------------------------------------------------------------------
 .../entity/group/DynamicMultiGroup.java         |  5 ++
 .../entity/group/DynamicMultiGroupImpl.java     | 59 +++++++++++++++-----
 2 files changed, 50 insertions(+), 14 deletions(-)
----------------------------------------------------------------------



[2/3] incubator-brooklyn git commit: Make BUCKETS map immutable (see review comment from @aledsage)

Posted by gr...@apache.org.
Make BUCKETS map immutable (see review comment from @aledsage)


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

Branch: refs/heads/master
Commit: e4174684c40f8311828e50b9adc1f7df23bde951
Parents: edfe121
Author: Andrew Kennedy <gr...@apache.org>
Authored: Wed Dec 3 16:49:12 2014 +0100
Committer: Andrew Kennedy <gr...@apache.org>
Committed: Wed Dec 3 16:49:12 2014 +0100

----------------------------------------------------------------------
 .../java/brooklyn/entity/group/DynamicMultiGroupImpl.java     | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e4174684/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java b/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
index b5d9039..50b9a63 100644
--- a/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
+++ b/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
@@ -39,6 +39,7 @@ import brooklyn.util.collections.MutableMap;
 import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Multimap;
@@ -93,7 +94,7 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
     @Override
     public void init() {
         super.init();
-        setAttribute(BUCKETS, MutableMap.<String, BasicGroup>of());
+        setAttribute(BUCKETS, ImmutableMap.<String, BasicGroup>of());
         connectScanner();
     }
 
@@ -171,7 +172,7 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
             Function<Entity, String> bucketFunction = getConfig(BUCKET_FUNCTION);
             EntitySpec<? extends BasicGroup> bucketSpec = getConfig(BUCKET_SPEC);
             if (bucketFunction == null || bucketSpec == null) return;
-            Map<String, BasicGroup> buckets = getAttribute(BUCKETS);
+            Map<String, BasicGroup> buckets = MutableMap.copyOf(getAttribute(BUCKETS));
 
             // Bucketize the members where the function gives a non-null bucket
             Multimap<String, Entity> entityMapping = Multimaps.index(
@@ -197,7 +198,7 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
             }
 
             // Save the bucket mappings
-            setAttribute(BUCKETS, buckets);
+            setAttribute(BUCKETS, ImmutableMap.copyOf(buckets));
         }
     }