You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/01 18:46:31 UTC

[01/50] brooklyn-library git commit: Tidy up Cassandra fabric and cluster interfaces

Repository: brooklyn-library
Updated Branches:
  refs/heads/0.6.0 [created] 6acc62fa2


Tidy up Cassandra fabric and cluster interfaces


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

Branch: refs/heads/0.6.0
Commit: de2e685bd60c85bdfaf1d6bc7eac2f52e0c89bba
Parents: 06c8180
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Oct 24 15:40:35 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Thu Oct 24 15:46:53 2013 +0100

----------------------------------------------------------------------
 .../nosql/cassandra/CassandraCluster.java       | 101 +++++++++++--------
 .../entity/nosql/cassandra/CassandraFabric.java |  39 +++----
 2 files changed, 80 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/de2e685b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraCluster.java
index 9f87e80..ceb8c7c 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraCluster.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraCluster.java
@@ -3,7 +3,6 @@
  */
 package brooklyn.entity.nosql.cassandra;
 
-import java.util.Map;
 import java.util.Set;
 
 import brooklyn.catalog.Catalog;
@@ -22,14 +21,17 @@ import brooklyn.util.time.Duration;
 
 import com.google.common.base.Supplier;
 import com.google.common.collect.Multimap;
+import com.google.common.reflect.TypeToken;
 
 /**
  * A cluster of {@link CassandraNode}s based on {@link DynamicCluster} which can be resized by a policy if required.
  * <p>
- * Note that due to how Cassandra assumes ports are the same across a cluster, 
- * it is NOT possible to deploy a cluster to localhost.
+ * Note that due to how Cassandra assumes ports are the same across a cluster,
+ * it is <em>NOT</em> possible to deploy a cluster to localhost.
  */
