Repository: brooklyn-server Updated Branches: refs/heads/master 6f6763c30 -> fea8a6e6a
DynamicGroup filters entities in its app, not the management context Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/ebdadc3d Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/ebdadc3d Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/ebdadc3d Branch: refs/heads/master Commit: ebdadc3d806a1c83bfa595f038c8c8ec8c9dd524 Parents: b9dfdaa Author: Sam Corbett <sam.corb...@cloudsoftcorp.com> Authored: Wed Oct 5 12:16:27 2016 +0100 Committer: Sam Corbett <sam.corb...@cloudsoftcorp.com> Committed: Wed Oct 5 12:16:27 2016 +0100 ---------------------------------------------------------------------- .../apache/brooklyn/entity/group/DynamicGroupImpl.java | 3 ++- .../apache/brooklyn/entity/group/DynamicGroupTest.java | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ebdadc3d/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java index 7f56a03..b8789bb 100644 --- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java +++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java @@ -30,6 +30,7 @@ import org.apache.brooklyn.api.sensor.SensorEvent; import org.apache.brooklyn.api.sensor.SensorEventListener; import org.apache.brooklyn.core.BrooklynLogging; import org.apache.brooklyn.core.BrooklynLogging.LoggingLevel; +import org.apache.brooklyn.core.entity.Entities; import org.apache.brooklyn.core.mgmt.internal.CollectionChangeListener; import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal; import org.apache.brooklyn.util.core.task.Tasks; @@ -210,7 +211,7 @@ public class DynamicGroupImpl extends AbstractGroupImpl implements DynamicGroup Collection<Entity> currentMembers = getMembers(); Collection<Entity> toRemove = Sets.newLinkedHashSet(currentMembers); - for (Entity it : Iterables.filter(getManagementContext().getEntityManager().getEntities(), entityFilter())) { + for (Entity it : Iterables.filter(Entities.descendantsAndSelf(getApplication()), entityFilter())) { toRemove.remove(it); if (!currentMembers.contains(it)) { if (log.isDebugEnabled()) log.debug("{} rescan detected new item {}", this, it); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ebdadc3d/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java index eefe4a3..321335e 100644 --- a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java +++ b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java @@ -169,9 +169,9 @@ public class DynamicGroupTest { final AttributeSensor<String> MY_ATTRIBUTE = Sensors.newStringSensor("test.myAttribute", "My test attribute"); group.setEntityFilter(new Predicate<Entity>() { @Override public boolean apply(Entity input) { - if (!(input.getAttribute(MY_ATTRIBUTE) == "yes")) + if (!("yes".equals(input.getAttribute(MY_ATTRIBUTE)))) { return false; - if (input.equals(e1)) { + } else if (input.equals(e1)) { LOG.info("testGroupDetectsChangedEntitiesMatchingFilter scanned e1 when MY_ATTRIBUTE is yes; not a bug, but indicates things may be running slowly"); return false; } @@ -541,6 +541,15 @@ public class DynamicGroupTest { } } + @Test + public void testOnlyMatchesEntitiesInSameApplication() { + TestApplication app2 = TestApplication.Factory.newManagedInstanceForTests(app.getManagementContext()); + TestEntity irrelevant = app2.createAndManageChild(EntitySpec.create(TestEntity.class)); + group.setEntityFilter(Predicates.instanceOf(TestEntity.class)); + Collection<Entity> members = group.getMembers(); + assertFalse(members.contains(irrelevant), "collection should not contain " + irrelevant + ": " + members); + } + private <T> void assertContainsEventually(final Collection<? extends T> vals, final T val) { Asserts.succeedsEventually(new Runnable() { public void run() {