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));
}
}