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/11/17 16:47:06 UTC

[1/5] incubator-brooklyn git commit: Fix Entities.waitForServiceUp to avoid NPE

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master cb043e22a -> 5d2faf64c


Fix Entities.waitForServiceUp to avoid NPE

- Never return null for repeater’s `until`; always return TRUE or FALSE.
  Otherwise it will NPE.

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

Branch: refs/heads/master
Commit: 79b2cac02edf21e3ada14f62c122dd091d797f1f
Parents: de1d8bc
Author: Aled Sage <al...@gmail.com>
Authored: Sat Nov 15 23:39:02 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Sat Nov 15 23:39:02 2014 +0000

----------------------------------------------------------------------
 core/src/main/java/brooklyn/entity/basic/Entities.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/79b2cac0/core/src/main/java/brooklyn/entity/basic/Entities.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/Entities.java b/core/src/main/java/brooklyn/entity/basic/Entities.java
index d073372..51f86f6 100644
--- a/core/src/main/java/brooklyn/entity/basic/Entities.java
+++ b/core/src/main/java/brooklyn/entity/basic/Entities.java
@@ -1022,7 +1022,7 @@ public class Entities {
                     .rethrowException().backoffTo(Duration.ONE_SECOND)
                     .until(new Callable<Boolean>() {
                         public Boolean call() {
-                            return entity.getAttribute(Startable.SERVICE_UP);
+                            return Boolean.TRUE.equals(entity.getAttribute(Startable.SERVICE_UP));
                         }})
                     .run()) {
                 throw new IllegalStateException("Timeout waiting for SERVICE_UP from "+entity);


[3/5] incubator-brooklyn git commit: Tidy EntityTransientCopyInternal

Posted by al...@apache.org.
Tidy EntityTransientCopyInternal


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

Branch: refs/heads/master
Commit: ee3019fa9b0d8b564205e216f1ad4131af820080
Parents: 79b2cac
Author: Aled Sage <al...@gmail.com>
Authored: Sat Nov 15 23:39:19 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 17 15:46:05 2014 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/basic/EntityTransientCopyInternal.java     | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ee3019fa/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java b/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
index 4cbe034..ef2a9ee 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
@@ -80,6 +80,8 @@ public interface EntityTransientCopyInternal {
     <T> T getConfig(HasConfigKey<T> key);
     Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited);
     Maybe<Object> getConfigRaw(HasConfigKey<?> key, boolean includeInherited);
+    TagSupport tags();
+    @Deprecated TagSupport getTagSupport();
     @Deprecated Set<Object> getTags();
     @Deprecated boolean containsTag(@Nonnull Object tag);
     String getCatalogItemId();
@@ -103,10 +105,8 @@ public interface EntityTransientCopyInternal {
     EntityManagementSupport getManagementSupport();
     ManagementContext getManagementContext();
     Effector<?> getEffector(String effectorName);
-    FeedSupport getFeedSupport();
+    @Deprecated FeedSupport getFeedSupport();
     FeedSupport feeds();
-    TagSupport getTagSupport();
-    TagSupport tags();
     RebindSupport<EntityMemento> getRebindSupport();
     // for REST calls on read-only entities which want to resolve values
     ExecutionContext getExecutionContext();


[2/5] incubator-brooklyn git commit: BrooklynLauncherTest: use LocalManagementContextForTests

Posted by al...@apache.org.
BrooklynLauncherTest: use LocalManagementContextForTests

- speeds up the test slightly


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

Branch: refs/heads/master
Commit: 984fbc4b957d724365c7c33218fc992edf63415b
Parents: ee3019f
Author: Aled Sage <al...@gmail.com>
Authored: Sat Nov 15 23:40:00 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 17 15:46:05 2014 +0000

----------------------------------------------------------------------
 .../src/test/java/brooklyn/launcher/BrooklynLauncherTest.java     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/984fbc4b/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java b/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
index 1d59bd2..1c20c62 100644
--- a/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
+++ b/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
@@ -41,6 +41,7 @@ import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.ManagementContext;
 import brooklyn.management.internal.LocalManagementContext;
 import brooklyn.test.HttpTestUtils;
+import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestApplicationImpl;
 import brooklyn.test.entity.TestEntity;
@@ -173,7 +174,7 @@ public class BrooklynLauncherTest {
     
     @Test
     public void testUsesSuppliedManagementContext() throws Exception {
-        LocalManagementContext myManagementContext = new LocalManagementContext();
+        LocalManagementContext myManagementContext = LocalManagementContextForTests.newInstance();
         launcher = BrooklynLauncher.newInstance()
                 .webconsole(false)
                 .managementContext(myManagementContext)


[5/5] incubator-brooklyn git commit: This closes #336

Posted by al...@apache.org.
This closes #336


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

Branch: refs/heads/master
Commit: 5d2faf64c5fe3d0ccf8caa67b17a887de4592078
Parents: cb043e2 7ef7b09
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 17 15:46:55 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 17 15:46:55 2014 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/basic/Entities.java    |  2 +-
 .../basic/EntityTransientCopyInternal.java      |  6 +--
 .../entity/group/DynamicMultiGroupImpl.java     |  3 +-
 .../entity/group/DynamicMultiGroupTest.java     | 40 +++++++++++++++++++-
 .../brooklyn/launcher/BrooklynLauncherTest.java |  3 +-
 5 files changed, 47 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[4/5] incubator-brooklyn git commit: DynamicMultiGroup: fix+test removing empty bucket

Posted by al...@apache.org.
DynamicMultiGroup: fix+test removing empty bucket

- Previously gave ConcurrentModificationException when removing,
  iterating over Sets.difference, because that set is a live-view
  rather than a copy.


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

Branch: refs/heads/master
Commit: 7ef7b092305fdfb1e66dec62160902d99192f0a4
Parents: 984fbc4
Author: Aled Sage <al...@gmail.com>
Authored: Sat Nov 15 23:48:00 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 17 15:46:05 2014 +0000

----------------------------------------------------------------------
 .../entity/group/DynamicMultiGroupImpl.java     |  3 +-
 .../entity/group/DynamicMultiGroupTest.java     | 40 +++++++++++++++++++-
 2 files changed, 41 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7ef7b092/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 17a9a81..afb51e0 100644
--- a/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
+++ b/core/src/main/java/brooklyn/entity/group/DynamicMultiGroupImpl.java
@@ -37,6 +37,7 @@ import brooklyn.event.feed.function.FunctionPollConfig;
 
 import com.google.common.base.Function;
 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;
@@ -161,7 +162,7 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
             }
 
             // Remove any now-empty buckets
-            Set<String> empty = Sets.difference(buckets.keySet(), entityMapping.keySet());
+            Set<String> empty = ImmutableSet.copyOf(Sets.difference(buckets.keySet(), entityMapping.keySet()));
             for (String name : empty) {
                 Group removed = buckets.remove(name);
                 removeChild(removed);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7ef7b092/core/src/test/java/brooklyn/entity/group/DynamicMultiGroupTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/DynamicMultiGroupTest.java b/core/src/test/java/brooklyn/entity/group/DynamicMultiGroupTest.java
index c2ee1ab..ec52636 100644
--- a/core/src/test/java/brooklyn/entity/group/DynamicMultiGroupTest.java
+++ b/core/src/test/java/brooklyn/entity/group/DynamicMultiGroupTest.java
@@ -25,7 +25,9 @@ import static brooklyn.entity.group.DynamicMultiGroup.RESCAN_INTERVAL;
 import static brooklyn.entity.group.DynamicMultiGroupImpl.bucketFromAttribute;
 import static com.google.common.base.Predicates.instanceOf;
 import static com.google.common.collect.Iterables.find;
-import static org.testng.Assert.*;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
 
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
@@ -48,6 +50,7 @@ import brooklyn.test.entity.TestEntity;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
 
 public class DynamicMultiGroupTest {
 
@@ -108,6 +111,41 @@ public class DynamicMultiGroupTest {
         checkDistribution(group, dmg, childSpec, child1, child2);
     }
 
+    @Test
+    public void testRemovesEmptyBuckets() {
+        Group group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
+        final DynamicMultiGroup dmg = app.createAndManageChild(
+                EntitySpec.create(DynamicMultiGroup.class)
+                        .configure(ENTITY_FILTER, instanceOf(TestEntity.class))
+                        .configure(BUCKET_FUNCTION, bucketFromAttribute(SENSOR))
+        );
+        app.subscribeToChildren(group, SENSOR, new SensorEventListener<String>() {
+            public void onEvent(SensorEvent<String> event) { dmg.rescanEntities(); }
+        });
+
+        EntitySpec<TestEntity> childSpec = EntitySpec.create(TestEntity.class);
+        TestEntity child1 = app.createAndManageChild(EntitySpec.create(childSpec).displayName("child1"));
+        TestEntity child2 = app.createAndManageChild(EntitySpec.create(childSpec).displayName("child2"));
+
+        // Expect two buckets: bucketA and bucketB 
+        child1.setAttribute(SENSOR, "bucketA");
+        child2.setAttribute(SENSOR, "bucketB");
+        dmg.rescanEntities();
+        Group bucketA = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketA"), null);
+        Group bucketB = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketB"), null);
+        assertNotNull(bucketA);
+        assertNotNull(bucketB);
+        
+        // Expect second bucket to be removed when empty 
+        child1.setAttribute(SENSOR, "bucketA");
+        child2.setAttribute(SENSOR, "bucketA");
+        dmg.rescanEntities();
+        bucketA = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketA"), null);
+        bucketB = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketB"), null);
+        assertNotNull(bucketA);
+        assertNull(bucketB);
+    }
+
     private void checkDistribution(final Group group, final DynamicMultiGroup dmg, final EntitySpec<TestEntity> childSpec, final TestEntity child1, final TestEntity child2) {
         // Start with both children in bucket A; there is no bucket B
         child1.setAttribute(SENSOR, "bucketA");