-@Catalog(name="Apache Cassandra Database Cluster", description="Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store which provides a ColumnFamily-based data model richer than typical key/value systems", iconUrl="classpath:///cassandra-logo.jpeg")
+@Catalog(name="Apache Cassandra Database Cluster", description="Cassandra is a highly scalable, eventually " +
+        "consistent, distributed, structured key-value store which provides a ColumnFamily-based data model " +
+        "richer than typical key/value systems", iconUrl="classpath:///cassandra-logo.jpeg")
 @ImplementedBy(CassandraClusterImpl.class)
 public interface CassandraCluster extends DynamicCluster {
 
@@ -40,42 +42,48 @@ public interface CassandraCluster extends DynamicCluster {
     ConfigKey<String> ENDPOINT_SNITCH_NAME = ConfigKeys.newStringConfigKey("cassandra.cluster.snitchName", "Type of the Cassandra snitch", "SimpleSnitch");
 
     @SetFromFlag("seedSupplier")
-    ConfigKey<Supplier<Set<Entity>>> SEED_SUPPLIER = (ConfigKey) ConfigKeys.newConfigKey(Supplier.class, "cassandra.cluster.seedSupplier", "For determining the seed nodes", null);
+    @SuppressWarnings("serial")
+    ConfigKey<Supplier<Set<Entity>>> SEED_SUPPLIER = ConfigKeys.newConfigKey(new TypeToken<Supplier<Set<Entity>>>() { }, "cassandra.cluster.seedSupplier", "For determining the seed nodes", null);
 
-    /** Additional time after the nodes in the cluster are up when starting before announcing the cluster as up;
-     * Useful to ensure nodes have synchronized.  */
-    // on 1.2.2 this could be as much as 120s when using 2 seed nodes, 
-    // or just a few seconds with 1 seed node;
-    // on 1.2.9 it seems a few seconds is sufficient even with 2 seed nodes
+    /**
+     * Additional time after the nodes in the cluster are up when starting
+     * before announcing the cluster as up.
+     * <p>
+     * Useful to ensure nodes have synchronized.
+     * <p>
+     * On 1.2.2 this could be as much as 120s when using 2 seed nodes,
+     * or just a few seconds with 1 seed node. On 1.2.9 it seems a few
+     * seconds is sufficient even with 2 seed nodes
+     */
     @SetFromFlag("delayBeforeAdvertisingCluster")
     ConfigKey<Duration> DELAY_BEFORE_ADVERTISING_CLUSTER = ConfigKeys.newConfigKey(Duration.class, "cassandra.cluster.delayBeforeAdvertisingCluster", "Type of the Cassandra snitch", Duration.TEN_SECONDS);
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    AttributeSensor<Multimap<String,Entity>> DATACENTER_USAGE = (AttributeSensor)Sensors.newSensor(Map.class, "cassandra.cluster.datacenterUsages", "Current set of datacenters in use, with nodes in each");
+    @SuppressWarnings("serial")
+    AttributeSensor<Multimap<String,Entity>> DATACENTER_USAGE = Sensors.newSensor(new TypeToken<Multimap<String,Entity>>() { }, "cassandra.cluster.datacenterUsages", "Current set of datacenters in use, with nodes in each");
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    AttributeSensor<Set<String>> DATACENTERS = (AttributeSensor)Sensors.newSensor(Set.class, "cassandra.cluster.datacenters", "Current set of datacenters in use");
+    @SuppressWarnings("serial")
+    AttributeSensor<Set<String>> DATACENTERS = Sensors.newSensor(new TypeToken<Set<String>>() { }, "cassandra.cluster.datacenters", "Current set of datacenters in use");
 
     AttributeSensor<Boolean> HAS_PUBLISHED_SEEDS = Sensors.newBooleanSensor("cassandra.cluster.seeds.hasPublished", "Whether we have published any seeds");
-    
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    AttributeSensor<Set<Entity>> CURRENT_SEEDS = (AttributeSensor)Sensors.newSensor(Set.class, "cassandra.cluster.seeds.current", "Current set of seeds to use to bootstrap the cluster");
-    
+
+    @SuppressWarnings("serial")
+    AttributeSensor<Set<Entity>> CURRENT_SEEDS = Sensors.newSensor(new TypeToken<Set<Entity>>() { }, "cassandra.cluster.seeds.current", "Current set of seeds to use to bootstrap the cluster");
+
     AttributeSensor<String> HOSTNAME = Sensors.newStringSensor("cassandra.cluster.hostname", "Hostname to connect to cluster with");
 
     AttributeSensor<Integer> THRIFT_PORT = Sensors.newIntegerSensor("cassandra.cluster.thrift.port", "Cassandra Thrift RPC port to connect to cluster with");
-    
+
     AttributeSensor<Long> FIRST_NODE_STARTED_TIME_UTC = Sensors.newLongSensor("cassandra.cluster.first.node.started.utc", "Time (UTC) when the first node was started");
-    
-    AttributeSensor<Integer> SCHEMA_VERSION_COUNT = Sensors.newIntegerSensor("cassandra.cluster.schema.versions.count", 
+
+    AttributeSensor<Integer> SCHEMA_VERSION_COUNT = Sensors.newIntegerSensor("cassandra.cluster.schema.versions.count",
             "Number of different schema versions in the cluster; should be 1 for a healthy cluster, 0 when off; " +
-            ">=2 indicats a Schema Disagreement Error (and keyspace access may fail)");
+            "2 and above indicats a Schema Disagreement Error (and keyspace access may fail)");
 
     AttributeSensor<Long> READ_PENDING = Sensors.newLongSensor("cassandra.cluster.read.pending", "Current pending ReadStage tasks");
     AttributeSensor<Integer> READ_ACTIVE = Sensors.newIntegerSensor("cassandra.cluster.read.active", "Current active ReadStage tasks");
     AttributeSensor<Long> WRITE_PENDING = Sensors.newLongSensor("cassandra.cluster.write.pending", "Current pending MutationStage tasks");
     AttributeSensor<Integer> WRITE_ACTIVE = Sensors.newIntegerSensor("cassandra.cluster.write.active", "Current active MutationStage tasks");
-    
+
     AttributeSensor<Long> THRIFT_PORT_LATENCY_PER_NODE = Sensors.newLongSensor("cassandra.cluster.thrift.latency.perNode", "Latency for thrift port connection  averaged over all nodes (ms)");
     AttributeSensor<Double> READS_PER_SECOND_LAST_PER_NODE = Sensors.newDoubleSensor("cassandra.reads.perSec.last.perNode", "Reads/sec (last datapoint) averaged over all nodes");
     AttributeSensor<Double> WRITES_PER_SECOND_LAST_PER_NODE = Sensors.newDoubleSensor("cassandra.write.perSec.last.perNode", "Writes/sec (last datapoint) averaged over all nodes");
@@ -88,32 +96,41 @@ public interface CassandraCluster extends DynamicCluster {
 
     MethodEffector<Void> UPDATE = new MethodEffector<Void>(CassandraCluster.class, "update");
 
-    /** sets the number of nodes used to seed the cluster;
-     *  v1.2.2 is buggy and requires a big delay for 2 nodes both seeds to reconcile, 
-     *  see http://stackoverflow.com/questions/6770894/schemadisagreementexception/18639005
-     *  and posts to cassandra mailing list. (Alex, 9 Sept 2013)
-     *  <p>
-     *  with v1.2.9 this seems fine, with just a few seconds' delay after starting */
-    public static final int DEFAULT_SEED_QUORUM = 2;
-    
-    /** can insert a delay after the first node comes up;
-     * is not needed with 1.2.9 (and does not help with the bug in 1.2.2) */
-    public static final Duration DELAY_AFTER_FIRST = Duration.ZERO;
-    
-    /** whether to wait for the first node to start up */
-    // not sure whether this is needed or not; need to test in env where not all nodes are seed nodes,
-    // what happens if non-seed nodes start before the seed nodes ?
-    public static final boolean WAIT_FOR_FIRST = true;
-    
+    /**
+     * Sets the number of nodes used to seed the cluster.
+     * <p>
+     * Version 1.2.2 is buggy and requires a big delay for 2 nodes both seeds to reconcile,
+     * with 1.2.9 this seems fine, with just a few seconds' delay after starting.
+     *
+     * @see <a href="http://stackoverflow.com/questions/6770894/schemadisagreementexception/18639005" />
+     */
+    int DEFAULT_SEED_QUORUM = 2;
+
+    /**
+     * Can insert a delay after the first node comes up.
+     * <p>
+     * Not needed with 1.2.9 (and does not help with the bug in 1.2.2)
+     */
+    Duration DELAY_AFTER_FIRST = Duration.ZERO;
+
+    /**
+     * Whether to wait for the first node to start up
+     * <p>
+     * not sure whether this is needed or not. Need to test in env where not all nodes are seed nodes,
+     * what happens if non-seed nodes start before the seed nodes?
+     */
+    boolean WAIT_FOR_FIRST = true;
+
     @Effector(description="Updates the cluster members")
     void update();
-    
+
     /**
      * The name of the cluster.
      */
     String getClusterName();
 
     Set<Entity> gatherPotentialSeeds();
-    
+
     Set<Entity> gatherPotentialRunningSeeds();
+
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/de2e685b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraFabric.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraFabric.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraFabric.java
index 635caa5..35fb4d5 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraFabric.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraFabric.java
@@ -3,49 +3,52 @@
  */
 package brooklyn.entity.nosql.cassandra;
 
-import java.util.Map;
 import java.util.Set;
 
 import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
+import brooklyn.entity.annotation.Effector;
 import brooklyn.entity.basic.ConfigKeys;
+import brooklyn.entity.basic.MethodEffector;
 import brooklyn.entity.group.DynamicFabric;
 import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.event.AttributeSensor;
-import brooklyn.event.basic.Sensors;
 
 import com.google.common.collect.Multimap;
 
 /**
  * A fabric of {@link CassandraNode}s, which forms a cluster spanning multiple locations.
- * 
- * Each "CassandraCluster" child instance is actually just a part of the whole cluster. It consists of the
+ * <p>
+ * Each {@link CassandraCluster} child instance is actually just a part of the whole cluster. It consists of the
  * nodes in that single location (which normally corresponds to a "datacenter" in Cassandra terminology).
  */
-@Catalog(name="Apache Cassandra Database Fabric", description="Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store which provides a ColumnFamily-based data model richer than typical key/value systems", iconUrl="classpath:///cassandra-logo.jpeg")
+@Catalog(name="Apache Cassandra Database Fabric", description="Cassandra is a highly scalable, eventually " +
+        "consistent, distributed, structured key-value store which provides a ColumnFamily-based data model " +
+        "richer than typical key/value systems", iconUrl="classpath:///cassandra-logo.jpeg")
 @ImplementedBy(CassandraFabricImpl.class)
 public interface CassandraFabric extends DynamicFabric {
-    
+
     ConfigKey<Integer> INITIAL_QUORUM_SIZE = ConfigKeys.newIntegerConfigKey(
             "fabric.initial.quorumSize",
-            "Initial fabric quorum size - number of initial nodes that must have been successfully started to report success (if < 0, then use value of INITIAL_SIZE)", 
+            "Initial fabric quorum size - number of initial nodes that must have been successfully started " +
+            "to report success (if less than 0, then use value of INITIAL_SIZE)",
             -1);
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    AttributeSensor<Multimap<String,Entity>> DATACENTER_USAGE = (AttributeSensor)Sensors.newSensor(Map.class, "cassandra.cluster.datacenters", "Current set of datacenters in use, with nodes in each");
+    AttributeSensor<Multimap<String,Entity>> DATACENTER_USAGE = CassandraCluster.DATACENTER_USAGE;
+
+    AttributeSensor<Set<String>> DATACENTERS = CassandraCluster.DATACENTERS;
+
+    AttributeSensor<Set<Entity>> CURRENT_SEEDS = CassandraCluster.CURRENT_SEEDS;
+
+    AttributeSensor<Boolean> HAS_PUBLISHED_SEEDS = CassandraCluster.HAS_PUBLISHED_SEEDS;
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    AttributeSensor<Set<String>> DATACENTERS = (AttributeSensor)Sensors.newSensor(Set.class, "cassandra.cluster.datacenters", "Current set of datacenters in use");
+    AttributeSensor<String> HOSTNAME = CassandraCluster.HOSTNAME;
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    AttributeSensor<Set<Entity>> CURRENT_SEEDS = (AttributeSensor)Sensors.newSensor(Set.class, "cassandra.cluster.seeds.current", "Current set of seeds to use to bootstrap the cluster");
-    
-    AttributeSensor<Boolean> HAS_PUBLISHED_SEEDS = Sensors.newBooleanSensor("cassandra.cluster.seeds.hasPublished", "Whether we have published any seeds");
-    
-    AttributeSensor<String> HOSTNAME = Sensors.newStringSensor("cassandra.cluster.hostname", "Hostname to connect to cluster with");
+    AttributeSensor<Integer> THRIFT_PORT = CassandraCluster.THRIFT_PORT;
 
-    AttributeSensor<Integer> THRIFT_PORT = Sensors.newIntegerSensor("cassandra.cluster.thrift.port", "Cassandra Thrift RPC port to connect to cluster with");
+    MethodEffector<Void> UPDATE = new MethodEffector<Void>(CassandraFabric.class, "update");
 
+    @Effector(description="Updates the cluster members")
     void update();
 }


[12/50] brooklyn-library git commit: Update WideAreaCassandraCluster.java

Posted by he...@apache.org.
Update WideAreaCassandraCluster.java

Add initialSize as catalog options.


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

Branch: refs/heads/0.6.0
Commit: 3db36f1716834542e9ce8e01278e73b373fb0dde
Parents: 569dcc5
Author: David Toy <d...@vidtoy.co.uk>
Authored: Fri Nov 1 10:33:41 2013 +0000
Committer: David Toy <d...@vidtoy.co.uk>
Committed: Fri Nov 1 10:33:41 2013 +0000

----------------------------------------------------------------------
 .../java/brooklyn/demo/WideAreaCassandraCluster.java | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3db36f17/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/WideAreaCassandraCluster.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/WideAreaCassandraCluster.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/WideAreaCassandraCluster.java
index b27a0ea..02a9451 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/WideAreaCassandraCluster.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/WideAreaCassandraCluster.java
@@ -18,6 +18,10 @@ package brooklyn.demo;
 import java.util.Arrays;
 import java.util.List;
 
+import brooklyn.catalog.Catalog;
+import brooklyn.catalog.CatalogConfig;
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.AbstractApplication;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.StartableApplication;
@@ -34,15 +38,22 @@ import brooklyn.util.CommandLineUtil;
 
 import com.google.common.collect.Lists;
 
+@Catalog(name="Wide Area Cassandra Cluster Application", description="Deploy a Cassandra cluster across multiple geographies.")
 public class WideAreaCassandraCluster extends AbstractApplication {
 
     public static final String DEFAULT_LOCATION_SPEC = "aws-ec2:us-east-1,rackspace-cloudservers-uk";
-
+	
+	@CatalogConfig(label="Initial Cluster Size (per location)", priority=2)
+    public static final ConfigKey<Integer> CASSANDRA_CLUSTER_SIZE = ConfigKeys.newConfigKey(
+        "cassandra.cluster.initialSize", "Initial size of the Cassandra clusterss", 2);      
+    
+    
+	
     @Override
     public void init() {
         addChild(EntitySpec.create(CassandraFabric.class)
                 .configure(CassandraCluster.CLUSTER_NAME, "Brooklyn")
-                .configure(CassandraCluster.INITIAL_SIZE, 2) // per location
+                .configure(CassandraCluster.INITIAL_SIZE, getConfig(CASSANDRA_CLUSTER_SIZE)) // per location
                 .configure(CassandraCluster.ENDPOINT_SNITCH_NAME, "brooklyn.entity.nosql.cassandra.customsnitch.MultiCloudSnitch")
                 .configure(CassandraNode.CUSTOM_SNITCH_JAR_URL, "classpath://brooklyn/entity/nosql/cassandra/cassandra-multicloud-snitch.jar")
                 .configure(CassandraFabric.MEMBER_SPEC, EntitySpec.create(CassandraCluster.class)


[13/50] brooklyn-library git commit: Added whirr-elasticsearch dependency to hadoop-and-whirr example pom and test dependency to whirr/base/pom

Posted by he...@apache.org.
Added whirr-elasticsearch dependency to hadoop-and-whirr example pom and test dependency to whirr/base/pom


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

Branch: refs/heads/0.6.0
Commit: 04811eb37418a5bb9bd4e704fd9e731e351408ae
Parents: e613ed8
Author: Martin Harris <gi...@nakomis.com>
Authored: Fri Nov 1 15:56:13 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Fri Nov 1 15:56:13 2013 +0000

----------------------------------------------------------------------
 examples/hadoop-and-whirr/pom.xml | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/04811eb3/examples/hadoop-and-whirr/pom.xml
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/pom.xml b/examples/hadoop-and-whirr/pom.xml
index 7550c9b..0d041c9 100644
--- a/examples/hadoop-and-whirr/pom.xml
+++ b/examples/hadoop-and-whirr/pom.xml
@@ -19,6 +19,11 @@
             <version>${project.version}</version>
             <classifier>with-dependencies</classifier>
         </dependency>
+        <dependency>
+            <groupId>org.apache.whirr</groupId>
+            <artifactId>whirr-elasticsearch</artifactId>
+            <version>${whirr.version}</version>
+        </dependency>
     </dependencies>
 
     <build>


[28/50] brooklyn-library git commit: track if SERVICE_UP previously up, so only execute setupMachine when transitions from false->true. Added comments to areas with issues

Posted by he...@apache.org.
track if SERVICE_UP previously up, so only execute setupMachine when transitions from false->true. Added comments to areas with issues


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

Branch: refs/heads/0.6.0
Commit: d59ad20d8a36467f344977dac41869e74c2144f0
Parents: 256a70f
Author: Martin Harris <gi...@nakomis.com>
Authored: Mon Nov 11 17:04:49 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Mon Nov 11 17:22:55 2013 +0000

----------------------------------------------------------------------
 .../extras/whirr/WebFabricWithHadoopExample.java      | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/d59ad20d/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebFabricWithHadoopExample.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebFabricWithHadoopExample.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebFabricWithHadoopExample.java
index 68b1eb1..2c43185 100644
--- a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebFabricWithHadoopExample.java
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebFabricWithHadoopExample.java
@@ -9,6 +9,7 @@ import java.net.URI;
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.whirr.service.hadoop.HadoopCluster;
 import org.slf4j.Logger;
@@ -166,10 +167,14 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
         }
         
         public void start() {
-            subscribeToMembers((Group)entity, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
+        	subscribeToMembers((Group)entity, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
+                // track if previously up, so only execute when transitions from false->true
+                private final AtomicBoolean up = new AtomicBoolean();
+                
                 @Override public void onEvent(SensorEvent<Boolean> event) {
                     log.debug("hadoop set up policy recieved {}", event);
-                    if (event.getValue() != null) {
+                    if (Boolean.TRUE.equals(event.getValue()) && !up.get()) {
+                        up.set(true);
                         setupMachine(event.getSource());
                     }
                 }});
@@ -197,6 +202,7 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
                 String user = hadoopCluster.getClusterSpec().getClusterUser();
                 InetAddress namenode = HadoopCluster.getNamenodePublicAddress(hadoopCluster.getCluster());
                 String server = namenode.getHostName();
+                // TODO: the `ssh -D` command keeps failing because of incorrect ssh key. Tested in "aws-ec2:us-west-2", AMI ubuntu-saucy-13.10-i386-server-20131015 (ami-aae67f9a)
                 String proxyCommand = Joiner.on(" ").join(ImmutableList.of(
                         "ssh",
                         "-i", "/tmp/hadoop-proxy-private-key",
@@ -211,6 +217,7 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
                 if (log.isDebugEnabled()) log.debug("http config update for {}, proxy command: {}", e, proxyCommand);
 
                 String hadoopProxyForeverContent = 
+            		 "#!/bin/bash"+"\n"+ 
                         "while [ true ] ; do"+"\n"+ 
                         "    date"+"\n"+
                         "    echo starting proxy for hadoop to "+String.format("%s@%s", user, server)+"\n"+
@@ -220,7 +227,8 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
                 
                 ssh.copyTo(new StringReader(hadoopProxyForeverContent), "/tmp/hadoop-proxy-forever.sh");
                   
-                ssh.execCommands("chmod", ImmutableList.of("chmod 600 /tmp/hadoop-proxy-private-key ; chmod +x /tmp/hadoop-proxy-forever.sh ; nohup /tmp/hadoop-proxy-forever.sh &"));
+                //  TODO: the `nohup hadoop-proxy-forever.sh &`  script is not returning. Tested in "aws-ec2:us-west-2", AMI ubuntu-saucy-13.10-i386-server-20131015 (ami-aae67f9a)
+                ssh.execCommands("chmod", ImmutableList.of("chmod 600 /tmp/hadoop-proxy-private-key", "chmod +x /tmp/hadoop-proxy-forever.sh", "nohup /tmp/hadoop-proxy-forever.sh < /dev/null &"));
 
                 URI updateConfigUri = new URI(e.getAttribute(JBoss7Server.ROOT_URL)+
                         "configure.jsp?key=brooklyn.example.hadoop.site.xml.url&value=file:///tmp/hadoop-site.xml");


[29/50] brooklyn-library git commit: Merge pull request #1007 from Nakomis/web-fabric-hadoop-issues

Posted by he...@apache.org.
Merge pull request #1007 from Nakomis/web-fabric-hadoop-issues

track if SERVICE_UP previously up, so only execute setupMachine when...

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

Branch: refs/heads/0.6.0
Commit: 74d9160a9975e3fc5f10fab73aef58f18f1bc73d
Parents: 195cb9d d59ad20
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 11 09:28:28 2013 -0800
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 11 09:28:28 2013 -0800

----------------------------------------------------------------------
 .../extras/whirr/WebFabricWithHadoopExample.java      | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)
----------------------------------------------------------------------



[49/50] brooklyn-library git commit: Merge pull request #1030 from Nakomis/postgresql-disconnect-on-stop

Posted by he...@apache.org.
Merge pull request #1030 from Nakomis/postgresql-disconnect-on-stop

Removed .failOnNonZeroResultCode(), following review from ahgittin

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

Branch: refs/heads/0.6.0
Commit: f23f395b043607909f12dff57ae7d1ed708948f4
Parents: d107292 f537031
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 12:47:52 2013 -0800
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 12:47:52 2013 -0800

----------------------------------------------------------------------
 .../brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------



[27/50] brooklyn-library git commit: Don't rely on sketchy `OsDetails.isLinux()` method.

Posted by he...@apache.org.
Don't rely on sketchy `OsDetails.isLinux()` method.

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

Branch: refs/heads/0.6.0
Commit: 195cb9d211cbc8be1b37c9b8715bc30117efe314
Parents: 256a70f
Author: Alasdair Hodge <al...@cloudsoftcorp.com>
Authored: Mon Nov 11 15:33:38 2013 +0000
Committer: Alasdair Hodge <al...@cloudsoftcorp.com>
Committed: Mon Nov 11 15:33:38 2013 +0000

----------------------------------------------------------------------
 .../entity/database/mariadb/MariaDbSshDriver.java     | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/195cb9d2/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
index 5c85903..327bda2 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
+++ b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
@@ -45,16 +45,22 @@ public class MariaDbSshDriver extends AbstractSoftwareProcessSshDriver implement
 
     public String getOsTag() {
         OsDetails os = getLocation().getOsDetails();
+        // NOTE: cannot rely on OsDetails.isLinux() to return true for all linux flavours, so
+        // explicitly test for unsupported OSes, otherwise assume generic linux.
         if (os == null) return "linux-i686";
-        if (os.isLinux()) return "linux-" + (os.is64bit() ? "x86_64" : "i686");
-        throw new UnsupportedOperationException("only support linux versions just now");
+        if (os.isWindows() || os.isMac())
+            throw new UnsupportedOperationException("only support linux versions just now; OS details: " + os);
+        return "linux-" + (os.is64bit() ? "x86_64" : "i686");
     }
 
     public String getDownloadParentDir() {
+        // NOTE: cannot rely on OsDetails.isLinux() to return true for all linux flavours, so
+        // explicitly test for unsupported OSes, otherwise assume generic linux.
         OsDetails os = getLocation().getOsDetails();
         if (os == null) return "kvm-bintar-hardy-x86";
-        if (os.isLinux()) return "kvm-bintar-hardy-" + (os.is64bit() ? "amd64" : "x86");
-        throw new UnsupportedOperationException("only support linux versions just now");
+        if (os.isWindows() || os.isMac())
+            throw new UnsupportedOperationException("only support linux versions just now; OS details: " + os);
+        return "kvm-bintar-hardy-" + (os.is64bit() ? "amd64" : "x86");
     }
 
     public String getMirrorUrl() {


[11/50] brooklyn-library git commit: Update HighAvailabilityCassandraCluster.java

Posted by he...@apache.org.
Update HighAvailabilityCassandraCluster.java

Add numAvailabilityZones and initialSize as catalog options.


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

Branch: refs/heads/0.6.0
Commit: 569dcc5716c5685183e6a27857c62908829753c3
Parents: 25b37b3
Author: David Toy <d...@vidtoy.co.uk>
Authored: Fri Nov 1 10:33:13 2013 +0000
Committer: David Toy <d...@vidtoy.co.uk>
Committed: Fri Nov 1 10:33:13 2013 +0000

----------------------------------------------------------------------
 .../demo/HighAvailabilityCassandraCluster.java    | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/569dcc57/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/HighAvailabilityCassandraCluster.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/HighAvailabilityCassandraCluster.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/HighAvailabilityCassandraCluster.java
index 73d6e2c..cdb4926 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/HighAvailabilityCassandraCluster.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/HighAvailabilityCassandraCluster.java
@@ -17,6 +17,10 @@ package brooklyn.demo;
 
 import java.util.List;
 
+import brooklyn.catalog.Catalog;
+import brooklyn.catalog.CatalogConfig;
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.AbstractApplication;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.StartableApplication;
@@ -32,17 +36,27 @@ import brooklyn.util.CommandLineUtil;
 
 import com.google.common.collect.Lists;
 
+@Catalog(name="HA Cassandra Cluster Application", description="Deploy a Cassandra cluster with a High Availability architecture.")
 public class HighAvailabilityCassandraCluster extends AbstractApplication {
 
     public static final String DEFAULT_LOCATION_SPEC = "aws-ec2:us-east-1";
+ 
+    @CatalogConfig(label="Number of Availability Zones", priority=1)
+    public static final ConfigKey<Integer> NUM_AVAILABILITY_ZONES = ConfigKeys.newConfigKey(
+        "cassandra.cluster.numAvailabilityZones", "Number of availability zones to spread the cluster across", 3); 
+    
+    @CatalogConfig(label="Initial Cluster Size", priority=2)
+    public static final ConfigKey<Integer> CASSANDRA_CLUSTER_SIZE = ConfigKeys.newConfigKey(
+        "cassandra.cluster.initialSize", "Initial size of the Cassandra cluster", 6);      
+    
     
     @Override
     public void init() {
         addChild(EntitySpec.create(CassandraCluster.class)
                 .configure(CassandraCluster.CLUSTER_NAME, "Brooklyn")
-                .configure(CassandraCluster.INITIAL_SIZE, 6)
+                .configure(CassandraCluster.INITIAL_SIZE, getConfig(CASSANDRA_CLUSTER_SIZE))
                 .configure(CassandraCluster.ENABLE_AVAILABILITY_ZONES, true)
-                .configure(CassandraCluster.NUM_AVAILABILITY_ZONES, 3)
+                .configure(CassandraCluster.NUM_AVAILABILITY_ZONES, getConfig(NUM_AVAILABILITY_ZONES))
                 //See https://github.com/brooklyncentral/brooklyn/issues/973
                 //.configure(CassandraCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("us-east-1b", "us-east-1c", "us-east-1e"))
                 .configure(CassandraCluster.ENDPOINT_SNITCH_NAME, "GossipingPropertyFileSnitch")


[15/50] brooklyn-library git commit: Added message to the example message subscriber to clarify why it run, then quit

Posted by he...@apache.org.
Added message to the example message subscriber to clarify why it run, then quit


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

Branch: refs/heads/0.6.0
Commit: f7cdb81eebbcd36ffeee9ca028015e553da96a7e
Parents: eaf79d6
Author: Martin Harris <gi...@nakomis.com>
Authored: Fri Nov 1 16:49:08 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Fri Nov 1 16:49:08 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/Subscribe.java              | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/f7cdb81e/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
index 51ce0c7..877efcf 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
@@ -15,7 +15,9 @@ import com.google.common.base.Throwables;
 /** Receives messages from a queue on a Qpid broker at a given URL. */
 public class Subscribe {
     public static final String QUEUE = "'amq.direct'/'testQueue'; { node: { type: queue } }";
-
+    private static final long MESSAGE_TIMEOUT_MILLIS = 15000L;
+    private static final int MESSAGE_COUNT = 100;
+    
     public static void main(String...argv) throws Exception {
         Preconditions.checkElementIndex(0, argv.length, "Must specify broker URL");
         String url = argv[0];
@@ -30,15 +32,16 @@ public class Subscribe {
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
+        System.out.printf("Waiting up to %s milliseconds to receive %s messages\n", MESSAGE_TIMEOUT_MILLIS, MESSAGE_COUNT);
         try {
             // Create a producer for the queue
             Queue destination = session.createQueue(QUEUE);
             MessageConsumer messageConsumer = session.createConsumer(destination);
 
             // Try and receive 100 messages
-            int n = 100;
+            int n = MESSAGE_COUNT;
             do {
-                TextMessage msg = (TextMessage) messageConsumer.receive(15000L);
+                TextMessage msg = (TextMessage) messageConsumer.receive(MESSAGE_TIMEOUT_MILLIS);
                 if (msg == null) break;
                 System.out.printf("Got message: '%s'\n", msg.getText());
             } while (n --> 0);


[34/50] brooklyn-library git commit: Use Entities.destroyAllCatching in tearDown of live tests

Posted by he...@apache.org.
Use Entities.destroyAllCatching in tearDown of live tests


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

Branch: refs/heads/0.6.0
Commit: f02be6a0a61b38a89670a001e836c767661d07fc
Parents: ce69ed1
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Nov 14 13:26:56 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Thu Nov 14 13:26:56 2013 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/f02be6a0/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
index c5dcd6a..73d4ffb 100644
--- a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
+++ b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
@@ -51,14 +51,12 @@ public class BindDnsServerLiveTest {
 
     @AfterMethod(alwaysRun = true)
     public void shutdown() throws Exception {
-        Entities.destroyAll(app.getManagementContext());
-        // Thread.sleep(TimeUnit.MINUTES.toMillis(30));
+        if (app != null) Entities.destroyAllCatching(app.getManagementContext());
     }
 
     @DataProvider(name = "virtualMachineData")
     public Object[][] provideVirtualMachineData() {
         return new Object[][] { // ImageId, Provider, Region
-            new Object[] { "", "named:cloudera" },
             new Object[] { "eu-west-1/ami-029f9476", "aws-ec2:eu-west-1" },
         };
     }


[32/50] brooklyn-library git commit: Remove assertions for non-existant sensors in Tomcat live test

Posted by he...@apache.org.
Remove assertions for non-existant sensors in Tomcat live test


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

Branch: refs/heads/0.6.0
Commit: 45cd80521a1cad2737936fc7ad60f64611e8f382
Parents: 87a2466
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Nov 13 16:17:27 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Nov 13 16:17:27 2013 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java    | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/45cd8052/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
index d496402..e6b7259 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
@@ -39,9 +39,6 @@ public class TomcatServerEc2LiveTest extends AbstractEc2LiveTest {
                 assertNotNull(server.getAttribute(TomcatServer.REQUEST_COUNT));
                 assertNotNull(server.getAttribute(TomcatServer.ERROR_COUNT));
                 assertNotNull(server.getAttribute(TomcatServer.TOTAL_PROCESSING_TIME));
-                assertNotNull(server.getAttribute(TomcatServer.MAX_PROCESSING_TIME));
-                assertNotNull(server.getAttribute(TomcatServer.BYTES_RECEIVED));
-                assertNotNull(server.getAttribute(TomcatServer.BYTES_SENT));
             }});
     }
     


[37/50] brooklyn-library git commit: a handy yaml launcher

Posted by he...@apache.org.
a handy yaml launcher


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

Branch: refs/heads/0.6.0
Commit: 30f87cce88349d1b8b46e3a00c27b0077893f994
Parents: f5c6402
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Oct 31 19:49:12 2013 -0700
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Nov 14 21:21:26 2013 +0000

----------------------------------------------------------------------
 sandbox/camp/pom.xml                            |  7 ++
 .../BrooklynAssemblyTemplateInstantiator.java   |  3 +-
 .../io/brooklyn/camp/brooklyn/YamlLauncher.java | 84 ++++++++++++++++++++
 sandbox/camp/src/test/resources/playing.yaml    |  3 +
 4 files changed, 96 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/30f87cce/sandbox/camp/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/camp/pom.xml b/sandbox/camp/pom.xml
index 63add68..b095f15 100644
--- a/sandbox/camp/pom.xml
+++ b/sandbox/camp/pom.xml
@@ -56,6 +56,13 @@
             <artifactId>brooklyn-example-simple-web-cluster</artifactId>
             <version>${brooklyn.version}</version>
         </dependency>
+        <dependency>
+            <groupId>io.cloudsoft.memsql</groupId>
+            <artifactId>brooklyn-memsql</artifactId>
+            <version>0.1.0-SNAPSHOT</version>
+            <optional>true</optional>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/30f87cce/sandbox/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
----------------------------------------------------------------------
diff --git a/sandbox/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java b/sandbox/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
index 341a002..01b9c65 100644
--- a/sandbox/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
+++ b/sandbox/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
@@ -48,6 +48,7 @@ import com.google.common.collect.Maps;
 
 public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateInstantiator {
 
+    public static String TARGET_LOCATION = "localhost";
     private static final Logger log = LoggerFactory.getLogger(BrooklynAssemblyTemplateInstantiator.class);
     
     @Override
@@ -167,7 +168,7 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateIns
 
         // TODO support other places besides localhost
         List<Location> locations = 
-                getBrooklynManagementContext(platform).getLocationRegistry().resolve(Arrays.asList("localhost"));
+                getBrooklynManagementContext(platform).getLocationRegistry().resolve(Arrays.asList(TARGET_LOCATION));
         
         return Entities.invokeEffector((EntityLocal)app, app, Startable.START,
                 MutableMap.of("locations", locations));

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/30f87cce/sandbox/camp/src/test/java/io/brooklyn/camp/brooklyn/YamlLauncher.java
----------------------------------------------------------------------
diff --git a/sandbox/camp/src/test/java/io/brooklyn/camp/brooklyn/YamlLauncher.java b/sandbox/camp/src/test/java/io/brooklyn/camp/brooklyn/YamlLauncher.java
new file mode 100644
index 0000000..260596f
--- /dev/null
+++ b/sandbox/camp/src/test/java/io/brooklyn/camp/brooklyn/YamlLauncher.java
@@ -0,0 +1,84 @@
+package io.brooklyn.camp.brooklyn;
+
+import io.brooklyn.camp.CampServer;
+import io.brooklyn.camp.brooklyn.spi.creation.BrooklynAssemblyTemplateInstantiator;
+import io.brooklyn.camp.brooklyn.spi.lookup.BrooklynUrlLookup;
+import io.brooklyn.camp.spi.Assembly;
+import io.brooklyn.camp.spi.AssemblyTemplate;
+import io.brooklyn.camp.spi.PlatformRootSummary;
+
+import java.io.Reader;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.config.BrooklynProperties;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.BrooklynTasks;
+import brooklyn.entity.basic.Entities;
+import brooklyn.launcher.BrooklynLauncher;
+import brooklyn.management.ManagementContext;
+import brooklyn.management.Task;
+import brooklyn.util.ResourceUtils;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.stream.Streams;
+
+public class YamlLauncher {
+
+    private static final Logger log = LoggerFactory.getLogger(YamlLauncher.class);
+    
+    private ManagementContext brooklynMgmt;
+    private BrooklynCampPlatform platform;
+
+    public void launchPlatform() {
+        BrooklynLauncher launcher = BrooklynLauncher.newInstance()
+              .start();
+        ((BrooklynProperties)launcher.getServerDetails().getManagementContext().getConfig()).
+          put(BrooklynUrlLookup.BROOKLYN_ROOT_URL, launcher.getServerDetails().getWebServerUrl());
+        brooklynMgmt = launcher.getServerDetails().getManagementContext();
+      
+        platform = new BrooklynCampPlatform(
+              PlatformRootSummary.builder().name("Brooklyn CAMP Platform").build(),
+              brooklynMgmt);
+        
+        new CampServer(platform, "").start();
+    }
+    
+    public void launchAppYaml(String filename) {
+        try {
+            Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl(filename));
+            AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);
+
+            Assembly assembly = at.getInstantiator().newInstance().instantiate(at, platform);
+            Entity app = brooklynMgmt.getEntityManager().getEntity(assembly.getId());
+            log.info("Launching "+app);
+
+            Set<Task<?>> tasks = BrooklynTasks.getTasksInEntityContext(brooklynMgmt.getExecutionManager(), app);
+            log.info("Waiting on "+tasks.size()+" task(s)");
+            for (Task<?> t: tasks) t.blockUntilEnded();
+
+            log.info("App started:");
+            Entities.dumpInfo(app);
+        } catch (Exception e) {
+            throw Exceptions.propagate(e);
+        }
+    }
+
+    public static void main(String[] args) {
+        BrooklynAssemblyTemplateInstantiator.TARGET_LOCATION =
+            "localhost"
+            //"named:hpcloud-compute-us-west-az1"
+            //"aws-ec2:us-west-2"
+            ;
+        
+        YamlLauncher l = new YamlLauncher();
+        l.launchPlatform();
+        
+//        l.launchAppYaml("java-web-app-and-db-with-function.yaml");
+//        l.launchAppYaml("java-web-app-and-memsql.yaml");
+//        l.launchAppYaml("memsql.yaml");
+        l.launchAppYaml("playing.yaml");
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/30f87cce/sandbox/camp/src/test/resources/playing.yaml
----------------------------------------------------------------------
diff --git a/sandbox/camp/src/test/resources/playing.yaml b/sandbox/camp/src/test/resources/playing.yaml
new file mode 100644
index 0000000..a47f7a0
--- /dev/null
+++ b/sandbox/camp/src/test/resources/playing.yaml
@@ -0,0 +1,3 @@
+name: cassandra node
+services:
+- type: brooklyn.entity.nosql.cassandra.CassandraNode


[10/50] brooklyn-library git commit: Merge pull request #987 from ahgittin/misc

Posted by he...@apache.org.
Merge pull request #987 from ahgittin/misc

minor tidies for 0.6.0-rc's

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

Branch: refs/heads/0.6.0
Commit: d5cf04a8341d1c351bd1fbc27f1ce4c4c5375041
Parents: 37d02f2 b67043f
Author: ahgittin <al...@cloudsoftcorp.com>
Authored: Thu Oct 31 20:39:41 2013 -0700
Committer: ahgittin <al...@cloudsoftcorp.com>
Committed: Thu Oct 31 20:39:41 2013 -0700

----------------------------------------------------------------------
 .../src/main/resources/visitors-creation-script.sql       | 10 ++++++++--
 .../camp/src/test/resources/visitors-creation-script.sql  | 10 ++++++++--
 .../brooklyn/entity/database/mysql/MySqlNodeImpl.java     |  2 --
 3 files changed, 16 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[14/50] brooklyn-library git commit: Added call to super.connectSensors() in QpidBrokerImpl (its ommission meant the BROKER_URL sensor was never set)

Posted by he...@apache.org.
Added call to super.connectSensors() in QpidBrokerImpl (its ommission meant the BROKER_URL sensor was never set)


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

Branch: refs/heads/0.6.0
Commit: eaf79d6b41a69b562fea502a2ed20c154304d47d
Parents: e613ed8
Author: Martin Harris <gi...@nakomis.com>
Authored: Fri Nov 1 16:48:22 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Fri Nov 1 16:48:22 2013 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java    | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/eaf79d6b/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
index f8d259b..ecc9d69 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
@@ -93,6 +93,7 @@ public class QpidBrokerImpl extends JMSBrokerImpl<QpidQueue, QpidTopic> implemen
 
     @Override
     protected void connectSensors() {
+    	super.connectSensors();
         String serverInfoMBeanName = "org.apache.qpid:type=ServerInformation,name=ServerInformation";
 
         jmxFeed = JmxFeed.builder()


[44/50] brooklyn-library git commit: Fix jboss6: use correct jmx-port or pid-file

Posted by he...@apache.org.
Fix jboss6: use correct jmx-port or pid-file

- twiddle.sh needs configured with the correct rmi-registry port
- if using jmxmp, then can't use twiddle; instead use pid file
  (and rely on JmxFeed to get the service-up)


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

Branch: refs/heads/0.6.0
Commit: 2b5afd16cfc499bd5bcced2f9357c9510c2c88fc
Parents: e4b5835
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 13:15:06 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 14:56:46 2013 +0000

----------------------------------------------------------------------
 .../entity/webapp/jboss/JBoss6Server.java       |  5 ++
 .../entity/webapp/jboss/JBoss6SshDriver.java    | 78 ++++++++++-------
 .../jboss/Jboss6ServerIntegrationTest.java      | 88 ++++++++++++++++++++
 3 files changed, 140 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b5afd16/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
index ae82371..7c10af8 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
@@ -15,6 +15,11 @@ import brooklyn.util.flags.SetFromFlag;
 @ImplementedBy(JBoss6ServerImpl.class)
 public interface JBoss6Server extends JavaWebAppSoftwareProcess, JavaWebAppService, UsesJmx {
 
+    // TODO Instead of using portIncrement, would prefer to use http_port as "8080+" etc.
+    // On localhost, if an existing jboss6 is running and consuming the required port(s), 
+    // then we don't spot that and don't claim a different port.
+    // Things then fail silently!
+    
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION =
             ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "6.0.0.Final");

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b5afd16/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
index 4855c4f..be8c585 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
@@ -11,8 +11,11 @@ import java.util.Map;
 
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.drivers.downloads.DownloadResolver;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.java.UsesJmx.JmxAgentModes;
 import brooklyn.entity.webapp.JavaWebAppSshDriver;
 import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.collections.MutableMap;
 import brooklyn.util.net.Networking;
 import brooklyn.util.ssh.BashCommands;
 
@@ -115,8 +118,8 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
         String clusterArg = isEmpty(getClusterName()) ? "":"-g "+getClusterName();
         // run.sh must be backgrounded otherwise the script will never return.
 
-        Map<String,Object> flags = new HashMap<String, Object>();
-        flags.put("usePidFile",false);
+        // Don't automatically create pid; instead set JBOSS_PIDFILE to create the pid file we need
+        Map<String,?> flags = MutableMap.of("usePidFile", false);
 
         // We wait for evidence of tomcat running because, using 
         // brooklyn.ssh.config.tool.class=brooklyn.util.internal.ssh.cli.SshCliTool,
@@ -125,6 +128,7 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
         newScript(flags, LAUNCHING).
             body.append(
                 format("export JBOSS_CLASSPATH=%s/lib/jboss-logmanager.jar",getExpandedInstallDir()),
+                format("export JBOSS_PIDFILE=%s/%s", getRunDir(), PID_FILENAME),
                 format("%s/bin/run.sh -Djboss.service.binding.set=%s -Djboss.server.base.dir=$RUN_DIR/server ",getExpandedInstallDir(),PORT_GROUP_NAME) +
                         format("-Djboss.server.base.url=file://$RUN_DIR/server -Djboss.messaging.ServerPeerID=%s ",entity.getId())+
                         format("-Djboss.boot.server.log.dir=%s/server/%s/log ",getRunDir(),SERVER_TYPE) +
@@ -141,39 +145,51 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
 
     @Override
     public boolean isRunning() {
-        String host = entity.getAttribute(Attributes.HOSTNAME);
-        Integer port = entity.getAttribute(Attributes.JMX_PORT);
-
-        List<String> checkRunningScript = new LinkedList<String>();
-        checkRunningScript.add(
-                format("%s/bin/twiddle.sh --host %s --port %s get \"jboss.system:type=Server\" Started | grep true || exit 1",
-                        getExpandedInstallDir(), host, port));
-
-        //have to override the CLI/JMX options
-
-        Map<String, Object> flags = new LinkedHashMap<String, Object>();
-        flags.put("env", new LinkedHashMap<String, String>());
-
-        int result = execute(flags, checkRunningScript, "checkRunning " + entity + " on " + getMachine());
-        if (result == 0) return true;
-        if (result == 1) return false;
-        throw new IllegalStateException(format("%s running check gave result code %s",getEntity(),result));
+        JmxAgentModes jmxMode = entity.getConfig(UsesJmx.JMX_AGENT_MODE);
+        if (jmxMode == JmxAgentModes.JMX_RMI_CUSTOM_AGENT) {
+            String host = entity.getAttribute(Attributes.HOSTNAME);
+            Integer port = entity.getAttribute(UsesJmx.RMI_REGISTRY_PORT);
+    
+            List<String> checkRunningScript = new LinkedList<String>();
+            checkRunningScript.add(
+                    format("%s/bin/twiddle.sh --host %s --port %s get \"jboss.system:type=Server\" Started | grep true || exit 1",
+                            getExpandedInstallDir(), host, port));
+    
+            //have to override the CLI/JMX options
+    
+            Map<String, Object> flags = new LinkedHashMap<String, Object>();
+            flags.put("env", new LinkedHashMap<String, String>());
+    
+            int result = execute(flags, checkRunningScript, "checkRunning " + entity + " on " + getMachine());
+            if (result == 0) return true;
+            if (result == 1) return false;
+            throw new IllegalStateException(format("%s running check gave result code %s",getEntity(),result));
+        } else {
+            Map<String,?> flags = MutableMap.of("usePidFile", true);
+            return newScript(flags, CHECK_RUNNING).execute() == 0;
+        }
     }
 
     @Override
     public void stop() {
-        String host = entity.getAttribute(Attributes.HOSTNAME);
-        Integer port = entity.getAttribute(Attributes.JMX_PORT);
-        List<String> shutdownScript = new LinkedList<String>();
-        shutdownScript.add(format("%s/bin/shutdown.sh --host %s --port %s -S", getExpandedInstallDir(), host, port));
-
-        //again, messy copy of parent; but new driver scheme could allow script-helper to customise parameters
-        log.debug("invoking shutdown script for {}: {}", entity, shutdownScript);
-        Map<String, Object> flags = new LinkedHashMap<String, Object>();
-        flags.put("env", new LinkedHashMap<String, String>());
-        int result = execute(flags, shutdownScript, "shutdown " + entity + " on " + getMachine());
-        if (result != 0) log.warn("non-zero result code terminating {}: {}", entity, result);
-        log.debug("done invoking shutdown script for {}", entity);
+        JmxAgentModes jmxMode = entity.getConfig(UsesJmx.JMX_AGENT_MODE);
+        if (jmxMode == JmxAgentModes.JMX_RMI_CUSTOM_AGENT) {
+            String host = entity.getAttribute(Attributes.HOSTNAME);
+            Integer port = entity.getAttribute(UsesJmx.RMI_REGISTRY_PORT);
+            List<String> shutdownScript = new LinkedList<String>();
+            shutdownScript.add(format("%s/bin/shutdown.sh --host %s --port %s -S", getExpandedInstallDir(), host, port));
+    
+            //again, messy copy of parent; but new driver scheme could allow script-helper to customise parameters
+            log.debug("invoking shutdown script for {}: {}", entity, shutdownScript);
+            Map<String, Object> flags = new LinkedHashMap<String, Object>();
+            flags.put("env", new LinkedHashMap<String, String>());
+            int result = execute(flags, shutdownScript, "shutdown " + entity + " on " + getMachine());
+            if (result != 0) log.warn("non-zero result code terminating {}: {}", entity, result);
+            log.debug("done invoking shutdown script for {}", entity);
+        } else {
+            Map<String,?> flags = MutableMap.of("usePidFile", true);
+            newScript(flags, STOPPING).execute();
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b5afd16/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java
new file mode 100644
index 0000000..b7f261f
--- /dev/null
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java
@@ -0,0 +1,88 @@
+package brooklyn.entity.webapp.jboss;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.net.URL;
+
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.test.Asserts;
+import brooklyn.test.HttpTestUtils;
+import brooklyn.test.entity.TestApplication;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * TODO re-write this like WebAppIntegrationTest, rather than being jboss6 specific.
+ */
+public class Jboss6ServerIntegrationTest {
+    
+    // Port increment for JBoss 6.
+    public static final int PORT_INCREMENT = 400;
+
+    private URL warUrl;
+    private LocalhostMachineProvisioningLocation localhostProvisioningLocation;
+    private TestApplication app;
+    
+    @BeforeMethod(alwaysRun=true)
+    public void setUp() throws Exception {
+        String warPath = "hello-world.war";
+        warUrl = getClass().getClassLoader().getResource(warPath);
+
+        localhostProvisioningLocation = new LocalhostMachineProvisioningLocation();
+        app = ApplicationBuilder.newManagedApp(TestApplication.class);
+    }
+
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        if (app != null) Entities.destroyAll(app.getManagementContext());
+    }
+
+    @Test(groups = "Integration")
+    public void testJmxmp() throws Exception {
+        runTest(UsesJmx.JmxAgentModes.JMXMP);
+    }
+
+    @Test(groups = "Integration")
+    public void testJmxRmi() throws Exception {
+        runTest(UsesJmx.JmxAgentModes.JMX_RMI_CUSTOM_AGENT);
+    }
+    
+    @Test(groups = "Integration")
+    public void testJmxAutodetect() throws Exception {
+        runTest(UsesJmx.JmxAgentModes.AUTODETECT);
+    }
+    
+    protected void runTest(UsesJmx.JmxAgentModes jmxAgentMode) throws Exception {
+        final JBoss6Server server = app.createAndManageChild(EntitySpec.create(JBoss6Server.class)
+                .configure(JBoss6Server.PORT_INCREMENT, PORT_INCREMENT)
+                .configure(UsesJmx.JMX_AGENT_MODE, jmxAgentMode)
+                .configure("war", warUrl.toString()));
+
+        app.start(ImmutableList.of(localhostProvisioningLocation));
+        
+        String httpUrl = "http://"+server.getAttribute(JBoss6Server.HOSTNAME)+":"+server.getAttribute(JBoss6Server.HTTP_PORT)+"/";
+        
+        assertEquals(server.getAttribute(JBoss6Server.ROOT_URL).toLowerCase(), httpUrl.toLowerCase());
+        
+        HttpTestUtils.assertHttpStatusCodeEventuallyEquals(httpUrl, 200);
+        HttpTestUtils.assertContentContainsText(httpUrl, "Hello");
+
+
+        Asserts.succeedsEventually(new Runnable() {
+            @Override public void run() {
+                // TODO Could test other attributes as well; see jboss7 test
+                assertNotNull(server.getAttribute(JBoss6Server.REQUEST_COUNT));
+                assertNotNull(server.getAttribute(JBoss6Server.ERROR_COUNT));
+                assertNotNull(server.getAttribute(JBoss6Server.TOTAL_PROCESSING_TIME));
+            }});
+    }
+}


[04/50] brooklyn-library git commit: Merge pull request #986 from alasdairhodge/mariadb

Posted by he...@apache.org.
Merge pull request #986 from alasdairhodge/mariadb

Initial MariaDB entity

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

Branch: refs/heads/0.6.0
Commit: e613ed8d56234f4d7e8c9ec2543df3908abe78fb
Parents: 31a1b46 2e0516d
Author: ahgittin <al...@cloudsoftcorp.com>
Authored: Mon Oct 28 22:16:43 2013 -0700
Committer: ahgittin <al...@cloudsoftcorp.com>
Committed: Mon Oct 28 22:16:43 2013 -0700

----------------------------------------------------------------------
 .../entity/database/mariadb/MariaDbDriver.java  |  10 +
 .../entity/database/mariadb/MariaDbNode.java    |  84 ++++++++
 .../database/mariadb/MariaDbNodeImpl.java       | 119 ++++++++++
 .../database/mariadb/MariaDbSshDriver.java      | 216 +++++++++++++++++++
 .../brooklyn/entity/database/mariadb/my.cnf     |  19 ++
 .../src/main/resources/mariadb-logo-180x119.png | Bin 0 -> 9659 bytes
 .../mariadb/MariaDbIntegrationTest.groovy       | 105 +++++++++
 .../database/mariadb/MariaDbLiveEc2Test.java    |  27 +++
 .../mariadb/MariaDbLiveRackspaceTest.java       |  80 +++++++
 9 files changed, 660 insertions(+)
----------------------------------------------------------------------



[30/50] brooklyn-library git commit: Add public modifier to CouchDBClusterLiveTest class

Posted by he...@apache.org.
Add public modifier to CouchDBClusterLiveTest class


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

Branch: refs/heads/0.6.0
Commit: 93b94dc65f034ac98943caea50784c646a07cc6a
Parents: 74d9160
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Tue Nov 12 15:49:49 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Tue Nov 12 15:51:44 2013 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java  | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/93b94dc6/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
index f91639b..deee445 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
@@ -17,8 +17,6 @@ package brooklyn.entity.nosql.couchdb;
 
 import static org.testng.Assert.assertEquals;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -40,9 +38,7 @@ import com.google.common.collect.Iterables;
  * Tests that a two node cluster can be started on Amazon EC2 and data written on one {@link CouchDBNode}
  * can be read from another, using the Astyanax API.
  */
-class CouchDBClusterLiveTest {
-
-    private static final Logger log = LoggerFactory.getLogger(CouchDBClusterLiveTest.class);
+public class CouchDBClusterLiveTest {
 
     // private String provider = "rackspace-cloudservers-uk";
     private String provider = "aws-ec2:eu-west-1";


[26/50] brooklyn-library git commit: DynamicCluster.quarantineFailedEntities now defaults to true

Posted by he...@apache.org.
DynamicCluster.quarantineFailedEntities now defaults to true


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

Branch: refs/heads/0.6.0
Commit: 256a70f7751f5b26236286a668bb74e130242beb
Parents: 95cec8a
Author: Aled Sage <al...@gmail.com>
Authored: Thu Nov 7 09:59:18 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Nov 7 10:33:04 2013 +0000

----------------------------------------------------------------------
 .../entity/proxy/AbstractControllerTest.java    | 16 ++++++-------
 .../webapp/DynamicWebAppClusterTest.groovy      | 24 ++++++++------------
 2 files changed, 17 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/256a70f7/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
index 1704804..24e5c59 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
@@ -161,7 +161,7 @@ public class AbstractControllerTest {
     public void testUpdateCalledWithAddressesOfNewChildren() {
         // First child
         cluster.resize(1);
-        EntityLocal child = (EntityLocal) cluster.getChildren().iterator().next();
+        EntityLocal child = (EntityLocal) Iterables.getOnlyElement(cluster.getMembers());
         
         List<Collection<String>> u = Lists.newArrayList(controller.getUpdates());
         assertTrue(u.isEmpty(), "expected empty list but got "+u);
@@ -175,9 +175,9 @@ public class AbstractControllerTest {
         Asserts.succeedsEventually(new Runnable() {
             @Override
             public void run() {
-                assertEquals(cluster.getChildren().size(), 2);
+                assertEquals(cluster.getMembers().size(), 2);
             }});
-        EntityLocal child2 = (EntityLocal) Iterables.getOnlyElement(MutableSet.builder().addAll(cluster.getChildren()).remove(child).build());
+        EntityLocal child2 = (EntityLocal) Iterables.getOnlyElement(MutableSet.builder().addAll(cluster.getMembers()).remove(child).build());
         
         child2.setAttribute(ClusteredEntity.HTTP_PORT, 1234);
         child2.setAttribute(Startable.SERVICE_UP, true);
@@ -197,7 +197,7 @@ public class AbstractControllerTest {
     public void testUpdateCalledWithAddressesRemovedForStoppedChildren() {
         // Get some children, so we can remove one...
         cluster.resize(2);
-        for (Entity it: cluster.getChildren()) { 
+        for (Entity it: cluster.getMembers()) { 
             ((EntityLocal)it).setAttribute(ClusteredEntity.HTTP_PORT, 1234);
             ((EntityLocal)it).setAttribute(Startable.SERVICE_UP, true);
         }
@@ -205,7 +205,7 @@ public class AbstractControllerTest {
 
         // Now remove one child
         cluster.resize(1);
-        assertEquals(cluster.getChildren().size(), 1);
+        assertEquals(cluster.getMembers().size(), 1);
         assertEventuallyAddressesMatchCluster();
     }
 
@@ -213,7 +213,7 @@ public class AbstractControllerTest {
     public void testUpdateCalledWithAddressesRemovedForServiceDownChildrenThatHaveClearedHostnamePort() {
         // Get some children, so we can remove one...
         cluster.resize(2);
-        for (Entity it: cluster.getChildren()) { 
+        for (Entity it: cluster.getMembers()) { 
             ((EntityLocal)it).setAttribute(ClusteredEntity.HTTP_PORT, 1234);
             ((EntityLocal)it).setAttribute(Startable.SERVICE_UP, true);
         }
@@ -221,7 +221,7 @@ public class AbstractControllerTest {
 
         // Now unset host/port, and remove children
         // Note the unsetting of hostname is done in SoftwareProcessImpl.stop(), so this is realistic
-        for (Entity it : cluster.getChildren()) {
+        for (Entity it : cluster.getMembers()) {
             ((EntityLocal)it).setAttribute(ClusteredEntity.HTTP_PORT, null);
             ((EntityLocal)it).setAttribute(ClusteredEntity.HOSTNAME, null);
             ((EntityLocal)it).setAttribute(Startable.SERVICE_UP, false);
@@ -230,7 +230,7 @@ public class AbstractControllerTest {
     }
 
     private void assertEventuallyAddressesMatchCluster() {
-        assertEventuallyAddressesMatch(cluster.getChildren());
+        assertEventuallyAddressesMatch(cluster.getMembers());
     }
 
     private void assertEventuallyAddressesMatch(final Collection<Entity> expectedMembers) {

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/256a70f7/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy
index acc2185..a55e73f 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy
@@ -91,38 +91,32 @@ public class DynamicWebAppClusterTest {
         EntityTestUtils.assertAttributeEqualsEventually(MutableMap.of("timeout", TIMEOUT_MS), cluster, DynamicWebAppCluster.SERVICE_UP, false);
         
         // When child is !service_up, should continue to report false
-        Iterables.get(cluster.getChildren(), 0).setAttribute(Startable.SERVICE_UP, false);
+        Iterables.get(cluster.getMembers(), 0).setAttribute(Startable.SERVICE_UP, false);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", SHORT_WAIT_MS), cluster, DynamicWebAppCluster.SERVICE_UP, false);
         
         cluster.resize(2);
         
         // When one of the two children is service_up, should report true
-        Iterables.get(cluster.getChildren(), 0).setAttribute(Startable.SERVICE_UP, true);
+        Iterables.get(cluster.getMembers(), 0).setAttribute(Startable.SERVICE_UP, true);
         EntityTestUtils.assertAttributeEqualsEventually(MutableMap.of("timeout", TIMEOUT_MS), cluster, DynamicWebAppCluster.SERVICE_UP, true);
 
         // And if that serviceUp child goes away, should again report false
-        Entities.unmanage(Iterables.get(cluster.getChildren(), 0));
+        Entities.unmanage(Iterables.get(cluster.getMembers(), 0));
         EntityTestUtils.assertAttributeEqualsEventually(MutableMap.of("timeout", TIMEOUT_MS), cluster, DynamicWebAppCluster.SERVICE_UP, false);
     }
     
-    // FIXME Fails because of the config-closure stuff; it now coerces closure every time 
-    // on entity.getConfig(key), rather than only once. So the call to cluster.factory.configure
-    // updated a different instance from that retrieved subsequently!
-    @Test(groups="WIP")
+    @Test
     public void testPropertiesToChildren() {
-        DynamicWebAppCluster cluster = new DynamicWebAppClusterImpl(
-            factory: { properties -> new TestJavaWebAppEntity(properties + ["a": 1]) },
-            parent:app) {
-                protected Map getCustomChildFlags() { ["c":3] }
-        }
-        cluster.factory.configure(b: 2);
+        DynamicWebAppCluster cluster = app.createAndManageChild(EntitySpec.create(DynamicWebAppCluster.class)
+            .configure(DynamicWebAppCluster.FACTORY, { properties -> new TestJavaWebAppEntity(properties + ["a": 1]) })
+            .configure(DynamicWebAppCluster.CUSTOM_CHILD_FLAGS, ["b":2]));
+
         Entities.manage(cluster);
         
         app.start([new SimulatedLocation()])
         assertEquals 1, cluster.members.size()
-        def we = cluster.members[0]
+        TestJavaWebAppEntity we = Iterables.get(cluster.getMembers(), 0);
         assertEquals we.a, 1
         assertEquals we.b, 2
-        assertEquals we.c, 3
     }
 }


[47/50] brooklyn-library git commit: Merge pull request #1029 from Nakomis/postgresql-disconnect-on-stop

Posted by he...@apache.org.
Merge pull request #1029 from Nakomis/postgresql-disconnect-on-stop

Changed PostgreSqlNode default behaviour disconnect all client connectio...

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

Branch: refs/heads/0.6.0
Commit: d107292fe63fd0c8e9431e8215de441e9d1b5ffd
Parents: 2b5afd1 490fa1d
Author: ahgittin <al...@cloudsoftcorp.com>
Authored: Fri Nov 15 09:45:06 2013 -0800
Committer: ahgittin <al...@cloudsoftcorp.com>
Committed: Fri Nov 15 09:45:06 2013 -0800

----------------------------------------------------------------------
 .../brooklyn/entity/database/postgresql/PostgreSqlNode.java     | 5 +++++
 .../entity/database/postgresql/PostgreSqlSshDriver.java         | 4 +++-
 2 files changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[02/50] brooklyn-library git commit: added new apache cassandra version 1.2.11 as suggested version

Posted by he...@apache.org.
added new apache cassandra version 1.2.11 as suggested version


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

Branch: refs/heads/0.6.0
Commit: 31a1b46a398ad2d24831a9d7e1310c30de7afede
Parents: 25b37b3
Author: ZaidM <za...@cloudsoftcorp.com>
Authored: Mon Oct 28 13:26:06 2013 +0000
Committer: ZaidM <za...@cloudsoftcorp.com>
Committed: Mon Oct 28 17:06:14 2013 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/31a1b46a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
index 8042377..38d7df2 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
@@ -28,7 +28,7 @@ import brooklyn.util.flags.SetFromFlag;
 public interface CassandraNode extends SoftwareProcess, UsesJmx, UsesJavaMXBeans {
 
     @SetFromFlag("version")
-    ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "1.2.9");
+    ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "1.2.11");
 
     @SetFromFlag("downloadUrl")
     BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(


[19/50] brooklyn-library git commit: Update following PR comments

Posted by he...@apache.org.
Update following PR comments


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

Branch: refs/heads/0.6.0
Commit: c59df12db8d1082cbcb733c5ad6e11d68d697353
Parents: dc43620
Author: Martin Harris <gi...@nakomis.com>
Authored: Mon Nov 4 18:12:16 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Mon Nov 4 18:12:16 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/Subscribe.java          | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c59df12d/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
index 6e852ad..0a51cf2 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
@@ -39,12 +39,14 @@ public class Subscribe {
             MessageConsumer messageConsumer = session.createConsumer(destination);
 
             // Try and receive 100 messages
-            int n = MESSAGE_COUNT;
-            do {
+            for (int n = 0; n < 100; n++) {
                 TextMessage msg = (TextMessage) messageConsumer.receive(MESSAGE_TIMEOUT_MILLIS);
-                if (msg == null) break;
-                System.out.printf("Got message: '%s'\n", msg.getText());
-            } while (--n > 0);
+                if (msg == null) {
+                    System.out.printf("No message received in %s milliseconds, exiting", MESSAGE_TIMEOUT_MILLIS);
+                    break;
+                }
+                System.out.printf("Got message %d: '%s'\n", n+1, msg.getText());
+            }
         } catch (Exception e) {
             System.err.printf("Error while receiving - %s\n", e.getMessage());
             System.err.printf("Cause: %s\n", Throwables.getStackTraceAsString(e));


[17/50] brooklyn-library git commit: Merge pull request #992 from Nakomis/hadoop-and-whirr-example

Posted by he...@apache.org.
Merge pull request #992 from Nakomis/hadoop-and-whirr-example

Hadoop and whirr example

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

Branch: refs/heads/0.6.0
Commit: 50b9d712caa3264cd62b4d41bd0517f60c1cd524
Parents: d5cf04a 04811eb
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 4 08:51:32 2013 -0800
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 4 08:51:32 2013 -0800

----------------------------------------------------------------------
 examples/hadoop-and-whirr/pom.xml | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------



[43/50] brooklyn-library git commit: Make TomcatAutoScalerPolicyTest more deterministic

Posted by he...@apache.org.
Make TomcatAutoScalerPolicyTest more deterministic


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

Branch: refs/heads/0.6.0
Commit: e4b5835f476c2c1d08fe6c220fa24daa6c0742d1
Parents: 1efe728
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 11:39:16 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 14:56:45 2013 +0000

----------------------------------------------------------------------
 .../webapp/TomcatAutoScalerPolicyTest.java      | 35 +++++++++++++-------
 1 file changed, 23 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e4b5835f/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
index 251510a..4196442 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
@@ -4,6 +4,8 @@ import static brooklyn.test.HttpTestUtils.connectToUrl;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -25,7 +27,10 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 
 public class TomcatAutoScalerPolicyTest {
-    
+
+    @SuppressWarnings("unused")
+    private static final Logger LOG = LoggerFactory.getLogger(TomcatAutoScalerPolicyTest.class);
+
     // TODO Test is time-sensitive: we send two web-requests in rapid succession, and expect the average workrate to
     // be 2 msgs/sec; we then expect resizing to kick-in.
     // P speculate that... if for some reason things are running slow (e.g. GC during that one second), then brooklyn 
@@ -33,7 +38,7 @@ public class TomcatAutoScalerPolicyTest {
 
     private LocalhostMachineProvisioningLocation loc;
     private TestApplication app;
-
+    
     @BeforeMethod(alwaysRun=true)
     public void setUp() throws Exception {
         loc = new LocalhostMachineProvisioningLocation(MutableMap.of("name", "london"));
@@ -78,23 +83,29 @@ public class TomcatAutoScalerPolicyTest {
         
         app.start(ImmutableList.of(loc));
         
-        assertEquals((Integer)1, cluster.getCurrentSize());
+        assertEquals(cluster.getCurrentSize(), (Integer)1);
         
+        // Scaling based on *total requests* processed, rather than the requests per second.
+        // So just hit it with 2 requests.
+        // Alternatively could hit each tomcat server's URL twice per second; but that's less deterministic.
         TomcatServer tc = (TomcatServer) Iterables.getOnlyElement(cluster.getMembers());
         for (int i = 0; i < 2; i++) {
             connectToUrl(tc.getAttribute(TomcatServerImpl.ROOT_URL));
         }
         
-        Asserts.succeedsEventually(MutableMap.of("timeout", 3000), new Runnable() {
-            public void run() {
-                assertEquals(2.0d/cluster.getCurrentSize(), cluster.getAttribute(DynamicWebAppCluster.AVERAGE_REQUEST_COUNT));
-            }});
-
+        // We'll scale to two members as soon as the policy detects it.
+        // But the second member won't count in the requests-per-node until it has started up.
+        // Expect to see (if we polled at convenient times):
+        //  - zero requests per node (because haven't yet retrieved over JMX the metric)
+        //  - two requests per node, with one member
+        //  - two requests per node, with two members (one of whom is still starting up, so doesn't count)
+        //  - one request per node (i.e. two divided across the two active members)
         Asserts.succeedsEventually(MutableMap.of("timeout", 5*60*1000), new Runnable() {
-            public void run() {
-                assertTrue(policy.isRunning());
-                assertEquals((Integer)2, cluster.getCurrentSize());
-                assertEquals(1.0d, cluster.getAttribute(DynamicWebAppCluster.AVERAGE_REQUEST_COUNT));
+            @Override public void run() {
+                String err = "policy="+policy.isRunning()+"; size="+cluster.getCurrentSize()+"; reqCountPerNode="+cluster.getAttribute(DynamicWebAppCluster.REQUEST_COUNT_PER_NODE);
+                assertTrue(policy.isRunning(), "err="+err);
+                assertEquals(cluster.getCurrentSize(), (Integer)2, "err="+err);
+                assertEquals(cluster.getAttribute(DynamicWebAppCluster.REQUEST_COUNT_PER_NODE), 1.0d, "err="+err);
             }});
     }
 }


[45/50] brooklyn-library git commit: Changed PostgreSqlNode default behaviour disconnect all client connections on closure (pg_ctl -m immediate stop)

Posted by he...@apache.org.
Changed PostgreSqlNode default behaviour disconnect all client connections on closure (pg_ctl -m immediate stop)


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

Branch: refs/heads/0.6.0
Commit: 54036402a0303e2fdbdb61fdef68ea857ad38873
Parents: 08cbcec
Author: Martin Harris <gi...@nakomis.com>
Authored: Fri Nov 15 17:15:06 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Fri Nov 15 17:15:06 2013 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/database/postgresql/PostgreSqlNode.java | 4 ++++
 .../brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java | 4 +++-
 2 files changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/54036402/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
index 2778bca..b092b5a 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
@@ -32,5 +32,9 @@ public interface PostgreSqlNode extends DatabaseNode {
     @SetFromFlag("port")
     public static final PortAttributeSensorAndConfigKey POSTGRESQL_PORT =
             new PortAttributeSensorAndConfigKey("postgresql.port", "PostgreSQL port", PortRanges.fromString("5432+"));
+    
+    @SetFromFlag("disconnetOnStop")
+    public static final ConfigKey<Boolean> DISCONNECT_ON_STOP =
+    new BasicConfigKey<Boolean>(Boolean.class, "postgresql.disconnecto.on.stop", "If true, PostgreSQL will immediately disconnet (pg_ctl -m immediate stop) all current connections when the node is stopped", true);
 
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/54036402/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
index 8dda553..7c3f8b8 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
@@ -169,7 +169,9 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver
 
     @Override
     public void stop() {
-        newScript(MutableMap.of("usePidFile", false), STOPPING).body.append(callPgctl("stop", false)).failOnNonZeroResultCode().execute();
+        newScript(MutableMap.of("usePidFile", false), STOPPING).body.append(callPgctl(
+                (entity.getConfig(PostgreSqlNode.DISCONNECT_ON_STOP) ? "-m immediate " : "") +
+                "stop", false)).failOnNonZeroResultCode().execute();
     }
 
     @Override


[33/50] brooklyn-library git commit: Minor changes to get CumulusRDFApplication working

Posted by he...@apache.org.
Minor changes to get CumulusRDFApplication working


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

Branch: refs/heads/0.6.0
Commit: ce69ed16c39aa0fe96a6ae17d9b58157e4661640
Parents: 45cd805
Author: Martin Harris <gi...@nakomis.com>
Authored: Thu Nov 14 10:50:52 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Thu Nov 14 10:50:52 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/CumulusRDFApplication.java          | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ce69ed16/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
index af6e469..3464513 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
@@ -140,7 +140,6 @@ public class CumulusRDFApplication extends AbstractApplication {
 
         // Tomcat web-app server
         webapp = addChild(EntitySpec.create(TomcatServer.class)
-                .configure(SoftwareProcess.SUGGESTED_VERSION, "7.0.42")
                 .configure(UsesJmx.JMX_AGENT_MODE, UsesJmx.JmxAgentModes.JMX_RMI_CUSTOM_AGENT)
                 .configure(UsesJmx.JMX_PORT, PortRanges.fromString("11099+"))
                 .configure(UsesJmx.RMI_REGISTRY_PORT, PortRanges.fromString("9001+"))


[48/50] brooklyn-library git commit: Removed .failOnNonZeroResultCode(), following review from ahgittin

Posted by he...@apache.org.
Removed .failOnNonZeroResultCode(), following review from ahgittin


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

Branch: refs/heads/0.6.0
Commit: f5370316fd957b5b28fddaf3e1b057d0bbaef881
Parents: 490fa1d
Author: Martin Harris <gi...@nakomis.com>
Authored: Fri Nov 15 17:46:13 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Fri Nov 15 17:46:13 2013 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/f5370316/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
index 7c3f8b8..55bed4b 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
@@ -171,7 +171,7 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver
     public void stop() {
         newScript(MutableMap.of("usePidFile", false), STOPPING).body.append(callPgctl(
                 (entity.getConfig(PostgreSqlNode.DISCONNECT_ON_STOP) ? "-m immediate " : "") +
-                "stop", false)).failOnNonZeroResultCode().execute();
+                "stop", false)).execute();
     }
 
     @Override


[38/50] brooklyn-library git commit: fix cassandra edge case for single-node (nonclustered) deployment to force consistent addresses; mainly matters on some environments where hostname resolves differently to the ip address being used but since we aren't

Posted by he...@apache.org.
fix cassandra edge case for single-node (nonclustered) deployment to force consistent addresses; mainly matters on some environments where hostname resolves differently to the ip address being used but since we aren't clustering we don't mind (particularly for localhost, if hostname has been set through dhcp to something different to the ip being used)


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

Branch: refs/heads/0.6.0
Commit: aed14421cb352a9e90fb51b024972b02de67403d
Parents: 30f87cc
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Nov 14 21:14:59 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Nov 14 21:21:39 2013 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/nosql/cassandra/CassandraNodeDriver.java  | 2 ++
 .../brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java    | 7 +++++++
 .../entity/nosql/cassandra/CassandraNodeSshDriver.java        | 3 ++-
 3 files changed, 11 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/aed14421/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeDriver.java
index 1234421..0c71930 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeDriver.java
@@ -19,4 +19,6 @@ public interface CassandraNodeDriver extends JavaSoftwareProcessDriver {
 
     String getCassandraConfigFileName();
 
+    boolean isClustered();
+
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/aed14421/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
index cede56b..01ad632 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
@@ -114,11 +114,14 @@ public class CassandraNodeImpl extends SoftwareProcessImpl implements CassandraN
             // http://www.datastax.com/documentation/cassandra/2.0/mobile/cassandra/architecture/architectureSnitchEC2MultiRegion_c.html
             // describes that the listen_address is set to the private IP, and the broadcast_address is set to the public IP.
             return getPublicIp();
+        } else if (!getDriver().isClustered()) {
+            return getListenAddress();
         } else {
             // In other situations, prefer the hostname so other regions can see it
             return getAttribute(CassandraNode.HOSTNAME);
         }
     }
+    
     public String getPrivateIp() {
         if (requiresAlwaysPublicIp()) {
             return getAttribute(CassandraNode.ADDRESS);
@@ -202,6 +205,10 @@ public class CassandraNodeImpl extends SoftwareProcessImpl implements CassandraN
     public Class<CassandraNodeDriver> getDriverInterface() {
         return CassandraNodeDriver.class;
     }
+    
+    public CassandraNodeDriver getDriver() {
+        return (CassandraNodeDriver) super.getDriver();
+    }
 
     @Override
     public void init() {

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/aed14421/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
index 1d54fad..b2c331f 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
@@ -176,7 +176,8 @@ public class CassandraNodeSshDriver extends JavaSoftwareProcessSshDriver impleme
         }
     }
 
-    protected boolean isClustered() {
+    @Override
+    public boolean isClustered() {
         return entity.getParent() instanceof CassandraCluster;
     }
 


[16/50] brooklyn-library git commit: Fixed issue that mean example subscriber would quit after 101 messages, not 100

Posted by he...@apache.org.
Fixed issue that mean example subscriber would quit after 101 messages, not 100


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

Branch: refs/heads/0.6.0
Commit: dc4362044a7a10d3ff5ef8379b01ae8ab9ff8884
Parents: f7cdb81
Author: Martin Harris <gi...@nakomis.com>
Authored: Fri Nov 1 16:50:48 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Fri Nov 1 16:50:48 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/Subscribe.java                     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc436204/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
index 877efcf..6e852ad 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
@@ -44,7 +44,7 @@ public class Subscribe {
                 TextMessage msg = (TextMessage) messageConsumer.receive(MESSAGE_TIMEOUT_MILLIS);
                 if (msg == null) break;
                 System.out.printf("Got message: '%s'\n", msg.getText());
-            } while (n --> 0);
+            } while (--n > 0);
         } catch (Exception e) {
             System.err.printf("Error while receiving - %s\n", e.getMessage());
             System.err.printf("Cause: %s\n", Throwables.getStackTraceAsString(e));


[05/50] brooklyn-library git commit: tidy, and allow Map.copyOf(null) to return an empty map (which i think is the common use case)

Posted by he...@apache.org.
tidy, and allow Map.copyOf(null) to return an empty map (which i think is the common use case)


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

Branch: refs/heads/0.6.0
Commit: 1f31bb0b26efbb153db41a52e1a3dba6ca73f6d2
Parents: e613ed8
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Oct 28 10:04:24 2013 -0700
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Oct 29 07:06:01 2013 -0700

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/database/mysql/MySqlNodeImpl.java    | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1f31bb0b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNodeImpl.java b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNodeImpl.java
index e3119eb..f9ce85a 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNodeImpl.java
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNodeImpl.java
@@ -2,8 +2,6 @@ package brooklyn.entity.database.mysql;
 
 import java.util.Map;
 
-import javax.annotation.Nullable;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 


[39/50] brooklyn-library git commit: camp: remove test dependency on memsql

Posted by he...@apache.org.
camp: remove test dependency on memsql

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

Branch: refs/heads/0.6.0
Commit: 1455f3262daa4cdb2c70d2a205cc8890d8b0e032
Parents: aed1442
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 10:24:24 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 10:24:24 2013 +0000

----------------------------------------------------------------------
 sandbox/camp/pom.xml | 7 -------
 1 file changed, 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1455f326/sandbox/camp/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/camp/pom.xml b/sandbox/camp/pom.xml
index b095f15..63add68 100644
--- a/sandbox/camp/pom.xml
+++ b/sandbox/camp/pom.xml
@@ -56,13 +56,6 @@
             <artifactId>brooklyn-example-simple-web-cluster</artifactId>
             <version>${brooklyn.version}</version>
         </dependency>
-        <dependency>
-            <groupId>io.cloudsoft.memsql</groupId>
-            <artifactId>brooklyn-memsql</artifactId>
-            <version>0.1.0-SNAPSHOT</version>
-            <optional>true</optional>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <build>


[35/50] brooklyn-library git commit: BIND entity is only tested on CentOS

Posted by he...@apache.org.
BIND entity is only tested on CentOS


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

Branch: refs/heads/0.6.0
Commit: 08cbcec5b356883f7399a269516012597dfcc8ae
Parents: f02be6a
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Nov 14 15:39:39 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Thu Nov 14 15:39:39 2013 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/network/bind/BindDnsServerLiveTest.java     | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/08cbcec5/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
index 73d4ffb..9a9f346 100644
--- a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
+++ b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
@@ -56,8 +56,8 @@ public class BindDnsServerLiveTest {
 
     @DataProvider(name = "virtualMachineData")
     public Object[][] provideVirtualMachineData() {
-        return new Object[][] { // ImageId, Provider, Region
-            new Object[] { "eu-west-1/ami-029f9476", "aws-ec2:eu-west-1" },
+        return new Object[][] { // CentOS 6.3
+            new Object[] { "us-east-1/ami-7d7bfc14", "aws-ec2:us-east-1" },
         };
     }
 
@@ -66,7 +66,6 @@ public class BindDnsServerLiveTest {
         LOG.info("Testing BIND on {} using {}", provider, imageId);
 
         Map<String, String> properties = MutableMap.of("image-id", imageId);
-        if (provider.contains("ec2")) properties.put("user", "ec2-user");
         testLocation = app.getManagementContext().getLocationRegistry().resolve(provider, properties);
 
         BindDnsServer dns = app.createAndManageChild(EntitySpec.create(BindDnsServer.class));


[42/50] brooklyn-library git commit: Fix NPE in AbstractController.update

Posted by he...@apache.org.
Fix NPE in AbstractController.update

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

Branch: refs/heads/0.6.0
Commit: 1efe72870056ce96cafe925d9da922a6d51accaf
Parents: c2b9bc3
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 10:53:03 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 10:53:03 2013 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/proxy/AbstractControllerImpl.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1efe7287/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
index 9679e12..95ac997 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -268,7 +268,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
     @Override
     public void update() {
         Task<?> task = updateAsync();
-        task.getUnchecked();
+        if (task != null) task.getUnchecked();
     }
     
     public synchronized Task<?> updateAsync() {


[41/50] brooklyn-library git commit: Fix NPE in TomcatServer.disconnectSensors (when inactive)

Posted by he...@apache.org.
Fix NPE in TomcatServer.disconnectSensors (when inactive)

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

Branch: refs/heads/0.6.0
Commit: c2b9bc332bb38b216d664a72b0d80beea31a53f3
Parents: 36bde45
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 10:52:41 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 10:52:41 2013 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/webapp/tomcat/TomcatServerImpl.java     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c2b9bc33/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServerImpl.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServerImpl.java
index 596eb7e..a6c1b72 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServerImpl.java
@@ -1,6 +1,6 @@
 package brooklyn.entity.webapp.tomcat;
 
-import static java.lang.String.*;
+import static java.lang.String.format;
 
 import java.util.concurrent.TimeUnit;
 
@@ -71,7 +71,7 @@ public class TomcatServerImpl extends JavaWebAppSoftwareProcessImpl implements T
     public void disconnectSensors() {
         super.disconnectSensors();
         if (getDriver().isJmxEnabled()) {
-           if (jmxFeed.isActivated()) jmxFeed.stop();
+           if (jmxFeed != null) jmxFeed.stop();
         } else {
             disconnectServiceUpIsRunning();
         }


[50/50] brooklyn-library git commit: Changed version to 0.6.0

Posted by he...@apache.org.
Changed version to 0.6.0


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

Branch: refs/heads/0.6.0
Commit: 6acc62fa2c050e18fbb10a8744ede26d7167bc43
Parents: f23f395
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 18 15:30:59 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 18 15:30:59 2013 +0000

----------------------------------------------------------------------
 examples/global-web-fabric/pom.xml              | 2 +-
 examples/hadoop-and-whirr/pom.xml               | 2 +-
 examples/pom.xml                                | 2 +-
 examples/simple-messaging-pubsub/pom.xml        | 2 +-
 examples/simple-nosql-cluster/pom.xml           | 2 +-
 examples/simple-open-loop-policy/pom.xml        | 2 +-
 examples/simple-web-cluster/pom.xml             | 2 +-
 examples/webapps/hello-world-hadoop-jar/pom.xml | 2 +-
 examples/webapps/hello-world-hadoop/pom.xml     | 2 +-
 examples/webapps/hello-world-sql/pom.xml        | 2 +-
 examples/webapps/hello-world-webapp/pom.xml     | 2 +-
 examples/webapps/pom.xml                        | 2 +-
 sandbox/camp/pom.xml                            | 2 +-
 sandbox/cassandra-multicloud-snitch/pom.xml     | 2 +-
 sandbox/database/pom.xml                        | 2 +-
 sandbox/dropwizard/pom.xml                      | 2 +-
 sandbox/mgmt/pom.xml                            | 2 +-
 sandbox/monitoring/pom.xml                      | 2 +-
 sandbox/nosql/pom.xml                           | 2 +-
 sandbox/web-acceptance/pom.xml                  | 2 +-
 software/database/pom.xml                       | 2 +-
 software/messaging/pom.xml                      | 2 +-
 software/network/pom.xml                        | 2 +-
 software/nosql/pom.xml                          | 2 +-
 software/osgi/pom.xml                           | 2 +-
 software/webapp/pom.xml                         | 2 +-
 usage/qa/pom.xml                                | 2 +-
 usage/qa/start-monitor.sh                       | 2 +-
 usage/qa/start-webcluster.sh                    | 2 +-
 29 files changed, 29 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/global-web-fabric/pom.xml
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/pom.xml b/examples/global-web-fabric/pom.xml
index 3657b25..297bc8d 100644
--- a/examples/global-web-fabric/pom.xml
+++ b/examples/global-web-fabric/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/hadoop-and-whirr/pom.xml
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/pom.xml b/examples/hadoop-and-whirr/pom.xml
index 0d041c9..d80c1eb 100644
--- a/examples/hadoop-and-whirr/pom.xml
+++ b/examples/hadoop-and-whirr/pom.xml
@@ -8,7 +8,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index e8ff5d8..14fdc26 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/simple-messaging-pubsub/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/pom.xml b/examples/simple-messaging-pubsub/pom.xml
index 2a76ca7..c0c509d 100644
--- a/examples/simple-messaging-pubsub/pom.xml
+++ b/examples/simple-messaging-pubsub/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/simple-nosql-cluster/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/pom.xml b/examples/simple-nosql-cluster/pom.xml
index b54cb54..ea8252e 100644
--- a/examples/simple-nosql-cluster/pom.xml
+++ b/examples/simple-nosql-cluster/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/simple-open-loop-policy/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-open-loop-policy/pom.xml b/examples/simple-open-loop-policy/pom.xml
index 5774ab6..490de07 100644
--- a/examples/simple-open-loop-policy/pom.xml
+++ b/examples/simple-open-loop-policy/pom.xml
@@ -9,7 +9,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/simple-web-cluster/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/pom.xml b/examples/simple-web-cluster/pom.xml
index 546afcf..aef5bc0 100644
--- a/examples/simple-web-cluster/pom.xml
+++ b/examples/simple-web-cluster/pom.xml
@@ -9,7 +9,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/webapps/hello-world-hadoop-jar/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-hadoop-jar/pom.xml b/examples/webapps/hello-world-hadoop-jar/pom.xml
index b44cb3a..c190fb7 100644
--- a/examples/webapps/hello-world-hadoop-jar/pom.xml
+++ b/examples/webapps/hello-world-hadoop-jar/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/webapps/hello-world-hadoop/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-hadoop/pom.xml b/examples/webapps/hello-world-hadoop/pom.xml
index c3f01a9..773327c 100644
--- a/examples/webapps/hello-world-hadoop/pom.xml
+++ b/examples/webapps/hello-world-hadoop/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/webapps/hello-world-sql/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-sql/pom.xml b/examples/webapps/hello-world-sql/pom.xml
index 22c999f..e0d2e66 100644
--- a/examples/webapps/hello-world-sql/pom.xml
+++ b/examples/webapps/hello-world-sql/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version> <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/webapps/hello-world-webapp/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-webapp/pom.xml b/examples/webapps/hello-world-webapp/pom.xml
index 0ef6498..61bc5da 100644
--- a/examples/webapps/hello-world-webapp/pom.xml
+++ b/examples/webapps/hello-world-webapp/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/examples/webapps/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/pom.xml b/examples/webapps/pom.xml
index bfbdf52..50f715a 100644
--- a/examples/webapps/pom.xml
+++ b/examples/webapps/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/camp/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/camp/pom.xml b/sandbox/camp/pom.xml
index 63add68..8851877 100644
--- a/sandbox/camp/pom.xml
+++ b/sandbox/camp/pom.xml
@@ -11,7 +11,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version><!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version><!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/cassandra-multicloud-snitch/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/cassandra-multicloud-snitch/pom.xml b/sandbox/cassandra-multicloud-snitch/pom.xml
index c7bc2d4..2b0b9de 100644
--- a/sandbox/cassandra-multicloud-snitch/pom.xml
+++ b/sandbox/cassandra-multicloud-snitch/pom.xml
@@ -10,7 +10,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/database/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/database/pom.xml b/sandbox/database/pom.xml
index da4e85f..213f8b0 100644
--- a/sandbox/database/pom.xml
+++ b/sandbox/database/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/dropwizard/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/dropwizard/pom.xml b/sandbox/dropwizard/pom.xml
index 037602a..d9dc92c 100644
--- a/sandbox/dropwizard/pom.xml
+++ b/sandbox/dropwizard/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version><!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version><!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/mgmt/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/mgmt/pom.xml b/sandbox/mgmt/pom.xml
index 808b334..d773a57 100644
--- a/sandbox/mgmt/pom.xml
+++ b/sandbox/mgmt/pom.xml
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>io.brooklyn</groupId>
 		<artifactId>brooklyn-parent</artifactId>
-		<version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+		<version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
     

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/monitoring/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/monitoring/pom.xml b/sandbox/monitoring/pom.xml
index 6d5f9d2..33a15d4 100644
--- a/sandbox/monitoring/pom.xml
+++ b/sandbox/monitoring/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/nosql/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/nosql/pom.xml b/sandbox/nosql/pom.xml
index b9289a8..3c6572a 100644
--- a/sandbox/nosql/pom.xml
+++ b/sandbox/nosql/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/sandbox/web-acceptance/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/web-acceptance/pom.xml b/sandbox/web-acceptance/pom.xml
index 90dd3ac..a362b0a 100644
--- a/sandbox/web-acceptance/pom.xml
+++ b/sandbox/web-acceptance/pom.xml
@@ -9,7 +9,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/software/database/pom.xml
----------------------------------------------------------------------
diff --git a/software/database/pom.xml b/software/database/pom.xml
index dc2dfbd..a362002 100644
--- a/software/database/pom.xml
+++ b/software/database/pom.xml
@@ -11,7 +11,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/software/messaging/pom.xml
----------------------------------------------------------------------
diff --git a/software/messaging/pom.xml b/software/messaging/pom.xml
index 6ab03d1..d64ecee 100644
--- a/software/messaging/pom.xml
+++ b/software/messaging/pom.xml
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>io.brooklyn</groupId>
 		<artifactId>brooklyn-parent</artifactId>
-		<version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+		<version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/software/network/pom.xml
----------------------------------------------------------------------
diff --git a/software/network/pom.xml b/software/network/pom.xml
index ac935e4..0be7aa1 100644
--- a/software/network/pom.xml
+++ b/software/network/pom.xml
@@ -9,7 +9,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/software/nosql/pom.xml
----------------------------------------------------------------------
diff --git a/software/nosql/pom.xml b/software/nosql/pom.xml
index 2fbee15..3c02593 100644
--- a/software/nosql/pom.xml
+++ b/software/nosql/pom.xml
@@ -10,7 +10,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/software/osgi/pom.xml
----------------------------------------------------------------------
diff --git a/software/osgi/pom.xml b/software/osgi/pom.xml
index c6d4dd7..c63e5e8 100644
--- a/software/osgi/pom.xml
+++ b/software/osgi/pom.xml
@@ -11,7 +11,7 @@
 	<parent>
 		<groupId>io.brooklyn</groupId>
 		<artifactId>brooklyn-parent</artifactId>
-		<version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+		<version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/software/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/software/webapp/pom.xml b/software/webapp/pom.xml
index 07f70ad..2f5f696 100644
--- a/software/webapp/pom.xml
+++ b/software/webapp/pom.xml
@@ -11,7 +11,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/usage/qa/pom.xml
----------------------------------------------------------------------
diff --git a/usage/qa/pom.xml b/usage/qa/pom.xml
index fd48a71..f5095a1 100644
--- a/usage/qa/pom.xml
+++ b/usage/qa/pom.xml
@@ -10,7 +10,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.6.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.6.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/usage/qa/start-monitor.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-monitor.sh b/usage/qa/start-monitor.sh
index 4d578c5..ec975e5 100755
--- a/usage/qa/start-monitor.sh
+++ b/usage/qa/start-monitor.sh
@@ -7,7 +7,7 @@
 #set -x # debug
 
 CLASS=brooklyn.qa.longevity.Monitor
-VERSION=0.6.0-SNAPSHOT # BROOKLYN_VERSION
+VERSION=0.6.0 # BROOKLYN_VERSION
 
 ROOT=$(cd $(dirname $0) && pwd)
 cd $ROOT

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6acc62fa/usage/qa/start-webcluster.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-webcluster.sh b/usage/qa/start-webcluster.sh
index e623cff..8c6eabe 100755
--- a/usage/qa/start-webcluster.sh
+++ b/usage/qa/start-webcluster.sh
@@ -7,7 +7,7 @@
 #set -x # debug
 
 CLASS=brooklyn.qa.longevity.webcluster.WebClusterApp
-VERSION=0.6.0-SNAPSHOT # BROOKLYN_VERSION
+VERSION=0.6.0 # BROOKLYN_VERSION
 
 ROOT=$(cd $(dirname $0) && pwd)
 cd $ROOT


[36/50] brooklyn-library git commit: configure logging for nosql example

Posted by he...@apache.org.
configure logging for nosql example


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

Branch: refs/heads/0.6.0
Commit: f5c6402b38faeea98201d2ab579d9bba641c913f
Parents: 08cbcec
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Nov 13 15:07:47 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Nov 14 21:21:20 2013 +0000

----------------------------------------------------------------------
 examples/simple-nosql-cluster/pom.xml | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/f5c6402b/examples/simple-nosql-cluster/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/pom.xml b/examples/simple-nosql-cluster/pom.xml
index 3ec813b..b54cb54 100644
--- a/examples/simple-nosql-cluster/pom.xml
+++ b/examples/simple-nosql-cluster/pom.xml
@@ -27,6 +27,13 @@
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
+        
+        <dependency>
+            <groupId>io.brooklyn</groupId>
+            <artifactId>brooklyn-logback-xml</artifactId>
+            <version>${project.version}</version>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
     <build>


[40/50] brooklyn-library git commit: Make TomcatServerSimpleIntegrationTest more robust

Posted by he...@apache.org.
Make TomcatServerSimpleIntegrationTest more robust

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

Branch: refs/heads/0.6.0
Commit: 36bde454adf42e65c4b3ba73fd35c1bb10e744c3
Parents: 1455f32
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 10:52:08 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 10:52:08 2013 +0000

----------------------------------------------------------------------
 .../TomcatServerSimpleIntegrationTest.java      | 28 ++++++++++++--------
 1 file changed, 17 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36bde454/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
index 8233dc4..3c6c04d 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
@@ -1,10 +1,10 @@
 package brooklyn.entity.webapp.tomcat;
 
-import static brooklyn.test.TestUtils.isPortInUse;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.fail;
 
 import java.net.ServerSocket;
+import java.util.Iterator;
 
 import org.jclouds.util.Throwables2;
 import org.slf4j.Logger;
@@ -16,8 +16,11 @@ import org.testng.annotations.Test;
 import brooklyn.entity.basic.ApplicationBuilder;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.location.PortRange;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.location.basic.PortRanges;
 import brooklyn.test.entity.TestApplication;
+import brooklyn.util.net.Networking;
 
 import com.google.common.collect.ImmutableList;
 
@@ -30,20 +33,23 @@ public class TomcatServerSimpleIntegrationTest {
     @SuppressWarnings("unused")
     private static final Logger LOG = LoggerFactory.getLogger(TomcatServerSimpleIntegrationTest.class);
     
-    /** don't use 8080 since that is commonly used by testing software */
-    static int DEFAULT_HTTP_PORT = 7880;
-
-    static boolean httpPortLeftOpen = false;
+    /** don't use 8080 since that is commonly used by testing software; use different from other tests. */
+    static PortRange DEFAULT_HTTP_PORT_RANGE = PortRanges.fromString("7880-7980");
     
     private TestApplication app;
     private TomcatServer tc;
+    private int httpPort;
     
     @BeforeMethod(alwaysRun=true)
-    public void failIfHttpPortInUse() {
-        if (isPortInUse(DEFAULT_HTTP_PORT, 5000L)) {
-            httpPortLeftOpen = true;
-            fail("someone is already listening on port "+DEFAULT_HTTP_PORT+"; tests assume that port "+DEFAULT_HTTP_PORT+" is free on localhost");
+    public void pickFreePort() {
+        for (Iterator<Integer> iter = DEFAULT_HTTP_PORT_RANGE.iterator(); iter.hasNext();) {
+            Integer port = iter.next();
+            if (Networking.isPortAvailable(port)) {
+                httpPort = port;
+                return;
+            }
         }
+        fail("someone is already listening on ports "+DEFAULT_HTTP_PORT_RANGE+"; tests assume that port is free on localhost");
     }
  
     @AfterMethod(alwaysRun=true)
@@ -53,10 +59,10 @@ public class TomcatServerSimpleIntegrationTest {
     
     @Test(groups="Integration")
     public void detectFailureIfTomcatCantBindToPort() throws Exception {
-        ServerSocket listener = new ServerSocket(DEFAULT_HTTP_PORT);
+        ServerSocket listener = new ServerSocket(httpPort);
         try {
             app = ApplicationBuilder.newManagedApp(TestApplication.class);
-            tc = app.createAndManageChild(EntitySpec.create(TomcatServer.class).configure("httpPort",DEFAULT_HTTP_PORT));
+            tc = app.createAndManageChild(EntitySpec.create(TomcatServer.class).configure("httpPort", httpPort));
             
             try {
                 tc.start(ImmutableList.of(app.getManagementContext().getLocationManager().manage(new LocalhostMachineProvisioningLocation())));


[22/50] brooklyn-library git commit: Replaced erroneous magic number with constant

Posted by he...@apache.org.
Replaced erroneous magic number with constant


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

Branch: refs/heads/0.6.0
Commit: 4c2c535b3c05179eab74117541591c1d7de6939c
Parents: 0cc146e
Author: Martin Harris <gi...@nakomis.com>
Authored: Mon Nov 4 18:14:45 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Mon Nov 4 18:14:45 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/Subscribe.java                     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4c2c535b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
index 0a51cf2..7899f47 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Subscribe.java
@@ -39,7 +39,7 @@ public class Subscribe {
             MessageConsumer messageConsumer = session.createConsumer(destination);
 
             // Try and receive 100 messages
-            for (int n = 0; n < 100; n++) {
+            for (int n = 0; n < MESSAGE_COUNT; n++) {
                 TextMessage msg = (TextMessage) messageConsumer.receive(MESSAGE_TIMEOUT_MILLIS);
                 if (msg == null) {
                     System.out.printf("No message received in %s milliseconds, exiting", MESSAGE_TIMEOUT_MILLIS);


[08/50] brooklyn-library git commit: Add catalog configuration for initial size in CumulusRDFApplication

Posted by he...@apache.org.
Add catalog configuration for initial size in CumulusRDFApplication


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

Branch: refs/heads/0.6.0
Commit: 37d02f225a395433fe013b2a5a7d405764d544e9
Parents: 3b104fc
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Oct 31 17:27:18 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Thu Oct 31 17:34:19 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/CumulusRDFApplication.java    | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37d02f22/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
index b7a2d7a..879fe66 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
@@ -128,14 +128,14 @@ public class CumulusRDFApplication extends AbstractApplication {
         if (getConfig(MULTI_REGION_FABRIC)) {
             cassandra = addChild(EntitySpec.create(CassandraFabric.class)
                     .configure(CassandraCluster.CLUSTER_NAME, "Brooklyn")
-                    .configure(CassandraCluster.INITIAL_SIZE, 2) // per location
+                    .configure(CassandraCluster.INITIAL_SIZE, getConfig(CASSANDRA_CLUSTER_SIZE)) // per location
                     .configure(CassandraCluster.ENDPOINT_SNITCH_NAME, "brooklyn.entity.nosql.cassandra.customsnitch.MultiCloudSnitch")
                     .configure(CassandraNode.CUSTOM_SNITCH_JAR_URL, "classpath://brooklyn/entity/nosql/cassandra/cassandra-multicloud-snitch.jar")
                     .configure(CassandraFabric.MEMBER_SPEC, clusterSpec));
         } else {
             cassandra = addChild(EntitySpec.create(clusterSpec)
                     .configure(CassandraCluster.CLUSTER_NAME, "Brooklyn")
-                    .configure(CassandraCluster.INITIAL_SIZE, 2));
+                    .configure(CassandraCluster.INITIAL_SIZE, getConfig(CASSANDRA_CLUSTER_SIZE)));
         }
 
         // Tomcat web-app server
@@ -154,7 +154,7 @@ public class CumulusRDFApplication extends AbstractApplication {
                 // Process the YAML template given in the application config
                 String url = Entities.getRequiredUrlConfig(CumulusRDFApplication.this, CUMULUS_RDF_CONFIG_URL);
                 Map<String, Object> config = MutableMap.<String, Object>of("cassandraHostname", endpoint.getHostText(), "cassandraThriftPort", endpoint.getPort());
-                String contents = TemplateProcessor.processTemplateContents(new ResourceUtils(this).getResourceAsString(url), config);
+                String contents = TemplateProcessor.processTemplateContents(new ResourceUtils(CumulusRDFApplication.this).getResourceAsString(url), config);
 
                 // Copy the file contents to the remote machine
                 return DynamicTasks.queue(SshEffectorTasks.put("/tmp/cumulus.yaml").contents(contents)).get();
@@ -198,6 +198,7 @@ public class CumulusRDFApplication extends AbstractApplication {
         addLocations(locations);
 
         // The web application only needs to run in one location, use the first
+        // TODO use a multi-region web cluster
         Collection<? extends Location> first = MutableList.copyOf(Iterables.limit(locations, 1));
 
         setAttribute(Attributes.SERVICE_STATE, Lifecycle.STARTING);


[18/50] brooklyn-library git commit: Merge pull request #993 from jdtoy/hacass-demo-catalog

Posted by he...@apache.org.
Merge pull request #993 from jdtoy/hacass-demo-catalog

Cassandra Demos - Catalog Config Parameters

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

Branch: refs/heads/0.6.0
Commit: f01111da76a10d2d354d6743d051fd9224fb33ef
Parents: 50b9d71 3db36f1
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 4 08:52:39 2013 -0800
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 4 08:52:39 2013 -0800

----------------------------------------------------------------------
 .../demo/HighAvailabilityCassandraCluster.java    | 18 ++++++++++++++++--
 .../brooklyn/demo/WideAreaCassandraCluster.java   | 15 +++++++++++++--
 2 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[09/50] brooklyn-library git commit: tweak web example sql so it is more portable

Posted by he...@apache.org.
tweak web example sql so it is more portable


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

Branch: refs/heads/0.6.0
Commit: b67043fa5976690585abc8e7b8ab4f4e739ac193
Parents: 1f31bb0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Oct 31 19:48:02 2013 -0700
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Oct 31 19:48:45 2013 -0700

----------------------------------------------------------------------
 .../src/main/resources/visitors-creation-script.sql       | 10 ++++++++--
 .../camp/src/test/resources/visitors-creation-script.sql  | 10 ++++++++--
 2 files changed, 16 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/b67043fa/examples/simple-web-cluster/src/main/resources/visitors-creation-script.sql
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/resources/visitors-creation-script.sql b/examples/simple-web-cluster/src/main/resources/visitors-creation-script.sql
index f3bdd4a..e1a1de0 100644
--- a/examples/simple-web-cluster/src/main/resources/visitors-creation-script.sql
+++ b/examples/simple-web-cluster/src/main/resources/visitors-creation-script.sql
@@ -1,14 +1,20 @@
 create database visitors;
 use visitors;
-create user 'brooklyn' identified by 'br00k11n';
+
+# not necessary to create user if we grant (and not supported in some dialects)
+# create user 'brooklyn' identified by 'br00k11n';
+
 grant usage on *.* to 'brooklyn'@'%' identified by 'br00k11n';
+
 # ''@localhost is sometimes set up, overriding brooklyn@'%', so do a second explicit grant
 grant usage on *.* to 'brooklyn'@'localhost' identified by 'br00k11n';
+
 grant all privileges on visitors.* to 'brooklyn'@'%';
+
 flush privileges;
 
 CREATE TABLE MESSAGES (
-        id INT NOT NULL AUTO_INCREMENT,
+        id BIGINT NOT NULL AUTO_INCREMENT,
         NAME VARCHAR(30) NOT NULL,
         MESSAGE VARCHAR(400) NOT NULL,
         PRIMARY KEY (ID)

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/b67043fa/sandbox/camp/src/test/resources/visitors-creation-script.sql
----------------------------------------------------------------------
diff --git a/sandbox/camp/src/test/resources/visitors-creation-script.sql b/sandbox/camp/src/test/resources/visitors-creation-script.sql
index f3bdd4a..e1a1de0 100644
--- a/sandbox/camp/src/test/resources/visitors-creation-script.sql
+++ b/sandbox/camp/src/test/resources/visitors-creation-script.sql
@@ -1,14 +1,20 @@
 create database visitors;
 use visitors;
-create user 'brooklyn' identified by 'br00k11n';
+
+# not necessary to create user if we grant (and not supported in some dialects)
+# create user 'brooklyn' identified by 'br00k11n';
+
 grant usage on *.* to 'brooklyn'@'%' identified by 'br00k11n';
+
 # ''@localhost is sometimes set up, overriding brooklyn@'%', so do a second explicit grant
 grant usage on *.* to 'brooklyn'@'localhost' identified by 'br00k11n';
+
 grant all privileges on visitors.* to 'brooklyn'@'%';
+
 flush privileges;
 
 CREATE TABLE MESSAGES (
-        id INT NOT NULL AUTO_INCREMENT,
+        id BIGINT NOT NULL AUTO_INCREMENT,
         NAME VARCHAR(30) NOT NULL,
         MESSAGE VARCHAR(400) NOT NULL,
         PRIMARY KEY (ID)


[06/50] brooklyn-library git commit: Change ResourceUtils to use static create method and cache in driver classes

Posted by he...@apache.org.
Change ResourceUtils to use static create method and cache in driver classes


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

Branch: refs/heads/0.6.0
Commit: 36604f72a0bb8cb19542cf1195125acfabd39204
Parents: e613ed8
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Mon Oct 14 22:39:03 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Oct 30 11:19:59 2013 +0000

----------------------------------------------------------------------
 .../brooklyn/demo/CumulusRDFApplication.java    |  2 +-
 .../demo/WebClusterDatabaseExampleApp.java      |  4 +-
 .../entity/database/mysql/MySqlSshDriver.java   |  6 +--
 .../postgresql/PostgreSqlNodeChefImpl.java      |  2 +-
 .../postgresql/PostgreSqlSshDriver.java         |  3 +-
 .../database/rubyrep/RubyRepSshDriver.java      |  5 +--
 .../messaging/activemq/ActiveMQSshDriver.java   |  4 +-
 .../nosql/cassandra/CassandraNodeSshDriver.java |  2 +-
 .../geoscaling/GeoscalingScriptGenerator.java   |  4 +-
 .../entity/proxy/nginx/NginxControllerImpl.java |  4 +-
 .../entity/webapp/jboss/JBoss7SshDriver.java    | 40 ++++++++++----------
 .../GeoscalingScriptGeneratorTest.groovy        |  4 +-
 12 files changed, 39 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
index 3d63a59..6fb69de 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
@@ -116,7 +116,7 @@ public class CumulusRDFApplication extends AbstractApplication {
                     // Process the YAML template given in the application config
                     String url = Entities.getRequiredUrlConfig(CumulusRDFApplication.this, CUMULUS_RDF_CONFIG_URL);
                     Map<String, Object> config = MutableMap.<String, Object>of("cassandraHostname", clusterEndpoint.getHostText(), "cassandraThriftPort", clusterEndpoint.getPort());
-                    String contents = TemplateProcessor.processTemplateContents(new ResourceUtils(this).getResourceAsString(url), config);
+                    String contents = TemplateProcessor.processTemplateContents(ResourceUtils.create(this).getResourceAsString(url), config);
 
                     // Copy the file contents to the remote machine
                     DynamicTasks.queue(SshEffectorTasks.put("/tmp/cumulus.yaml").contents(contents));

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java
index f961634..34180f7 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java
@@ -63,9 +63,9 @@ public class WebClusterDatabaseExampleApp extends AbstractApplication implements
     
     public static final String DEFAULT_LOCATION = "localhost";
 
-    public static final String DEFAULT_WAR_PATH = new ResourceUtils(WebClusterDatabaseExampleApp.class).
+    public static final String DEFAULT_WAR_PATH = ResourceUtils.create(WebClusterDatabaseExampleApp.class)
             // take this war, from the classpath, or via maven if not on the classpath
-            firstAvailableUrl(
+            .firstAvailableUrl(
                     "classpath://hello-world-sql-webapp.war",
                     BrooklynMavenArtifacts.localUrl("example", "brooklyn-example-hello-world-sql-webapp", "war"))
             .or("classpath://hello-world-sql-webapp.war");

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java
index 606244f..427b3ed 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java
@@ -2,6 +2,7 @@ package brooklyn.entity.database.mysql;
 
 import static brooklyn.util.GroovyJavaMethods.elvis;
 import static brooklyn.util.GroovyJavaMethods.truth;
+import static brooklyn.util.ssh.BashCommands.commandsToDownloadUrlsAs;
 import static brooklyn.util.ssh.BashCommands.installPackage;
 import static brooklyn.util.ssh.BashCommands.ok;
 import static java.lang.String.format;
@@ -22,7 +23,6 @@ import brooklyn.entity.drivers.downloads.DownloadResolver;
 import brooklyn.location.OsDetails;
 import brooklyn.location.basic.BasicOsDetails.OsVersions;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.ssh.BashCommands;
 import brooklyn.util.text.ComparableVersion;
@@ -101,7 +101,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
         // these deps are needed on some OS versions but others don't need them so ignore failures (ok(...))
         commands.add(ok(installPackage(ImmutableMap.of("yum", "libaio", "apt", "ia32-libs"), null)));
         commands.add("echo finished installing extra packages");
-        commands.addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs));
+        commands.addAll(commandsToDownloadUrlsAs(urls, saveAs));
         commands.add(format("tar xfvz %s", saveAs));
 
         newScript(INSTALLING).
@@ -146,7 +146,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
         Reader creationScript;
         String url = entity.getConfig(MySqlNode.CREATION_SCRIPT_URL);
         if (!Strings.isBlank(url))
-            creationScript = new InputStreamReader(new ResourceUtils(entity).getResourceFromUrl(url));
+            creationScript = new InputStreamReader(resource.getResourceFromUrl(url));
         else creationScript =
                 new StringReader((String) elvis(entity.getConfig(MySqlNode.CREATION_SCRIPT_CONTENTS), ""));
         getMachine().copyTo(creationScript, getRunDir() + "/creation-script.cnf");

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java
index 32bd06a..1bb8645 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java
@@ -73,7 +73,7 @@ public class PostgreSqlNodeChefImpl extends EffectorStartableImpl implements Pos
             String creationScript;
             String creationScriptUrl = entity().getConfig(PostgreSqlNode.CREATION_SCRIPT_URL);
             if (creationScriptUrl != null)
-                creationScript = new ResourceUtils(entity()).getResourceAsString(creationScriptUrl);
+                creationScript = ResourceUtils.create(entity()).getResourceAsString(creationScriptUrl);
             else creationScript = entity().getConfig(PostgreSqlNode.CREATION_SCRIPT_CONTENTS);
             entity().invoke(PostgreSqlNodeChefImpl.EXECUTE_SCRIPT, 
                     ConfigBag.newInstance().configure(ExecuteScriptEffectorBody.SCRIPT, creationScript).getAllConfig()).getUnchecked();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
index 617e177..8dda553 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
@@ -13,7 +13,6 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.entity.basic.AbstractSoftwareProcessSshDriver;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.net.Urls;
@@ -129,7 +128,7 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver
         String creationScriptUrl = entity.getConfig(PostgreSqlNode.CREATION_SCRIPT_URL);
         Reader creationScript;
         if (creationScriptUrl != null)
-            creationScript = new InputStreamReader(new ResourceUtils(entity).getResourceFromUrl(creationScriptUrl));
+            creationScript = new InputStreamReader(resource.getResourceFromUrl(creationScriptUrl));
         else creationScript = new StringReader(entity.getConfig(PostgreSqlNode.CREATION_SCRIPT_CONTENTS));
 
         getMachine().copyTo(creationScript, getRunDir() + "/creation-script.sql");

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
index 44c1b9e..a732263 100644
--- a/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
+++ b/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
@@ -1,6 +1,6 @@
 package brooklyn.entity.database.rubyrep;
 
-import static java.lang.String.format;
+import static java.lang.String.*;
 
 import java.io.InputStreamReader;
 import java.io.Reader;
@@ -18,7 +18,6 @@ import brooklyn.entity.basic.EntityLocal;
 import brooklyn.entity.database.mysql.MySqlSshDriver;
 import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.ssh.BashCommands;
 
@@ -68,7 +67,7 @@ public class RubyRepSshDriver extends JavaSoftwareProcessSshDriver implements Ru
         Reader configContents;
         if (configScriptUrl != null) {
             // If set accept as-is
-            configContents = new InputStreamReader(new ResourceUtils(entity).getResourceFromUrl(configScriptUrl));
+            configContents = new InputStreamReader(resource.getResourceFromUrl(configScriptUrl));
         } else {
             String configScriptContents = processTemplate(entity.getAttribute(RubyRepNode.TEMPLATE_CONFIGURATION_URL));
             configContents = new StringReader(configScriptContents);

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java
index 90d9739..7079b5a 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java
@@ -1,6 +1,6 @@
 package brooklyn.entity.messaging.activemq;
 
-import static java.lang.String.format;
+import static java.lang.String.*;
 
 import java.io.ByteArrayInputStream;
 import java.util.LinkedList;
@@ -9,9 +9,7 @@ import java.util.Map;
 
 import brooklyn.entity.drivers.downloads.DownloadResolver;
 import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
-import brooklyn.entity.java.JmxSupport;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.net.Networking;
 import brooklyn.util.ssh.BashCommands;

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
index 25b25e7..1d54fad 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java
@@ -167,7 +167,7 @@ public class CassandraNodeSshDriver extends JavaSoftwareProcessSshDriver impleme
             int lastSlashIndex = customSnitchJarUrl.lastIndexOf("/");
             String customSnitchJarName = (lastSlashIndex > 0) ? customSnitchJarUrl.substring(lastSlashIndex+1) : "customBrooklynSnitch.jar";
             String jarDestinationFile = String.format("%s/lib/%s", getRunDir(), customSnitchJarName);
-            InputStream customSnitchJarStream = checkNotNull(new ResourceUtils(entity).getResourceFromUrl(customSnitchJarUrl), "%s could not be loaded", customSnitchJarUrl);
+            InputStream customSnitchJarStream = checkNotNull(resource.getResourceFromUrl(customSnitchJarUrl), "%s could not be loaded", customSnitchJarUrl);
             try {
                 getMachine().copyTo(customSnitchJarStream, jarDestinationFile);
             } finally {

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java b/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java
index 518c885..b3b6bcb 100644
--- a/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java
+++ b/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java
@@ -11,7 +11,7 @@ import brooklyn.util.ResourceUtils;
 import brooklyn.util.javalang.JavaClassNames;
 import brooklyn.util.text.Strings;
 
-class GeoscalingScriptGenerator {
+public class GeoscalingScriptGenerator {
     
     private static final String PHP_SCRIPT_TEMPLATE_RESOURCE = JavaClassNames.resolveClasspathUrl(GeoscalingScriptGenerator.class, "template.php");
     private static final String HOSTS_DECLARATIONS_MARKER = "/* HOST DECLARATIONS TO BE SUBSTITUTED HERE */";
@@ -23,7 +23,7 @@ class GeoscalingScriptGenerator {
     }
     
     public static String generateScriptString(Date generationTime, Collection<HostGeoInfo> hosts) {
-        String template = new ResourceUtils(GeoscalingScriptGenerator.class).getResourceAsString(PHP_SCRIPT_TEMPLATE_RESOURCE);
+        String template = ResourceUtils.create(GeoscalingScriptGenerator.class).getResourceAsString(PHP_SCRIPT_TEMPLATE_RESOURCE);
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'UTC'");
         sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
         String datestamp = sdf.format(generationTime);

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
index d30b95f..8f730de 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
@@ -208,14 +208,14 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
         if (!Strings.isEmpty(ssl.getCertificateSourceUrl())) {
             String certificateDestination = Strings.isEmpty(ssl.getCertificateDestination()) ? driver.getRunDir() + "/conf/" + id + ".crt" : ssl.getCertificateDestination();
             driver.getMachine().copyTo(ImmutableMap.of("permissions", "0400"),
-                    new ResourceUtils(this).getResourceFromUrl(ssl.getCertificateSourceUrl()),
+                    ResourceUtils.create(this).getResourceFromUrl(ssl.getCertificateSourceUrl()),
                     certificateDestination);
         }
 
         if (!Strings.isEmpty(ssl.getKeySourceUrl())) {
             String keyDestination = Strings.isEmpty(ssl.getKeyDestination()) ? driver.getRunDir() + "/conf/" + id + ".key" : ssl.getKeyDestination();
             driver.getMachine().copyTo(ImmutableMap.of("permissions", "0400"),
-                    new ResourceUtils(this).getResourceFromUrl(ssl.getKeySourceUrl()),
+                    ResourceUtils.create(this).getResourceFromUrl(ssl.getKeySourceUrl()),
                     keyDestination);
         }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
index 62c9803..540fd4d 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
@@ -1,39 +1,41 @@
 package brooklyn.entity.webapp.jboss;
 
+import static java.lang.String.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.SoftwareProcess;
 import brooklyn.entity.drivers.downloads.DownloadResolver;
 import brooklyn.entity.webapp.JavaWebAppSshDriver;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.net.Networking;
 import brooklyn.util.ssh.BashCommands;
+
 import com.google.common.base.Charsets;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.hash.Hashing;
 import com.google.common.io.BaseEncoding;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import static java.lang.String.format;
 
 public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver {
 
     public static final Logger LOG = LoggerFactory.getLogger(JBoss7SshDriver.class);
 
     /*
-      * TODO
-      * - expose log file location, or even support accessing them dynamically
-      * - more configurability of config files, java memory, etc
-      */
+     * TODO
+     * - expose log file location, or even support accessing them dynamically
+     * - more configurability of config files, java memory, etc
+     */
 
     public static final String SERVER_TYPE = "standalone";
     private static final String CONFIG_FILE = "standalone-brooklyn.xml";
@@ -110,13 +112,13 @@ public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver
     }
     
     public void install() {
-        DownloadResolver resolver = entity.getManagementContext().getEntityDownloadsManager().newDownloader(this);
+        DownloadResolver resolver = Entities.newDownloader(this);
         List<String> urls = resolver.getTargets();
         String saveAs = resolver.getFilename();
         expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("jboss-as-%s", getVersion()));
         
         List<String> commands = new LinkedList<String>();
-        commands.addAll(BashCommands.downloadUrlAs(urls, saveAs));
+        commands.addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs));
         commands.add(BashCommands.INSTALL_TAR);
         commands.add("tar xzfv " + saveAs);
 
@@ -186,7 +188,7 @@ public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver
                 throw new NullPointerException("keystore URL must be specified if using HTTPS for "+entity);
             }
             String destinationSslKeystoreFile = getSslKeystoreFile();
-            InputStream keystoreStream = new ResourceUtils(this).getResourceFromUrl(keystoreUrl);
+            InputStream keystoreStream = resource.getResourceFromUrl(keystoreUrl);
             getMachine().copyTo(keystoreStream, destinationSslKeystoreFile);
         }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy
index 16e925c..d296ce8 100644
--- a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy
@@ -28,10 +28,10 @@ class GeoscalingScriptGeneratorTest {
         Date generationTime = new Date(0);
         String generatedScript = GeoscalingScriptGenerator.generateScriptString(generationTime, HOSTS);
         assertTrue(generatedScript.contains("1.2.3"));
-        String expectedScript = new ResourceUtils(this).getResourceAsString("brooklyn/entity/dns/geoscaling/expectedScript.php");
+        String expectedScript = ResourceUtils.create(this).getResourceAsString("brooklyn/entity/dns/geoscaling/expectedScript.php");
         assertEquals(expectedScript, generatedScript);
         //also make sure leading slash is allowed
-        String expectedScript2 = new ResourceUtils(this).getResourceAsString("/brooklyn/entity/dns/geoscaling/expectedScript.php");
+        String expectedScript2 = ResourceUtils.create(this).getResourceAsString("/brooklyn/entity/dns/geoscaling/expectedScript.php");
         assertEquals(expectedScript, generatedScript);
     }
     


[23/50] brooklyn-library git commit: Merge pull request #994 from Nakomis/messaging-example

Posted by he...@apache.org.
Merge pull request #994 from Nakomis/messaging-example

Messaging example

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

Branch: refs/heads/0.6.0
Commit: b462f8d8bd46ab33d58099d029543e93e021db4d
Parents: f01111d 4c2c535
Author: Aled Sage <al...@gmail.com>
Authored: Tue Nov 5 01:04:30 2013 -0800
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Nov 5 01:04:30 2013 -0800

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/Publish.java     |  2 +-
 .../src/main/java/brooklyn/demo/Subscribe.java   | 19 ++++++++++++-------
 .../entity/messaging/qpid/QpidBrokerImpl.java    |  1 +
 3 files changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------



[20/50] brooklyn-library git commit: Changed pubsub message text to be in line with new Subscribe output

Posted by he...@apache.org.
Changed pubsub message text to be in line with new Subscribe output


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

Branch: refs/heads/0.6.0
Commit: 3355eb22b5bdf557dcbcea094e3fa3e97d718850
Parents: c59df12
Author: Martin Harris <gi...@nakomis.com>
Authored: Mon Nov 4 18:12:56 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Mon Nov 4 18:12:56 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/Publish.java                       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3355eb22/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Publish.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Publish.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Publish.java
index e07073d..d94edb5 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Publish.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/Publish.java
@@ -37,7 +37,7 @@ public class Publish {
 
 	        // Send 100 messages
 	        for (int n = 0; n < 100; n++) {
-	            String body = String.format("test message %03d", n);
+	            String body = String.format("test message %03d", n+1);
 	            TextMessage message = session.createTextMessage(body);
 	            messageProducer.send(message);
 	            System.out.printf("Sent message %s\n", body);


[25/50] brooklyn-library git commit: Adds ControlledDynamicWebAppCluster.WEB_CLUSTER_SPEC

Posted by he...@apache.org.
Adds ControlledDynamicWebAppCluster.WEB_CLUSTER_SPEC


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

Branch: refs/heads/0.6.0
Commit: 95cec8abca067b0f1db632889c17b9d4521cc012
Parents: b6eb7c0
Author: Aled Sage <al...@gmail.com>
Authored: Wed Nov 6 15:23:26 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Nov 6 15:30:05 2013 +0000

----------------------------------------------------------------------
 .../webapp/ControlledDynamicWebAppCluster.java  |  8 ++++--
 .../ControlledDynamicWebAppClusterImpl.java     | 24 ++++++++++++----
 .../ControlledDynamicWebAppClusterTest.java     | 30 +++++++++++++++++++-
 3 files changed, 54 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/95cec8ab/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 dd1990f..263dcbc 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
@@ -80,11 +80,11 @@ public interface ControlledDynamicWebAppCluster extends Entity, Startable, Resiz
 
     @SetFromFlag("controller")
     public static BasicAttributeSensorAndConfigKey<LoadBalancer> CONTROLLER = new BasicAttributeSensorAndConfigKey<LoadBalancer>(
-        LoadBalancer.class, "controlleddynamicweballcluster.controller", "Controller for the cluster; if null a default will created");
+        LoadBalancer.class, "controlleddynamicweballcluster.controller", "Controller for the cluster; if null a default will created (using controllerSpec)");
 
     @SetFromFlag("controllerSpec")
     public static BasicAttributeSensorAndConfigKey<EntitySpec<? extends LoadBalancer>> CONTROLLER_SPEC = new BasicAttributeSensorAndConfigKey(
-            EntitySpec.class, "controlleddynamicweballcluster.controllerSpec", "Spec for creating the cluster (if one not supplied explicitly); if null an NGINX instance will be created");
+            EntitySpec.class, "controlleddynamicweballcluster.controllerSpec", "Spec for creating the controller (if one not supplied explicitly); if null an NGINX instance will be created");
 
     /** factory (or closure) to create the web server, given flags */
     @SetFromFlag("factory")
@@ -96,6 +96,10 @@ public interface ControlledDynamicWebAppCluster extends Entity, Startable, Resiz
     public static BasicAttributeSensorAndConfigKey<EntitySpec<? extends WebAppService>> MEMBER_SPEC = new BasicAttributeSensorAndConfigKey(
             EntitySpec.class, DynamicCluster.MEMBER_SPEC.getName(), "Spec for web server entiites to be created");
 
+    @SetFromFlag("webClusterSpec")
+    public static BasicAttributeSensorAndConfigKey<EntitySpec<? extends DynamicWebAppCluster>> WEB_CLUSTER_SPEC = new BasicAttributeSensorAndConfigKey(
+            EntitySpec.class, "controlleddynamicweballcluster.webClusterSpec", "Spec for creating the cluster; if null a DynamicWebAppCluster will be created");
+
     public static AttributeSensor<DynamicWebAppCluster> CLUSTER = new BasicAttributeSensor<DynamicWebAppCluster>(
             DynamicWebAppCluster.class, "controlleddynamicweballcluster.cluster", "Underlying web-app cluster");
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/95cec8ab/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 dcb5f32..c177a34 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
@@ -57,6 +57,7 @@ public class ControlledDynamicWebAppClusterImpl extends AbstractEntity implement
         ConfigToAttributes.apply(this, MEMBER_SPEC);
         ConfigToAttributes.apply(this, CONTROLLER);
         ConfigToAttributes.apply(this, CONTROLLER_SPEC);
+        ConfigToAttributes.apply(this, WEB_CLUSTER_SPEC);
         
         ConfigurableEntityFactory<? extends WebAppService> webServerFactory = getAttribute(FACTORY);
         EntitySpec<? extends WebAppService> webServerSpec = getAttribute(MEMBER_SPEC);
@@ -68,14 +69,27 @@ public class ControlledDynamicWebAppClusterImpl extends AbstractEntity implement
         
         log.debug("creating cluster child for {}", this);
         // Note relies on initial_size being inherited by DynamicWebAppCluster, because key id is identical
-        Map<String,Object> flags;
+        EntitySpec<? extends DynamicWebAppCluster> webClusterSpec = getAttribute(WEB_CLUSTER_SPEC);
+        Map<String,Object> webClusterFlags;
         if (webServerSpec != null) {
-            flags = MutableMap.<String,Object>of("memberSpec", webServerSpec);
+            webClusterFlags = MutableMap.<String,Object>of("memberSpec", webServerSpec);
         } else {
-            flags = MutableMap.<String,Object>of("factory", webServerFactory);
+            webClusterFlags = MutableMap.<String,Object>of("factory", webServerFactory);
         }
-        DynamicWebAppCluster cluster = addChild(EntitySpec.create(DynamicWebAppCluster.class)
-                .configure(flags));
+        if (webClusterSpec == null) {
+            log.debug("creating default web cluster spec for {}", this);
+            webClusterSpec = EntitySpec.create(DynamicWebAppCluster.class);
+        }
+        boolean hasMemberSpec = webClusterSpec.getConfig().containsKey(DynamicWebAppCluster.MEMBER_SPEC) || webClusterSpec.getFlags().containsKey("memberSpec");
+        boolean hasMemberFactory = webClusterSpec.getConfig().containsKey(DynamicWebAppCluster.FACTORY) || webClusterSpec.getFlags().containsKey("factory");
+        if (!(hasMemberSpec || hasMemberFactory)) {
+            webClusterSpec.configure(webClusterFlags);
+        } else {
+            log.warn("In {}, not setting cluster's {} because already set on webClusterSpec", new Object[] {this, webClusterFlags.keySet()});
+        }
+        setAttribute(WEB_CLUSTER_SPEC, webClusterSpec);
+        
+        DynamicWebAppCluster cluster = addChild(webClusterSpec);
         if (Entities.isManaged(this)) Entities.manage(cluster);
         setAttribute(CLUSTER, cluster);
         

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/95cec8ab/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 7a5a9ee..8128ccd 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
@@ -15,10 +15,10 @@ import org.testng.annotations.Test;
 import brooklyn.entity.basic.ApplicationBuilder;
 import brooklyn.entity.basic.BasicConfigurableEntityFactory;
 import brooklyn.entity.basic.Entities;
-import brooklyn.entity.proxy.AbstractController;
 import brooklyn.entity.proxy.LoadBalancer;
 import brooklyn.entity.proxy.nginx.NginxController;
 import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.webapp.jboss.JBoss7Server;
 import brooklyn.entity.webapp.jboss.JBoss7ServerFactory;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.EntityTestUtils;
@@ -136,4 +136,32 @@ public class ControlledDynamicWebAppClusterTest {
         EntityTestUtils.assertAttributeEqualsEventually(MutableMap.of("timeout", TIMEOUT_MS), cluster, ControlledDynamicWebAppCluster.SERVICE_UP, expectedServiceUp);
     }
     
+    @Test(groups="Integration")
+    public void testUsesCustomWebClusterSpec() {
+        ControlledDynamicWebAppCluster cluster = app.createAndManageChild(EntitySpec.create(ControlledDynamicWebAppCluster.class)
+                .configure("initialSize", 0)
+                .configure(ControlledDynamicWebAppCluster.WEB_CLUSTER_SPEC, EntitySpec.create(DynamicWebAppCluster.class)
+                        .displayName("mydisplayname")));
+        app.start(locs);
+
+        assertEquals(cluster.getCluster().getDisplayName(), "mydisplayname");
+    }
+    
+    @Test(groups="Integration")
+    public void testCustomWebClusterSpecGetsMemberSpec() {
+        ControlledDynamicWebAppCluster cluster = app.createAndManageChild(EntitySpec.create(ControlledDynamicWebAppCluster.class)
+                .configure("initialSize", 1)
+                .configure(ControlledDynamicWebAppCluster.MEMBER_SPEC, EntitySpec.create(JBoss7Server.class)
+                        .configure(JBoss7Server.ROOT_WAR, warUrl.toString()))
+                .configure(ControlledDynamicWebAppCluster.WEB_CLUSTER_SPEC, EntitySpec.create(DynamicWebAppCluster.class)
+                        .displayName("mydisplayname")));
+        app.start(locs);
+
+        String url = cluster.getController().getAttribute(NginxController.ROOT_URL);
+        HttpTestUtils.assertContentEventuallyContainsText(url, "Hello");
+
+        // and make sure it really was using our custom spec
+        assertEquals(cluster.getCluster().getDisplayName(), "mydisplayname");
+
+    }
 }


[03/50] brooklyn-library git commit: Initial MariaDB entity, largely a clone of the existing mySQL entity.

Posted by he...@apache.org.
Initial MariaDB entity, largely a clone of the existing mySQL entity.

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

Branch: refs/heads/0.6.0
Commit: 2e0516df17a9597b71f6b36d1c13483cc57676e1
Parents: 25b37b3
Author: Alasdair Hodge <al...@cloudsoftcorp.com>
Authored: Mon Oct 28 14:01:46 2013 +0000
Committer: Alasdair Hodge <al...@cloudsoftcorp.com>
Committed: Mon Oct 28 19:14:01 2013 +0000

----------------------------------------------------------------------
 .../entity/database/mariadb/MariaDbDriver.java  |  10 +
 .../entity/database/mariadb/MariaDbNode.java    |  84 ++++++++
 .../database/mariadb/MariaDbNodeImpl.java       | 119 ++++++++++
 .../database/mariadb/MariaDbSshDriver.java      | 216 +++++++++++++++++++
 .../brooklyn/entity/database/mariadb/my.cnf     |  19 ++
 .../src/main/resources/mariadb-logo-180x119.png | Bin 0 -> 9659 bytes
 .../mariadb/MariaDbIntegrationTest.groovy       | 105 +++++++++
 .../database/mariadb/MariaDbLiveEc2Test.java    |  27 +++
 .../mariadb/MariaDbLiveRackspaceTest.java       |  80 +++++++
 9 files changed, 660 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbDriver.java b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbDriver.java
new file mode 100644
index 0000000..3061f5e
--- /dev/null
+++ b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbDriver.java
@@ -0,0 +1,10 @@
+package brooklyn.entity.database.mariadb;
+
+import brooklyn.entity.basic.SoftwareProcessDriver;
+
+/**
+ * The {@link SoftwareProcessDriver} for MariaDB.
+ */
+public interface MariaDbDriver extends SoftwareProcessDriver {
+    public String getStatusCmd();
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNode.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNode.java b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNode.java
new file mode 100644
index 0000000..256ce8a
--- /dev/null
+++ b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNode.java
@@ -0,0 +1,84 @@
+package brooklyn.entity.database.mariadb;
+
+import brooklyn.catalog.Catalog;
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.basic.ConfigKeys;
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.database.DatabaseNode;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.entity.trait.HasShortName;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey;
+import brooklyn.event.basic.MapConfigKey;
+import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
+import brooklyn.event.basic.Sensors;
+import brooklyn.location.basic.PortRanges;
+import brooklyn.util.flags.SetFromFlag;
+
+@Catalog(name="MariaDB Node", description="MariaDB is an open source relational database management system (RDBMS)", iconUrl="classpath:///mariadb-logo-180x119.png")
+@ImplementedBy(MariaDbNodeImpl.class)
+public interface MariaDbNode extends DatabaseNode, HasShortName {
+
+    @SetFromFlag("version")
+    public static final ConfigKey<String> SUGGESTED_VERSION =
+        ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "5.5.33a");
+
+    // https://downloads.mariadb.org/interstitial/mariadb-5.5.33a/kvm-bintar-hardy-amd64/mariadb-5.5.33a-linux-x86_64.tar.gz/from/http://mirrors.coreix.net/mariadb
+    // above link points to a "donate" page, then ultimately downloads the artifact from:
+    // 64-bit: http://mirrors.coreix.net/mariadb/mariadb-5.5.33a/kvm-bintar-hardy-amd64/mariadb-5.5.33a-linux-x86_64.tar.gz
+    // 32-bit: http://mirrors.coreix.net/mariadb/mariadb-5.5.33a/kvm-bintar-hardy-x86/mariadb-5.5.33a-linux-i686.tar.gz
+
+    @SetFromFlag("downloadUrl")
+    public static final BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new StringAttributeSensorAndConfigKey(
+          Attributes.DOWNLOAD_URL, "${driver.mirrorUrl}/mariadb-${version}/${driver.downloadParentDir}/mariadb-${version}-${driver.osTag}.tar.gz");
+
+    /** download mirror, if desired */
+    @SetFromFlag("mirrorUrl")
+    public static final ConfigKey<String> MIRROR_URL = ConfigKeys.newStringConfigKey("mariadb.install.mirror.url", "URL of mirror",
+        "http://mirrors.coreix.net/mariadb/"
+     );
+
+    @SetFromFlag("port")
+    public static final PortAttributeSensorAndConfigKey MARIADB_PORT =
+        new PortAttributeSensorAndConfigKey("mariadb.port", "MariaDB port", PortRanges.fromString("3306, 13306+"));
+
+    @SetFromFlag("creationScriptContents")
+    public static final ConfigKey<String> CREATION_SCRIPT_CONTENTS =
+        ConfigKeys.newStringConfigKey("mariadb.creation.script.contents", "MariaDB creation script (SQL contents)", "");
+
+    @SetFromFlag("creationScriptUrl")
+    public static final ConfigKey<String> CREATION_SCRIPT_URL =
+        ConfigKeys.newStringConfigKey("mariadb.creation.script.url", "URL where MariaDB creation script can be found", "");
+
+    @SetFromFlag("dataDir")
+    public static final ConfigKey<String> DATA_DIR = ConfigKeys.newStringConfigKey(
+        "mariadb.datadir", "Directory for writing data files", null);
+
+    @SetFromFlag("serverConf")
+    public static final MapConfigKey<Object> MARIADB_SERVER_CONF = new MapConfigKey<Object>(
+        Object.class, "mariadb.server.conf", "Configuration options for MariaDB server");
+
+    public static final ConfigKey<Object> MARIADB_SERVER_CONF_LOWER_CASE_TABLE_NAMES =
+        MARIADB_SERVER_CONF.subKey("lower_case_table_names", "See MariaDB (or MySQL!) guide. Set 1 to ignore case in table names (useful for OS portability)");
+
+    @SetFromFlag("password")
+    public static final StringAttributeSensorAndConfigKey PASSWORD = new StringAttributeSensorAndConfigKey(
+        "mariadb.password", "Database admin password (or randomly generated if not set)", null);
+
+    @SetFromFlag("socketUid")
+    public static final StringAttributeSensorAndConfigKey SOCKET_UID = new StringAttributeSensorAndConfigKey(
+        "mariadb.socketUid", "Socket uid, for use in file /tmp/mysql.sock.<uid>.3306 (or randomly generated if not set)", null);
+
+    public static final AttributeSensor<String> MARIADB_URL = DB_URL;
+
+    @SetFromFlag("configurationTemplateUrl")
+    static final BasicAttributeSensorAndConfigKey<String> TEMPLATE_CONFIGURATION_URL = new StringAttributeSensorAndConfigKey(
+        "mariadb.template.configuration.url", "Template file (in freemarker format) for the my.cnf file",
+        "classpath://brooklyn/entity/database/mariadb/my.cnf");
+
+    public static final AttributeSensor<Double> QUERIES_PER_SECOND_FROM_MARIADB =
+        Sensors.newDoubleSensor("mariadb.queries.perSec.fromMariadb");
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
new file mode 100644
index 0000000..e370367
--- /dev/null
+++ b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
@@ -0,0 +1,119 @@
+package brooklyn.entity.database.mariadb;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.event.feed.ssh.SshFeed;
+import brooklyn.event.feed.ssh.SshPollConfig;
+import brooklyn.event.feed.ssh.SshPollValue;
+import brooklyn.location.Location;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.text.Identifiers;
+import brooklyn.util.text.Strings;
+import brooklyn.util.time.Duration;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+
+public class MariaDbNodeImpl extends SoftwareProcessImpl implements MariaDbNode {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MariaDbNodeImpl.class);
+
+    private SshFeed feed;
+
+    public MariaDbNodeImpl() {
+    }
+
+    public MariaDbNodeImpl(Entity parent) {
+        this(MutableMap.of(), parent);
+    }
+
+    public MariaDbNodeImpl(Map<?,?> flags) {
+        super(flags, null);
+    }
+
+    public MariaDbNodeImpl(Map<?,?> flags, Entity parent) {
+        super(flags, parent);
+    }
+
+    @Override
+    public Class<?> getDriverInterface() {
+        return MariaDbDriver.class;
+    }
+
+    @Override
+    public MariaDbDriver getDriver() {
+        return (MariaDbDriver) super.getDriver();
+    }
+
+    @Override
+    protected void connectSensors() {
+        super.connectSensors();
+        setAttribute(DB_URL, String.format("mysql://%s:%s/", getAttribute(HOSTNAME), getAttribute(MARIADB_PORT)));
+
+        /*        
+         * TODO status gives us things like:
+         *   Uptime: 2427  Threads: 1  Questions: 581  Slow queries: 0  Opens: 53  Flush tables: 1  Open tables: 35  Queries per second avg: 0.239
+         * So can extract lots of sensors from that.
+         */
+        Location machine = Iterables.get(getLocations(), 0, null);
+
+        if (machine instanceof SshMachineLocation) {
+            String cmd = getDriver().getStatusCmd();
+            feed = SshFeed.builder()
+                    .entity(this)
+                    .period(Duration.FIVE_SECONDS)
+                    .machine((SshMachineLocation) machine)
+                    .poll(new SshPollConfig<Boolean>(SERVICE_UP)
+                            .command(cmd)
+                            .setOnSuccess(true)
+                            .setOnFailureOrException(false))
+                    .poll(new SshPollConfig<Double>(QUERIES_PER_SECOND_FROM_MARIADB)
+                            .command(cmd)
+                            .onSuccess(new Function<SshPollValue, Double>() {
+                                public Double apply(SshPollValue input) {
+                                    String q = Strings.getFirstWordAfter(input.getStdout(), "Queries per second avg:");
+                                    return (q == null) ? null : Double.parseDouble(q);
+                                }})
+                            .setOnFailureOrException(null) )
+                    .build();
+        } else {
+            LOG.warn("Location(s) %s not an ssh-machine location, so not polling for status; setting serviceUp immediately", getLocations());
+            setAttribute(SERVICE_UP, true);
+        }
+    }
+
+    @Override
+    protected void disconnectSensors() {
+        if (feed != null) feed.stop();
+    }
+
+    public int getPort() {
+        return getAttribute(MARIADB_PORT);
+    }
+
+    public String getSocketUid() {
+        String result = getAttribute(MariaDbNode.SOCKET_UID);
+        if (Strings.isBlank(result))
+            setAttribute(MariaDbNode.SOCKET_UID, (result = Identifiers.makeRandomId(6)));
+        return result;
+    }
+
+    public String getPassword() {
+        String result = getAttribute(MariaDbNode.PASSWORD);
+        if (Strings.isBlank(result))
+            setAttribute(MariaDbNode.PASSWORD, (result = Identifiers.makeRandomId(6)));
+        return result;
+    }
+
+    @Override
+    public String getShortName() {
+        return "MariaDB";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
new file mode 100644
index 0000000..5c85903
--- /dev/null
+++ b/software/database/src/main/java/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
@@ -0,0 +1,216 @@
+package brooklyn.entity.database.mariadb;
+
+import static brooklyn.util.GroovyJavaMethods.elvis;
+import static brooklyn.util.GroovyJavaMethods.truth;
+import static brooklyn.util.ssh.BashCommands.installPackage;
+import static brooklyn.util.ssh.BashCommands.ok;
+import static java.lang.String.format;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.basic.AbstractSoftwareProcessSshDriver;
+import brooklyn.entity.basic.EntityInternal;
+import brooklyn.entity.drivers.downloads.DownloadResolver;
+import brooklyn.entity.drivers.downloads.DownloadResolverManager;
+import brooklyn.location.OsDetails;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.management.ManagementContext;
+import brooklyn.util.ResourceUtils;
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.ssh.BashCommands;
+import brooklyn.util.text.Strings;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * The SSH implementation of the {@link MariaDbDriver}.
+ */
+public class MariaDbSshDriver extends AbstractSoftwareProcessSshDriver implements MariaDbDriver {
+
+    public static final Logger log = LoggerFactory.getLogger(MariaDbSshDriver.class);
+
+    private String expandedInstallDir;
+
+    public MariaDbSshDriver(MariaDbNodeImpl entity, SshMachineLocation machine) {
+        super(entity, machine);
+    }
+
+    public String getOsTag() {
+        OsDetails os = getLocation().getOsDetails();
+        if (os == null) return "linux-i686";
+        if (os.isLinux()) return "linux-" + (os.is64bit() ? "x86_64" : "i686");
+        throw new UnsupportedOperationException("only support linux versions just now");
+    }
+
+    public String getDownloadParentDir() {
+        OsDetails os = getLocation().getOsDetails();
+        if (os == null) return "kvm-bintar-hardy-x86";
+        if (os.isLinux()) return "kvm-bintar-hardy-" + (os.is64bit() ? "amd64" : "x86");
+        throw new UnsupportedOperationException("only support linux versions just now");
+    }
+
+    public String getMirrorUrl() {
+        return entity.getConfig(MariaDbNode.MIRROR_URL);
+    }
+
+    public String getBasedir() {
+        return getExpandedInstallDir();
+    }
+
+    public String getDatadir() {
+        String result = entity.getConfig(MariaDbNode.DATA_DIR);
+        return (result == null) ? "." : result;
+    }
+
+    public String getInstallFilename() {
+        return String.format("mariadb-%s-%s.tar.gz", getVersion(), getOsTag());
+    }
+
+    private String getExpandedInstallDir() {
+        if (expandedInstallDir == null)
+            throw new IllegalStateException("'expandedInstallDir' is null; most likely install was not called");
+        return expandedInstallDir;
+    }
+
+    @Override
+    public void install() {
+        // mariadb-${version}-${driver.osTag}.tar.gz
+
+        ManagementContext managementContext = ((EntityInternal) entity).getManagementContext();
+        DownloadResolverManager downloadManager = managementContext.getEntityDownloadsManager();
+        DownloadResolver resolver = downloadManager.newDownloader(
+                this, ImmutableMap.of("filename", getInstallFilename()));
+        List<String> urls = resolver.getTargets();
+        String saveAs = resolver.getFilename();
+        expandedInstallDir = getInstallDir() + "/" + resolver.getUnpackedDirectoryName(format("mariadb-%s-%s", getVersion(), getOsTag()));
+
+        List<String> commands = new LinkedList<String>();
+        commands.add(BashCommands.INSTALL_TAR);
+        commands.add(BashCommands.INSTALL_CURL);
+
+        commands.add("echo installing extra packages");
+        commands.add(installPackage(ImmutableMap.of("yum", "libgcc_s.so.1"), null));
+        commands.add(installPackage(ImmutableMap.of("yum", "libaio.so.1 libncurses.so.5", "apt", "libaio1 libaio-dev"), null));
+        // these deps are needed on some OS versions but others don't need them so ignore failures (ok(...))
+        commands.add(ok(installPackage(ImmutableMap.of("yum", "libaio", "apt", "ia32-libs"), null)));
+        commands.add("echo finished installing extra packages");
+
+        commands.addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs));
+        commands.add(format("tar xfvz %s", saveAs));
+
+        newScript(INSTALLING).
+            body.append(commands).execute();
+    }
+
+    public MariaDbNodeImpl getEntity() { return (MariaDbNodeImpl) super.getEntity(); }
+    public int getPort() { return getEntity().getPort(); }
+    public String getSocketUid() { return getEntity().getSocketUid(); }
+    public String getPassword() { return getEntity().getPassword(); }
+
+    @Override
+    public void customize() {
+        copyDatabaseCreationScript();
+        copyDatabaseConfigScript();
+
+        newScript(CUSTOMIZING).
+            updateTaskAndFailOnNonZeroResultCode().
+            body.append(
+                "chmod 600 my.cnf",
+                getBasedir()+"/scripts/mysql_install_db "+
+                    "--basedir="+getBasedir()+" --datadir="+getDatadir()+" "+
+                    "--defaults-file=my.cnf",
+                getBasedir()+"/bin/mysqld --defaults-file=my.cnf --user=`whoami` &", //--user=root needed if we are root
+                "export MYSQL_PID=$!",
+                "sleep 20",
+                "echo launching mysqladmin",
+                getBasedir()+"/bin/mysqladmin --defaults-file=my.cnf --password= password "+getPassword(),
+                "sleep 20",
+                "echo launching mysql creation script",
+                getBasedir()+"/bin/mysql --defaults-file=my.cnf < creation-script.cnf",
+                "echo terminating mysql on customization complete",
+                "kill $MYSQL_PID"
+            ).execute();
+    }
+
+    private void copyDatabaseCreationScript() {
+        newScript(CUSTOMIZING).
+                body.append("echo copying creation script").
+                execute();  //create the directory
+
+        Reader creationScript;
+        String url = entity.getConfig(MariaDbNode.CREATION_SCRIPT_URL);
+        if (!Strings.isBlank(url))
+            creationScript = new InputStreamReader(new ResourceUtils(entity).getResourceFromUrl(url));
+        else creationScript =
+                new StringReader((String) elvis(entity.getConfig(MariaDbNode.CREATION_SCRIPT_CONTENTS), ""));
+        getMachine().copyTo(creationScript, getRunDir() + "/creation-script.cnf");
+    }
+
+    private void copyDatabaseConfigScript() {
+        newScript(CUSTOMIZING).
+                body.append("echo copying server config script").
+                execute();  //create the directory
+
+        String configScriptContents = processTemplate(entity.getAttribute(MariaDbNode.TEMPLATE_CONFIGURATION_URL));
+        Reader configContents = new StringReader(configScriptContents);
+
+        getMachine().copyTo(configContents, getRunDir() + "/my.cnf");
+    }
+
+    public String getMariaDbServerOptionsString() {
+        Map<String, Object> options = entity.getConfig(MariaDbNode.MARIADB_SERVER_CONF);
+        if (!truth(options)) return "";
+        String result = "";
+        for (Map.Entry<String, Object> entry : options.entrySet()) {
+            if("".equals(entry.getValue())){
+                result += ""+entry.getKey()+"\n";
+            }else{
+                result += ""+entry.getKey()+" = "+entry.getValue()+"\n";
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public void launch() {
+        newScript(MutableMap.of("usePidFile", true), LAUNCHING).
+            updateTaskAndFailOnNonZeroResultCode().
+            body.append(
+                format("nohup %s/bin/mysqld --defaults-file=my.cnf --user=`whoami` > out.log 2> err.log < /dev/null &", getBasedir()) 
+            ).execute();
+    }
+
+    @Override
+    public boolean isRunning() {
+        return newScript(MutableMap.of("usePidFile", false), CHECK_RUNNING)
+            .body.append(getStatusCmd())
+            .execute() == 0;
+    }
+
+    @Override
+    public void stop() {
+        newScript(MutableMap.of("usePidFile", true), STOPPING).execute();
+    }
+
+    @Override
+    public void kill() {
+        newScript(MutableMap.of("usePidFile", true), KILLING).execute();
+    }
+
+    @Override
+    public String getStatusCmd() {
+        // TODO Is this very bad, to include the password in the command being executed 
+        // (so is in `ps` listing temporarily, and in .bash_history)
+        return format("%s/bin/mysqladmin --user=%s --password=%s --socket=/tmp/mysql.sock.%s.%s status", 
+                getExpandedInstallDir(), "root", getPassword(), getSocketUid(), getPort());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/main/resources/brooklyn/entity/database/mariadb/my.cnf
----------------------------------------------------------------------
diff --git a/software/database/src/main/resources/brooklyn/entity/database/mariadb/my.cnf b/software/database/src/main/resources/brooklyn/entity/database/mariadb/my.cnf
new file mode 100644
index 0000000..f9946b1
--- /dev/null
+++ b/software/database/src/main/resources/brooklyn/entity/database/mariadb/my.cnf
@@ -0,0 +1,19 @@
+[client]
+port            = ${driver.port?c}
+socket          = /tmp/mysql.sock.${entity.socketUid}.${driver.port?c}
+user            = root
+password        = ${entity.password}
+
+# Here follows entries for some specific programs
+
+# The MariaDB server, which (confusingly) uses MySQL terminology for backwards compatibility
+[mysqld]
+port            = ${driver.port?c}
+socket          = /tmp/mysql.sock.${entity.socketUid}.${driver.port?c}
+basedir         = ${driver.basedir}
+datadir         = ${driver.datadir}
+bind-address    = 0.0.0.0
+# skip-networking
+
+# Custom configuration options
+${driver.mariaDbServerOptionsString}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/main/resources/mariadb-logo-180x119.png
----------------------------------------------------------------------
diff --git a/software/database/src/main/resources/mariadb-logo-180x119.png b/software/database/src/main/resources/mariadb-logo-180x119.png
new file mode 100644
index 0000000..cea7acd
Binary files /dev/null and b/software/database/src/main/resources/mariadb-logo-180x119.png differ

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.groovy b/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.groovy
new file mode 100644
index 0000000..7ca7986
--- /dev/null
+++ b/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.groovy
@@ -0,0 +1,105 @@
+package brooklyn.entity.database.mariadb
+
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+import org.testng.Assert
+import org.testng.annotations.AfterMethod
+import org.testng.annotations.BeforeMethod
+import org.testng.annotations.Test
+
+import brooklyn.config.BrooklynProperties
+import brooklyn.entity.basic.ApplicationBuilder
+import brooklyn.entity.basic.Entities
+import brooklyn.entity.database.VogellaExampleAccess
+import brooklyn.entity.proxying.EntitySpec
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation
+import brooklyn.management.ManagementContext
+import brooklyn.management.internal.LocalManagementContext
+import brooklyn.test.entity.TestApplication
+import brooklyn.util.collections.MutableMap
+import brooklyn.util.text.Strings
+
+/**
+ * Runs a slightly modified version of the popular Vogella MySQL tutorial,
+ * from
+ * http://www.vogella.de/articles/MySQLJava/article.html
+ */
+public class MariaDbIntegrationTest {
+
+    public static final Logger log = LoggerFactory.getLogger(MariaDbIntegrationTest.class);
+    
+    protected BrooklynProperties brooklynProperties;
+    protected ManagementContext managementContext;
+    protected TestApplication tapp;
+    
+    @BeforeMethod(alwaysRun = true)
+    public void setUp() {
+        brooklynProperties = BrooklynProperties.Factory.newDefault();
+        managementContext = new LocalManagementContext(brooklynProperties);
+        tapp = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext);
+    }
+
+    @AfterMethod(alwaysRun=true)
+    public void ensureShutDown() {
+        if (tapp != null) {
+            Entities.destroyAll(tapp.getManagementContext());
+            tapp = null;
+        }
+    }
+
+    // can start in AWS by running this -- or use brooklyn CLI/REST for most clouds, or programmatic/config for set of fixed IP machines
+    static String hostname = java.net.InetAddress.getLocalHost().getHostName()
+
+    //from http://www.vogella.de/articles/MySQLJava/article.html
+    public static final String CREATION_SCRIPT = """
+CREATE DATABASE feedback;
+CREATE USER 'sqluser'@'localhost' IDENTIFIED BY 'sqluserpw';
+GRANT USAGE ON *.* TO 'sqluser'@'localhost';
+GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'localhost';
+CREATE USER 'sqluser'@'%' IDENTIFIED BY 'sqluserpw';
+GRANT USAGE ON *.* TO 'sqluser'@'%';
+GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'%';
+CREATE USER 'sqluser'@'$hostname' IDENTIFIED BY 'sqluserpw';
+GRANT USAGE ON *.* TO 'sqluser'@'$hostname';
+GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'$hostname';
+FLUSH PRIVILEGES;
+USE feedback;
+CREATE TABLE COMMENTS (
+        id INT NOT NULL AUTO_INCREMENT, 
+        MYUSER VARCHAR(30) NOT NULL,
+        EMAIL VARCHAR(30), 
+        WEBPAGE VARCHAR(100) NOT NULL, 
+        DATUM DATE NOT NULL, 
+        SUMMARY VARCHAR(40) NOT NULL,
+        COMMENTS VARCHAR(400) NOT NULL,
+        PRIMARY KEY (ID)
+    );
+
+INSERT INTO COMMENTS values (default, 'lars', 'myemail@gmail.com','http://www.vogella.de', '2009-09-14 10:33:11', 'Summary','My first comment' );
+""";
+
+    @Test(groups = ["Integration"])
+    public void test_localhost() throws Exception {
+        String dataDir = "/tmp/mariadb-data-" + Strings.makeRandomId(8);
+        MariaDbNode mariadb = tapp.createAndManageChild(EntitySpec.create(MariaDbNode.class)
+                .configure(MariaDbNode.MARIADB_SERVER_CONF, MutableMap.of("skip-name-resolve",""))
+                .configure("creationScriptContents", CREATION_SCRIPT)
+                .configure("dataDir", dataDir));
+        LocalhostMachineProvisioningLocation location = new LocalhostMachineProvisioningLocation();
+        
+        tapp.start([location]);
+        log.info("MariaDB started");
+
+        new VogellaExampleAccess("com.mysql.jdbc.Driver", mariadb.getAttribute(MariaDbNode.DB_URL)).readModifyAndRevertDataBase();
+
+        log.info("Ran vogella MySQL example -- SUCCESS");
+
+        // Ensure the data directory was successfully overridden.
+        File dataDirFile = new File(dataDir);
+        File mariadbSubdirFile = new File(dataDirFile, "mysql");
+        Assert.assertTrue(mariadbSubdirFile.exists());
+
+        // Clean up.
+        dataDirFile.deleteDir();
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java b/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java
new file mode 100644
index 0000000..a7199a0
--- /dev/null
+++ b/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java
@@ -0,0 +1,27 @@
+package brooklyn.entity.database.mariadb;
+
+import org.testng.annotations.Test;
+
+import brooklyn.entity.AbstractEc2LiveTest;
+import brooklyn.entity.database.VogellaExampleAccess;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.location.Location;
+
+import com.google.common.collect.ImmutableList;
+
+@Test(groups = { "Live" })
+public class MariaDbLiveEc2Test extends AbstractEc2LiveTest {
+
+    @Override
+    protected void doTest(Location loc) throws Exception {
+
+        MariaDbNode mariadb = app.createAndManageChild(EntitySpec.create(MariaDbNode.class)
+                .configure("creationScriptContents", MariaDbIntegrationTest.CREATION_SCRIPT));
+
+        app.start(ImmutableList.of(loc));
+
+        new VogellaExampleAccess("com.mysql.jdbc.Driver", mariadb.getAttribute(MariaDbNode.DB_URL)).readModifyAndRevertDataBase();
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2e0516df/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveRackspaceTest.java
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveRackspaceTest.java b/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveRackspaceTest.java
new file mode 100644
index 0000000..3196b6e
--- /dev/null
+++ b/software/database/src/test/java/brooklyn/entity/database/mariadb/MariaDbLiveRackspaceTest.java
@@ -0,0 +1,80 @@
+package brooklyn.entity.database.mariadb;
+
+import org.testng.annotations.Test;
+
+import brooklyn.entity.database.VogellaExampleAccess;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.location.jclouds.JcloudsLocation;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * The MariaDbLiveTest installs MariaDb on various operating systems like Ubuntu, CentOS, Red Hat etc. To make sure that
+ * MariaDb works like expected on these Operating Systems.
+ */
+public class MariaDbLiveRackspaceTest extends MariaDbIntegrationTest {
+    @Test(groups = {"Live"})
+    public void test_Debian_6() throws Exception {
+        test("Debian 6");
+    }
+
+    @Test(groups = {"Live"})
+    public void test_Ubuntu_10_0() throws Exception {
+        test("Ubuntu 10.0");
+    }
+
+    @Test(groups = {"Live"})
+    public void test_Ubuntu_11_0() throws Exception {
+        test("Ubuntu 11.0");
+    }
+
+    @Test(groups = {"Live", "Live-sanity"})
+    public void test_Ubuntu_12_0() throws Exception {
+        test("Ubuntu 12.0");
+    }
+
+    @Test(groups = {"Live"})
+    public void test_CentOS_6_0() throws Exception {
+        test("CentOS 6.0");
+    }
+
+    @Test(groups = {"Live"})
+    public void test_CentOS_5_6() throws Exception {
+        test("CentOS 5.6");
+    }
+
+    @Test(groups = {"Live"})
+    public void test_Fedora_17() throws Exception {
+        test("Fedora 17");
+    }
+
+    @Test(groups = {"Live"})
+    public void test_Red_Hat_Enterprise_Linux_6() throws Exception {
+        test("Red Hat Enterprise Linux 6");
+    }
+
+    @Test(groups = {"Live"})
+    public void test_localhost() throws Exception {
+        super.test_localhost();
+    }
+
+    public void test(String osRegex) throws Exception {
+        MariaDbNode mariadb = tapp.createAndManageChild(EntitySpec.create(MariaDbNode.class)
+                .configure("creationScriptContents", CREATION_SCRIPT));
+
+        brooklynProperties.put("brooklyn.jclouds.rackspace-cloudservers-uk.image-name-regex", osRegex);
+        brooklynProperties.remove("brooklyn.jclouds.rackspace-cloudservers-uk.image-id");
+        brooklynProperties.put("inboundPorts", "22, 3306");
+        JcloudsLocation jcloudsLocation = (JcloudsLocation) managementContext.getLocationRegistry().resolve("jclouds:rackspace-cloudservers-uk");
+
+        tapp.start(ImmutableList.of(jcloudsLocation));
+
+        SshMachineLocation l = (SshMachineLocation) mariadb.getLocations().iterator().next();
+        //hack to get the port for mysql open; is the inbounds property not respected on rackspace??
+        l.exec(ImmutableList.of("iptables -I INPUT -p tcp --dport 3306 -j ACCEPT"));
+
+        new VogellaExampleAccess("com.mysql.jdbc.Driver", mariadb.getAttribute(MariaDbNode.DB_URL)).readModifyAndRevertDataBase();
+       
+    } 
+}


[46/50] brooklyn-library git commit: Fixed a couple of typos, use ConfigKeys.newBooleanConfigKey

Posted by he...@apache.org.
Fixed a couple of typos, use ConfigKeys.newBooleanConfigKey


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

Branch: refs/heads/0.6.0
Commit: 490fa1dac3956e4799d9f33dfa2f2dafb3818589
Parents: 5403640
Author: Martin Harris <gi...@nakomis.com>
Authored: Fri Nov 15 17:22:15 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Fri Nov 15 17:22:15 2013 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/database/postgresql/PostgreSqlNode.java     | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/490fa1da/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
index b092b5a..9c73d82 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
@@ -2,6 +2,7 @@ package brooklyn.entity.database.postgresql;
 
 import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.database.DatabaseNode;
 import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.event.basic.BasicConfigKey;
@@ -33,8 +34,8 @@ public interface PostgreSqlNode extends DatabaseNode {
     public static final PortAttributeSensorAndConfigKey POSTGRESQL_PORT =
             new PortAttributeSensorAndConfigKey("postgresql.port", "PostgreSQL port", PortRanges.fromString("5432+"));
     
-    @SetFromFlag("disconnetOnStop")
+    @SetFromFlag("disconnectOnStop")
     public static final ConfigKey<Boolean> DISCONNECT_ON_STOP =
-    new BasicConfigKey<Boolean>(Boolean.class, "postgresql.disconnecto.on.stop", "If true, PostgreSQL will immediately disconnet (pg_ctl -m immediate stop) all current connections when the node is stopped", true);
+            ConfigKeys.newBooleanConfigKey("postgresql.disconnect.on.stop", "If true, PostgreSQL will immediately disconnet (pg_ctl -m immediate stop) all current connections when the node is stopped", true);
 
 }


[07/50] brooklyn-library git commit: Merge pull request #977 from grkvlt/cumulusrdf-war

Posted by he...@apache.org.
Merge pull request #977 from grkvlt/cumulusrdf-war

Updated CumulusRDF demo application

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

Branch: refs/heads/0.6.0
Commit: 3b104fc8e7368c7cf5031e7f6adba02fa75e93fe
Parents: e613ed8 de2e685
Author: Andrew Kennedy <gr...@apache.org>
Authored: Thu Oct 31 10:03:23 2013 -0700
Committer: Andrew Kennedy <gr...@apache.org>
Committed: Thu Oct 31 10:03:23 2013 -0700

----------------------------------------------------------------------
 .../brooklyn/demo/CumulusRDFApplication.java    | 177 +++++++++++++------
 .../nosql/cassandra/CassandraCluster.java       | 101 ++++++-----
 .../entity/nosql/cassandra/CassandraFabric.java |  39 ++--
 3 files changed, 207 insertions(+), 110 deletions(-)
----------------------------------------------------------------------



[24/50] brooklyn-library git commit: Merge branch 'master' of github.com:grkvlt/brooklyn-central into feature/resourceutils-static

Posted by he...@apache.org.
Merge branch 'master' of github.com:grkvlt/brooklyn-central into feature/resourceutils-static

* 'master' of github.com:grkvlt/brooklyn-central: (37 commits)
  Replaced erroneous magic number with constant
  Fixed indentation following PR comments
  Changed pubsub message text to be in line with new Subscribe output
  Update following PR comments
  Fixed addition of elasticsearch dependency that had broken whirr/base/pom.xml
  Fixed another reference to StandaloneBrokerExample vs StandaloneQpidBrokerExample
  Fixed issue that mean example subscriber would quit after 101 messages, not 100
  Added message to the example message subscriber to clarify why it run, then quit
  Added call to super.connectSensors() in QpidBrokerImpl (its ommission meant the BROKER_URL sensor was never set)
  Updated example text to use same classname as provided class
  Updated whirr example to add whirr-elasticsearch jar to BROOKLYN_CLASSPATH and added note about including whirr-elasticsearch as a dependency
  Added whirr-elasticsearch dependency to hadoop-and-whirr example pom and test dependency to whirr/base/pom
  Updated screenshots in whirr hadoop example
  Fixed typo in whirrhadoop example
  Added explicit call to Entities.manage() for whirr entities (fixes entity display issue in web console)
  Added version-specific dependency for jclouds-enterprise (required by whirr)
  Update WideAreaCassandraCluster.java
  Update HighAvailabilityCassandraCluster.java
  fix test for removal of delete button from home page js gui
  tweak web example sql so it is more portable
  ...

Conflicts:
	examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java


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

Branch: refs/heads/0.6.0
Commit: b6eb7c0badbed671c85c7f00a6baea6372d5599c
Parents: 36604f7 b462f8d
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Tue Nov 5 13:09:12 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Tue Nov 5 13:09:12 2013 +0000

----------------------------------------------------------------------
 examples/hadoop-and-whirr/pom.xml               |   5 +
 .../src/main/java/brooklyn/demo/Publish.java    |   2 +-
 .../src/main/java/brooklyn/demo/Subscribe.java  |  19 +-
 .../brooklyn/demo/CumulusRDFApplication.java    | 178 +++++++++++++------
 .../demo/HighAvailabilityCassandraCluster.java  |  18 +-
 .../brooklyn/demo/WideAreaCassandraCluster.java |  15 +-
 .../main/resources/visitors-creation-script.sql |  10 +-
 .../test/resources/visitors-creation-script.sql |  10 +-
 .../entity/database/mysql/MySqlNodeImpl.java    |   2 -
 .../entity/messaging/qpid/QpidBrokerImpl.java   |   1 +
 .../nosql/cassandra/CassandraCluster.java       | 101 ++++++-----
 .../entity/nosql/cassandra/CassandraFabric.java |  39 ++--
 12 files changed, 272 insertions(+), 128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/b6eb7c0b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
----------------------------------------------------------------------
diff --cc examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
index 6fb69de,879fe66..af6e469
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java
@@@ -74,55 -99,65 +99,65 @@@ public class CumulusRDFApplication exte
              .description("Configure the CumulusRDF web application")
              .buildAbstract();
  
-     private CassandraCluster cassandra;
-     private TomcatServer tomcat;
- 
-     /** Create entities. */
+     private Entity cassandra;
+     private TomcatServer webapp;
+     private HostAndPort endpoint;
+ 
+     /**
+      * Create the application entities:
+      * <ul>
+      * <li>A {@link CassandraFabric} of {@link CassandraCluster}s containing {@link CassandraNode}s
+      * <li>A {@link TomcatServer}
+      * </ul>
+      */
+     @Override
      public void init() {
-         // The cassandra cluster entity
-         cassandra = addChild(EntitySpec.create(CassandraCluster.class)
-                 .configure("initialSize", getConfig(CASSANDRA_CLUSTER_SIZE))
-                 .configure("clusterName", "CumulusRDF")
-                 .configure("memberSpec", EntitySpec.create(CassandraNode.class)
-                         .configure("jmxAgentMode", UsesJmx.JmxAgentModes.JMX_RMI_CUSTOM_AGENT)
-                         .configure("jmxPort", "11099+")
-                         .configure("rmiServerPort", "9001+")
-                         .configure("thriftPort", getConfig(CASSANDRA_THRIFT_PORT))));
- 
-         // The tomcat server entity
-         tomcat = addChild(EntitySpec.create(TomcatServer.class)
-                 .configure("version", "7.0.42")
-                 .configure("jmxAgentMode", UsesJmx.JmxAgentModes.JMX_RMI_CUSTOM_AGENT)
-                 .configure("jmxPort", "11099+")
-                 .configure("rmiServerPort", "9001+")
-                 .configure("war", "classpath://cumulusrdf.war")
-                 .configure("javaSysProps", MutableMap.of("cumulusrdf.config-file", "/tmp/cumulus.yaml")));
+         // Cassandra cluster
+         EntitySpec<CassandraCluster> clusterSpec = EntitySpec.create(CassandraCluster.class)
+                 .configure(CassandraCluster.MEMBER_SPEC, EntitySpec.create(CassandraNode.class)
+                         .configure(UsesJmx.JMX_AGENT_MODE, UsesJmx.JmxAgentModes.JMX_RMI_CUSTOM_AGENT)
+                         .configure(UsesJmx.JMX_PORT, PortRanges.fromString("11099+"))
+                         .configure(UsesJmx.RMI_REGISTRY_PORT, PortRanges.fromString("9001+"))
+                         .configure(CassandraNode.THRIFT_PORT, PortRanges.fromInteger(getConfig(CASSANDRA_THRIFT_PORT)))
+                         .policy(PolicySpec.create(ServiceFailureDetector.class))
+                         .policy(PolicySpec.create(ServiceRestarter.class)
+                                 .configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, ServiceFailureDetector.ENTITY_FAILED)))
+                 .policy(PolicySpec.create(ServiceReplacer.class)
+                         .configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, ServiceRestarter.ENTITY_RESTART_FAILED));
+ 
+         if (getConfig(MULTI_REGION_FABRIC)) {
+             cassandra = addChild(EntitySpec.create(CassandraFabric.class)
+                     .configure(CassandraCluster.CLUSTER_NAME, "Brooklyn")
+                     .configure(CassandraCluster.INITIAL_SIZE, getConfig(CASSANDRA_CLUSTER_SIZE)) // per location
+                     .configure(CassandraCluster.ENDPOINT_SNITCH_NAME, "brooklyn.entity.nosql.cassandra.customsnitch.MultiCloudSnitch")
+                     .configure(CassandraNode.CUSTOM_SNITCH_JAR_URL, "classpath://brooklyn/entity/nosql/cassandra/cassandra-multicloud-snitch.jar")
+                     .configure(CassandraFabric.MEMBER_SPEC, clusterSpec));
+         } else {
+             cassandra = addChild(EntitySpec.create(clusterSpec)
+                     .configure(CassandraCluster.CLUSTER_NAME, "Brooklyn")
+                     .configure(CassandraCluster.INITIAL_SIZE, getConfig(CASSANDRA_CLUSTER_SIZE)));
+         }
+ 
+         // Tomcat web-app server
+         webapp = addChild(EntitySpec.create(TomcatServer.class)
+                 .configure(SoftwareProcess.SUGGESTED_VERSION, "7.0.42")
+                 .configure(UsesJmx.JMX_AGENT_MODE, UsesJmx.JmxAgentModes.JMX_RMI_CUSTOM_AGENT)
+                 .configure(UsesJmx.JMX_PORT, PortRanges.fromString("11099+"))
+                 .configure(UsesJmx.RMI_REGISTRY_PORT, PortRanges.fromString("9001+"))
+                 .configure(JavaWebAppService.ROOT_WAR, "classpath://cumulusrdf.war")
+                 .configure(UsesJava.JAVA_SYSPROPS, MutableMap.of("cumulusrdf.config-file", "/tmp/cumulus.yaml")));
  
          // Add an effector to tomcat to reconfigure with a new YAML config file
-         ((EntityInternal) tomcat).getMutableEntityType().addEffector(cumulusConfig, new EffectorBody<Void>() {
-             private HostAndPort clusterEndpoint;
- 
+         ((EntityInternal) webapp).getMutableEntityType().addEffector(cumulusConfig, new EffectorBody<Void>() {
              @Override
              public Void call(ConfigBag parameters) {
-                 String hostname = cassandra.getAttribute(CassandraCluster.HOSTNAME);
-                 Integer thriftPort = cassandra.getAttribute(CassandraCluster.THRIFT_PORT);
-                 HostAndPort currentEndpoint = HostAndPort.fromParts(hostname, thriftPort);
- 
-                 // Check if the cluster access point has changed
-                 if (!currentEndpoint.equals(clusterEndpoint)) {
-                     log.info("Setting cluster endpoint to {}", currentEndpoint.toString());
-                     clusterEndpoint = currentEndpoint;
- 
-                     // Process the YAML template given in the application config
-                     String url = Entities.getRequiredUrlConfig(CumulusRDFApplication.this, CUMULUS_RDF_CONFIG_URL);
-                     Map<String, Object> config = MutableMap.<String, Object>of("cassandraHostname", clusterEndpoint.getHostText(), "cassandraThriftPort", clusterEndpoint.getPort());
-                     String contents = TemplateProcessor.processTemplateContents(ResourceUtils.create(this).getResourceAsString(url), config);
- 
-                     // Copy the file contents to the remote machine
-                     DynamicTasks.queue(SshEffectorTasks.put("/tmp/cumulus.yaml").contents(contents));
-                 }
+                 // Process the YAML template given in the application config
+                 String url = Entities.getRequiredUrlConfig(CumulusRDFApplication.this, CUMULUS_RDF_CONFIG_URL);
+                 Map<String, Object> config = MutableMap.<String, Object>of("cassandraHostname", endpoint.getHostText(), "cassandraThriftPort", endpoint.getPort());
 -                String contents = TemplateProcessor.processTemplateContents(new ResourceUtils(CumulusRDFApplication.this).getResourceAsString(url), config);
++                String contents = TemplateProcessor.processTemplateContents(ResourceUtils.create(CumulusRDFApplication.this).getResourceAsString(url), config);
  
-                 return null;
+                 // Copy the file contents to the remote machine
+                 return DynamicTasks.queue(SshEffectorTasks.put("/tmp/cumulus.yaml").contents(contents)).get();
              }
          });
  


[21/50] brooklyn-library git commit: Fixed indentation following PR comments

Posted by he...@apache.org.
Fixed indentation following PR comments


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

Branch: refs/heads/0.6.0
Commit: 0cc146e003c6854657261753a930422fcd6794f1
Parents: 3355eb2
Author: Martin Harris <gi...@nakomis.com>
Authored: Mon Nov 4 18:13:20 2013 +0000
Committer: Martin Harris <gi...@nakomis.com>
Committed: Mon Nov 4 18:13:20 2013 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0cc146e0/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
index ecc9d69..818cc57 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
@@ -93,7 +93,7 @@ public class QpidBrokerImpl extends JMSBrokerImpl<QpidQueue, QpidTopic> implemen
 
     @Override
     protected void connectSensors() {
-    	super.connectSensors();
+        super.connectSensors();
         String serverInfoMBeanName = "org.apache.qpid:type=ServerInformation,name=ServerInformation";
 
         jmxFeed = JmxFeed.builder()


[31/50] brooklyn-library git commit: Update TomcatServer version to 7.0.47

Posted by he...@apache.org.
Update TomcatServer version to 7.0.47


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

Branch: refs/heads/0.6.0
Commit: 87a2466cf9526cd1e10e6078bc9024463119be69
Parents: 93b94dc
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Tue Nov 12 16:09:34 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Tue Nov 12 16:09:34 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/87a2466c/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
index 970c8f4..7d5776c 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
@@ -44,7 +44,7 @@ public interface TomcatServer extends JavaWebAppSoftwareProcess, UsesJmx, HasSho
     }
 
     @SetFromFlag("version")
-    ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "7.0.42");
+    ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "7.0.47");
 
     @SetFromFlag("downloadUrl")
     BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(