Adds ControlledDynamicWebAppCluster.CONTROLLED_GROUP
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/70dfb20d Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/70dfb20d Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/70dfb20d Branch: refs/heads/master Commit: 70dfb20d2c88f82061efca1b8e2bc9349ee170bb Parents: f2e3291 Author: Aled Sage <[email protected]> Authored: Mon May 25 22:25:30 2015 +0100 Committer: Aled Sage <[email protected]> Committed: Tue Aug 11 20:04:29 2015 +0100 ---------------------------------------------------------------------- .../webapp/ControlledDynamicWebAppCluster.java | 5 ++++ .../ControlledDynamicWebAppClusterImpl.java | 18 ++++++++++++++- .../ControlledDynamicWebAppClusterTest.java | 24 ++++++++++++++++++++ .../test/entity/TestJavaWebAppEntity.java | 3 ++- 4 files changed, 48 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/70dfb20d/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java index c747efe..7da9e11 100644 --- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java +++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java @@ -69,6 +69,10 @@ public interface ControlledDynamicWebAppCluster extends DynamicGroup, Entity, St public static BasicAttributeSensorAndConfigKey<LoadBalancer> CONTROLLER = new BasicAttributeSensorAndConfigKey<LoadBalancer>( LoadBalancer.class, "controlleddynamicwebappcluster.controller", "Controller for the cluster; if null a default will created (using controllerSpec)"); + @SetFromFlag("controlledGroup") + public static BasicAttributeSensorAndConfigKey<Group> CONTROLLED_GROUP = new BasicAttributeSensorAndConfigKey<Group>( + Group.class, "controlleddynamicwebappcluster.controlledgroup", "The group of web servers that the controller should point at; if null, will use the CLUSTER"); + @SuppressWarnings({ "unchecked", "rawtypes" }) @SetFromFlag("controllerSpec") public static BasicAttributeSensorAndConfigKey<EntitySpec<? extends LoadBalancer>> CONTROLLER_SPEC = new BasicAttributeSensorAndConfigKey( @@ -105,4 +109,5 @@ public interface ControlledDynamicWebAppCluster extends DynamicGroup, Entity, St public DynamicWebAppCluster getCluster(); + public Group getControlledGroup(); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/70dfb20d/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java index 9a4c212..d02d292 100644 --- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java +++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java @@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory; import brooklyn.enricher.Enrichers; import brooklyn.entity.Entity; +import brooklyn.entity.Group; import brooklyn.entity.basic.Attributes; import brooklyn.entity.basic.ConfigurableEntityFactory; import brooklyn.entity.basic.DynamicGroupImpl; @@ -83,6 +84,7 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme ConfigToAttributes.apply(this, CONTROLLER); ConfigToAttributes.apply(this, CONTROLLER_SPEC); ConfigToAttributes.apply(this, WEB_CLUSTER_SPEC); + ConfigToAttributes.apply(this, CONTROLLED_GROUP); ConfigurableEntityFactory<? extends WebAppService> webServerFactory = getAttribute(FACTORY); EntitySpec<? extends WebAppService> webServerSpec = getAttribute(MEMBER_SPEC); @@ -136,6 +138,15 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme setAttribute(CONTROLLER, controller); } + Group controlledGroup = getAttribute(CONTROLLED_GROUP); + if (controlledGroup == null) { + log.debug("using cluster as controlledGroup for {}", this); + controlledGroup = cluster; + setAttribute(CONTROLLED_GROUP, cluster); + } else { + log.debug("using custom controlledGroup {} for {}", controlledGroup, this); + } + doBind(); } @@ -183,6 +194,11 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme } @Override + public Group getControlledGroup() { + return getAttribute(CONTROLLED_GROUP); + } + + @Override public void start(Collection<? extends Location> locations) { ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING); @@ -195,7 +211,7 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme addLocations(locations); LoadBalancer loadBalancer = getController(); - loadBalancer.bind(MutableMap.of("serverPool", getCluster())); + loadBalancer.bind(MutableMap.of("serverPool", getControlledGroup())); List<Entity> childrenToStart = MutableList.<Entity>of(getCluster()); // Set controller as child of cluster, if it does not already have a parent http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/70dfb20d/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java index e98d094..d841f1b 100644 --- a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java +++ b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java @@ -30,6 +30,9 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import brooklyn.entity.BrooklynAppUnitTestSupport; +import brooklyn.entity.Group; +import brooklyn.entity.basic.Attributes; +import brooklyn.entity.basic.BasicGroup; import brooklyn.entity.basic.Entities; import brooklyn.entity.basic.Lifecycle; import brooklyn.entity.basic.SoftwareProcess; @@ -43,6 +46,7 @@ import brooklyn.test.Asserts; import brooklyn.test.entity.TestJavaWebAppEntity; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; public class ControlledDynamicWebAppClusterTest extends BrooklynAppUnitTestSupport { @@ -83,6 +87,26 @@ public class ControlledDynamicWebAppClusterTest extends BrooklynAppUnitTestSuppo } @Test + public void testUsesCustomControlledGroup() { + TestJavaWebAppEntity webServer = app.createAndManageChild(EntitySpec.create(TestJavaWebAppEntity.class)); + webServer.setAttribute(Attributes.SUBNET_HOSTNAME, "myhostname"); + webServer.setAttribute(Attributes.HTTP_PORT, 1234); + + TrackingAbstractController controller = app.createAndManageChild(EntitySpec.create(TrackingAbstractController.class)); + Group controlledGroup = app.createAndManageChild(EntitySpec.create(BasicGroup.class)); + controlledGroup.addMember(webServer); + + ControlledDynamicWebAppCluster cluster = app.createAndManageChild(EntitySpec.create(ControlledDynamicWebAppCluster.class) + .configure("initialSize", 0) + .configure(ControlledDynamicWebAppCluster.CONTROLLER, controller) + .configure(ControlledDynamicWebAppCluster.CONTROLLED_GROUP, controlledGroup) + .configure("memberSpec", EntitySpec.create(JBoss7Server.class).configure("war", getTestWar()))); + app.start(locs); + + assertEquals(controller.getUpdates(), ImmutableList.of(ImmutableSet.of("myhostname:1234"))); + } + + @Test public void testUsesCustomControllerSpec() { EntitySpec<TrackingAbstractController> controllerSpec = EntitySpec.create(TrackingAbstractController.class).displayName("mycustom"); ControlledDynamicWebAppCluster cluster = app.createAndManageChild(EntitySpec.create(ControlledDynamicWebAppCluster.class) http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/70dfb20d/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java b/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java index 3fa4015..a13ac9d 100644 --- a/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java +++ b/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java @@ -28,6 +28,7 @@ import brooklyn.entity.basic.Lifecycle; import brooklyn.entity.basic.ServiceStateLogic; import brooklyn.entity.basic.SoftwareProcess; import brooklyn.entity.basic.SoftwareProcessDriverLifecycleEffectorTasks; +import brooklyn.entity.basic.EntityLocal; import brooklyn.entity.java.VanillaJavaApp; import brooklyn.entity.proxying.ImplementedBy; import brooklyn.entity.webapp.WebAppService; @@ -38,7 +39,7 @@ import brooklyn.util.config.ConfigBag; * Mock web application server entity for testing. */ @ImplementedBy(TestJavaWebAppEntityImpl.class) -public interface TestJavaWebAppEntity extends VanillaJavaApp, WebAppService { +public interface TestJavaWebAppEntity extends VanillaJavaApp, WebAppService, EntityLocal { /** * Injects the test entity's customised lifecycle tasks.
