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:19 UTC
[01/50] brooklyn-library git commit: Convert JavaWebAppService to
java, from groovy
Repository: brooklyn-library
Updated Branches:
refs/heads/0.5.0 [created] 0e094fa8b
Convert JavaWebAppService to java, from groovy
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/09491e01
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/09491e01
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/09491e01
Branch: refs/heads/0.5.0
Commit: 09491e01628359663dbf1c09051e0a03dcf3b4dd
Parents: 0a14db8
Author: Aled Sage <al...@gmail.com>
Authored: Tue Mar 26 17:22:02 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Mar 27 07:36:23 2013 +0000
----------------------------------------------------------------------
.../MovableElasticWebAppCluster.java | 3 ++-
.../entity/webapp/JavaWebAppService.groovy | 19 ----------------
.../entity/webapp/JavaWebAppService.java | 24 ++++++++++++++++++++
3 files changed, 26 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/09491e01/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java
index fc2f76b..95d74fa 100644
--- a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java
+++ b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java
@@ -2,6 +2,7 @@ package brooklyn.example.cloudfoundry;
import java.util.Collection;
+import brooklyn.config.ConfigKey;
import brooklyn.entity.Effector;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.Description;
@@ -21,7 +22,7 @@ public interface MovableElasticWebAppCluster extends Entity, Startable, MovableE
// either by passing (war: "classpath://...") in the constructor or by setConfig(ROOT_WAR).
// as a config variable, it will be inherited by children, so the children web app entities will pick it up.
@SetFromFlag("war")
- public static final BasicConfigKey<String> ROOT_WAR = JavaWebAppService.ROOT_WAR;
+ public static final ConfigKey<String> ROOT_WAR = JavaWebAppService.ROOT_WAR;
@SetFromFlag("ttl")
public static final BasicConfigKey<Long> TIME_TO_LIVE_SECONDS = new BasicConfigKey<Long>(
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/09491e01/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.groovy b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.groovy
deleted file mode 100644
index 255e56c..0000000
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-package brooklyn.entity.webapp
-
-import brooklyn.entity.java.UsesJava
-import brooklyn.event.basic.BasicConfigKey
-import brooklyn.util.flags.SetFromFlag
-
-interface JavaWebAppService extends WebAppService, UsesJava {
-
- @SetFromFlag("war")
- public static final BasicConfigKey<String> ROOT_WAR = [ String, "wars.root", "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)" ]
-
- @SetFromFlag("wars")
- public static final BasicConfigKey<List<String>> NAMED_WARS = [ List, "wars.named",
- "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name" ]
-
- @SetFromFlag("warsByContext")
- public static final BasicConfigKey<Map<String,String>> WARS_BY_CONTEXT = [ Map, "wars.by.context",
- "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)" ]
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/09491e01/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.java b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.java
new file mode 100644
index 0000000..383c8d8
--- /dev/null
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppService.java
@@ -0,0 +1,24 @@
+package brooklyn.entity.webapp;
+
+import java.util.List;
+import java.util.Map;
+
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.java.UsesJava;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.util.flags.SetFromFlag;
+
+public interface JavaWebAppService extends WebAppService, UsesJava {
+
+ @SetFromFlag("war")
+ public static final ConfigKey<String> ROOT_WAR = new BasicConfigKey<String>(
+ String.class, "wars.root", "WAR file to deploy as the ROOT, as URL (supporting file: and classpath: prefixes)");
+
+ @SetFromFlag("wars")
+ public static final ConfigKey<List<String>> NAMED_WARS = new BasicConfigKey(
+ List.class, "wars.named", "Archive files to deploy, as URL strings (supporting file: and classpath: prefixes); context (path in user-facing URL) will be inferred by name");
+
+ @SetFromFlag("warsByContext")
+ public static final ConfigKey<Map<String,String>> WARS_BY_CONTEXT = new BasicConfigKey(
+ Map.class, "wars.by.context", "Map of context keys (path in user-facing URL, typically without slashes) to archives (e.g. WARs by URL) to deploy, supporting file: and classpath: prefixes)");
+}
[25/50] brooklyn-library git commit: Increased startup delay to five
minutes (300 seconds) - Added the 'startTimeout' flag and config key to each
entity interface; is this really required?
Posted by he...@apache.org.
Increased startup delay to five minutes (300 seconds)
- Added the 'startTimeout' flag and config key to each entity interface; is this really required?
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/9cbbe5eb
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/9cbbe5eb
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/9cbbe5eb
Branch: refs/heads/0.5.0
Commit: 9cbbe5ebc68aac406ab9cb3c3e6756e4afe64af5
Parents: df84b66
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Mar 21 03:02:38 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:07 2013 +0100
----------------------------------------------------------------------
.../main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java | 3 +++
.../java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java | 4 ++++
.../main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java | 4 ++++
.../java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java | 3 +++
.../brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java | 5 +++++
5 files changed, 19 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/9cbbe5eb/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
index 33cb7e0..e17f0de 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
@@ -31,6 +31,9 @@ import brooklyn.util.flags.SetFromFlag;
@ImplementedBy(KafkaBrokerImpl.class)
public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Kafka {
+ @SetFromFlag("startTimeout")
+ public static final ConfigKey<Integer> START_TIMEOUT = SoftwareProcess.START_TIMEOUT;
+
@SetFromFlag("version")
BasicConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/9cbbe5eb/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index 4dd253e..0dedf9c 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -92,6 +92,10 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
private volatile FunctionFeed functionFeed;
private volatile JmxFeed jmxFeed;
+ /** Wait for five minutes to start. */
+ @Override
+ public void waitForServiceUp() { waitForServiceUp(5, TimeUnit.MINUTES); }
+
@Override
public void waitForServiceUp(long duration, TimeUnit units) {
super.waitForServiceUp(duration, units);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/9cbbe5eb/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
index 45843f3..65ed272 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
@@ -20,6 +20,7 @@ import brooklyn.config.ConfigKey;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.ConfigurableEntityFactory;
+import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.group.Cluster;
import brooklyn.entity.group.DynamicCluster;
import brooklyn.entity.proxying.BasicEntitySpec;
@@ -89,6 +90,9 @@ public interface KafkaCluster extends Entity, Startable, Resizable {
}
}
+ @SetFromFlag("startTimeout")
+ public static final ConfigKey<Integer> START_TIMEOUT = ConfigKeys.START_TIMEOUT;
+
@SetFromFlag("initialSize")
public static ConfigKey<Integer> INITIAL_SIZE = new BasicConfigKey<Integer>(Cluster.INITIAL_SIZE, 1);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/9cbbe5eb/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
index a1001f3..522828f 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
@@ -29,6 +29,9 @@ import brooklyn.util.flags.SetFromFlag;
@ImplementedBy(KafkaZookeeperImpl.class)
public interface KafkaZookeeper extends SoftwareProcess, UsesJmx, Kafka {
+ @SetFromFlag("startTimeout")
+ public static final ConfigKey<Integer> START_TIMEOUT = SoftwareProcess.START_TIMEOUT;
+
@SetFromFlag("version")
BasicConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/9cbbe5eb/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
index 0554011..00f892b 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
@@ -39,6 +39,7 @@ import brooklyn.util.exceptions.Exceptions;
import com.google.common.base.Functions;
import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.Stopwatch;
import com.google.common.collect.Sets;
/**
@@ -75,6 +76,10 @@ public class KafkaZookeeperImpl extends SoftwareProcessImpl implements KafkaZook
private volatile FunctionFeed functionFeed;
private volatile JmxFeed jmxFeed;
+ /** Wait for five minutes to start. */
+ @Override
+ public void waitForServiceUp() { waitForServiceUp(5, TimeUnit.MINUTES); }
+
@Override
public void waitForServiceUp(long duration, TimeUnit units) {
super.waitForServiceUp(duration, units);
[30/50] brooklyn-library git commit: Changes based on review comments,
including: - Updating to use latest 0.5.0 APIs - Adding general Zookeeper
entity interface - Make KafkaCluster implement Group
Posted by he...@apache.org.
Changes based on review comments, including:
- Updating to use latest 0.5.0 APIs
- Adding general Zookeeper entity interface
- Make KafkaCluster implement Group
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/64486e44
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/64486e44
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/64486e44
Branch: refs/heads/0.5.0
Commit: 64486e44f0cf633f7306718ec85cdaebcb3a2435
Parents: 9825780
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Mon Apr 1 19:00:44 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:07 2013 +0100
----------------------------------------------------------------------
.../java/brooklyn/demo/KafkaClusterExample.java | 10 +-
.../brooklyn/demo/SimpleCassandraCluster.java | 2 +-
.../brooklyn/demo/SimpleCouchDBCluster.java | 2 +-
.../java/brooklyn/demo/SimpleRedisCluster.java | 2 +-
.../kafka/AbstractfKafkaSshDriver.java | 2 +-
.../entity/messaging/kafka/KafkaBroker.java | 12 +-
.../entity/messaging/kafka/KafkaBrokerImpl.java | 78 ++++------
.../messaging/kafka/KafkaBrokerSshDriver.java | 2 +-
.../entity/messaging/kafka/KafkaCluster.java | 83 +++--------
.../messaging/kafka/KafkaClusterImpl.java | 122 ++++++++--------
.../entity/messaging/kafka/KafkaZookeeper.java | 28 ++--
.../messaging/kafka/KafkaZookeeperImpl.java | 100 +------------
.../kafka/KafkaZookeeperSshDriver.java | 2 +-
.../entity/zookeeper/AbstractZookeeperImpl.java | 122 ++++++++++++++++
.../brooklyn/entity/zookeeper/Zookeeper.java | 50 +++++++
.../activemq/ActiveMQIntegrationTest.groovy | 10 +-
.../messaging/kafka/KafkaIntegrationTest.groovy | 126 ----------------
.../messaging/kafka/KafkaIntegrationTest.java | 144 +++++++++++++++++++
.../entity/messaging/kafka/KafkaSupport.java | 24 +++-
19 files changed, 487 insertions(+), 434 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java
index fae6bb6..06bbbed 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java
@@ -5,7 +5,7 @@ import java.util.List;
import brooklyn.entity.basic.ApplicationBuilder;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.messaging.kafka.KafkaCluster;
-import brooklyn.entity.proxying.BasicEntitySpec;
+import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.launcher.BrooklynLauncher;
import brooklyn.util.CommandLineUtil;
@@ -18,10 +18,10 @@ public class KafkaClusterExample extends ApplicationBuilder {
/** Configure the application. */
protected void doBuild() {
- createChild(BasicEntitySpec.newInstance(KafkaCluster.class)
+ addChild(EntitySpecs.spec(KafkaCluster.class)
+ .configure("startTimeout", 300) // 5 minutes
.configure("initialSize", 2));
-
- appDisplayName("Kafka cluster application");
+ // TODO set application display name?
}
public static void main(String[] argv) {
@@ -30,7 +30,7 @@ public class KafkaClusterExample extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new KafkaClusterExample())
+ .application(new KafkaClusterExample().appDisplayName("Kafka cluster application"))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCassandraCluster.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCassandraCluster.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCassandraCluster.java
index 50c62a8..b538ec7 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCassandraCluster.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCassandraCluster.java
@@ -24,7 +24,7 @@ public class SimpleCassandraCluster extends ApplicationBuilder {
/** Create entities. */
protected void doBuild() {
- createChild(EntitySpecs.spec(CassandraCluster.class)
+ addChild(EntitySpecs.spec(CassandraCluster.class)
.configure("initialSize", "2")
.configure("clusterName", "Brooklyn")
.configure("jmxPort", "11099+")
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCouchDBCluster.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCouchDBCluster.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCouchDBCluster.java
index 179443e..5de676b 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCouchDBCluster.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleCouchDBCluster.java
@@ -24,7 +24,7 @@ public class SimpleCouchDBCluster extends ApplicationBuilder {
/** Create entities. */
protected void doBuild() {
- createChild(EntitySpecs.spec(CouchDBCluster.class)
+ addChild(EntitySpecs.spec(CouchDBCluster.class)
.configure("initialSize", "2")
.configure("clusterName", "Brooklyn")
.configure("httpPort", "8000+"));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleRedisCluster.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleRedisCluster.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleRedisCluster.java
index da80e39..0f818f5 100644
--- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleRedisCluster.java
+++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/SimpleRedisCluster.java
@@ -24,7 +24,7 @@ public class SimpleRedisCluster extends ApplicationBuilder {
/** Create entities. */
protected void doBuild() {
- createChild(EntitySpecs.spec(RedisCluster.class)
+ addChild(EntitySpecs.spec(RedisCluster.class)
.configure("initialSize", "2")
.configure("clusterName", "Brooklyn"));
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
index f6c7c8d..21e7092 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
@@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.BrooklynVersion;
import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.EntityLocal;
-import brooklyn.entity.basic.lifecycle.CommonCommands;
+import brooklyn.util.ssh.CommonCommands;
import brooklyn.entity.drivers.downloads.DownloadResolver;
import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
import brooklyn.location.basic.SshMachineLocation;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
index 2a82b13..c2d7632 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
@@ -20,6 +20,7 @@ import brooklyn.entity.basic.SoftwareProcess;
import brooklyn.entity.java.UsesJmx;
import brooklyn.entity.messaging.MessageBroker;
import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.entity.zookeeper.Zookeeper;
import brooklyn.event.AttributeSensor;
import brooklyn.event.basic.BasicAttributeSensor;
import brooklyn.event.basic.BasicConfigKey;
@@ -42,12 +43,13 @@ public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Ka
PortAttributeSensorAndConfigKey KAFKA_PORT = new PortAttributeSensorAndConfigKey("kafka.port", "Kafka port", "9092+");
/** Location of the configuration file template to be copied to the server.*/
- @SetFromFlag("serverConfig")
- ConfigKey<String> SERVER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
- String.class, "kafka.broker.configTemplate", "Server configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/server.properties");
+ @SetFromFlag("kafkaServerConfig")
+ ConfigKey<String> KAFKA_BROKER_CONFIG_TEMPLATE = new BasicConfigKey<String>(String.class,
+ "kafka.broker.configTemplate", "Kafka broker configuration template (in freemarker format)",
+ "classpath://brooklyn/entity/messaging/kafka/server.properties");
@SetFromFlag("zookeeper")
- ConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicConfigKey<KafkaZookeeper>(KafkaZookeeper.class, "kafka.broker.zookeeper", "Kafka zookeeper entity");
+ ConfigKey<Zookeeper> ZOOKEEPER = new BasicConfigKey<Zookeeper>(Zookeeper.class, "kafka.broker.zookeeper", "Kafka zookeeper entity");
AttributeSensor<Integer> BROKER_ID = new BasicAttributeSensor<Integer>(Integer.class, "kafka.broker.id", "Kafka unique broker ID");
@@ -66,6 +68,6 @@ public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Ka
Integer getBrokerId();
- KafkaZookeeper getZookeeper();
+ Zookeeper getZookeeper();
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index 0dedf9c..5f8add8 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -15,11 +15,7 @@
*/
package brooklyn.entity.messaging.kafka;
-import java.io.IOException;
-import java.util.Collection;
import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import javax.management.ObjectName;
@@ -31,23 +27,24 @@ import brooklyn.entity.Entity;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.SoftwareProcessImpl;
import brooklyn.entity.messaging.MessageBroker;
-import brooklyn.event.feed.function.FunctionFeed;
-import brooklyn.event.feed.function.FunctionPollConfig;
+import brooklyn.entity.zookeeper.Zookeeper;
import brooklyn.event.feed.jmx.JmxAttributePollConfig;
import brooklyn.event.feed.jmx.JmxFeed;
import brooklyn.event.feed.jmx.JmxHelper;
import brooklyn.util.MutableMap;
-import brooklyn.util.exceptions.Exceptions;
import com.google.common.base.Functions;
import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.collect.Sets;
/**
* An {@link brooklyn.entity.Entity} that represents a single Kafka broker instance.
*/
public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroker, KafkaBroker {
+
private static final Logger log = LoggerFactory.getLogger(KafkaBrokerImpl.class);
+ private static final ObjectName SOCKET_SERVER_STATS_MBEAN = JmxHelper.createObjectName("kafka:type=kafka.SocketServerStats");
+
+ private volatile JmxFeed jmxFeed;
public KafkaBrokerImpl() {
super();
@@ -63,7 +60,7 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
}
@Override
- public void postConstruct() {
+ public void init() {
setAttribute(BROKER_ID, Math.abs(hashCode())); // Must be positive for partitioning to work
}
@@ -74,7 +71,7 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
public Integer getBrokerId() { return getAttribute(BROKER_ID); }
@Override
- public KafkaZookeeper getZookeeper() { return getConfig(ZOOKEEPER); }
+ public Zookeeper getZookeeper() { return getConfig(ZOOKEEPER); }
public KafkaTopic createTopic(Map<?, ?> properties) {
KafkaTopic result = new KafkaTopic(properties, this);
@@ -88,98 +85,85 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
return KafkaBrokerDriver.class;
}
- private ObjectName socketServerStatsMbean = JmxHelper.createObjectName("kafka:type=kafka.SocketServerStats");
- private volatile FunctionFeed functionFeed;
- private volatile JmxFeed jmxFeed;
-
- /** Wait for five minutes to start. */
- @Override
- public void waitForServiceUp() { waitForServiceUp(5, TimeUnit.MINUTES); }
-
@Override
public void waitForServiceUp(long duration, TimeUnit units) {
super.waitForServiceUp(duration, units);
// Wait for the MBean to exist
- JmxHelper helper = null;
+ JmxHelper helper = new JmxHelper(this);
try {
- helper = new JmxHelper(this);
- helper.connect();
- helper.assertMBeanExistsEventually(socketServerStatsMbean, units.toMillis(duration));
- } catch (IOException e) {
- throw Exceptions.propagate(e);
+ helper.assertMBeanExistsEventually(SOCKET_SERVER_STATS_MBEAN, units.toMillis(duration));
} finally {
- if (helper != null) helper.disconnect();
+ helper.disconnect();
}
}
@Override
protected void connectSensors() {
- functionFeed = FunctionFeed.builder()
- .entity(this)
- .poll(new FunctionPollConfig<Object, Boolean>(SERVICE_UP)
- .period(500, TimeUnit.MILLISECONDS)
- .callable(new Callable<Boolean>() {
- public Boolean call() throws Exception {
- return getDriver().isRunning();
- }
- })
- .onError(Functions.constant(Boolean.FALSE)))
- .build();
+ connectServiceUpIsRunning();
jmxFeed = JmxFeed.builder()
.entity(this)
.period(500, TimeUnit.MILLISECONDS)
.pollAttribute(new JmxAttributePollConfig<Long>(FETCH_REQUEST_COUNT)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("NumFetchRequests")
.onError(Functions.constant(-1l)))
.pollAttribute(new JmxAttributePollConfig<Long>(TOTAL_FETCH_TIME)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("TotalFetchRequestMs")
.onError(Functions.constant(-1l)))
.pollAttribute(new JmxAttributePollConfig<Double>(MAX_FETCH_TIME)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("MaxFetchRequestMs")
.onError(Functions.constant(-1.0d)))
.pollAttribute(new JmxAttributePollConfig<Long>(PRODUCE_REQUEST_COUNT)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("NumProduceRequests")
.onError(Functions.constant(-1l)))
.pollAttribute(new JmxAttributePollConfig<Long>(TOTAL_PRODUCE_TIME)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("TotalProduceRequestMs")
.onError(Functions.constant(-1l)))
.pollAttribute(new JmxAttributePollConfig<Double>(MAX_PRODUCE_TIME)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("MaxProduceRequestMs")
.onError(Functions.constant(-1.0d)))
.pollAttribute(new JmxAttributePollConfig<Long>(BYTES_RECEIVED)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("TotalBytesRead")
.onError(Functions.constant(-1l)))
.pollAttribute(new JmxAttributePollConfig<Long>(BYTES_SENT)
- .objectName(socketServerStatsMbean)
+ .objectName(SOCKET_SERVER_STATS_MBEAN)
.attributeName("TotalBytesWritten")
.onError(Functions.constant(-1l)))
.build();
+
+ setBrokerUrl();
}
@Override
public void disconnectSensors() {
super.disconnectSensors();
- if (functionFeed != null) functionFeed.stop();
+ disconnectServiceUpIsRunning();
if (jmxFeed != null) jmxFeed.stop();
}
@Override
protected ToStringHelper toStringHelper() {
- return super.toStringHelper().add("kafkaPort", getKafkaPort());
+ return super.toStringHelper()
+ .add("kafkaPort", getKafkaPort());
}
+ /** Use the {@link #getZookeeper() zookeeper} details if available, otherwise use our own host and port. */
@Override
public void setBrokerUrl() {
- // TODO
+ Zookeeper zookeeper = getZookeeper();
+ if (zookeeper != null) {
+ setAttribute(BROKER_URL, String.format("zookeeper://%s:%d", zookeeper.getAttribute(HOSTNAME), zookeeper.getZookeeperPort()));
+ } else {
+ setAttribute(BROKER_URL, String.format("kafka://%s:%d", getAttribute(HOSTNAME), getKafkaPort()));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
index 40e7234..40df6b4 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
@@ -34,7 +34,7 @@ public class KafkaBrokerSshDriver extends AbstractfKafkaSshDriver implements Kaf
@Override
protected ConfigKey<String> getConfigTemplateKey() {
- return KafkaBroker.SERVER_CONFIG_TEMPLATE;
+ return KafkaBroker.KAFKA_BROKER_CONFIG_TEMPLATE;
}
@Override
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
index 96e46ff..d1e123a 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
@@ -18,16 +18,15 @@ package brooklyn.entity.messaging.kafka;
import brooklyn.catalog.Catalog;
import brooklyn.config.ConfigKey;
import brooklyn.entity.Entity;
-import brooklyn.entity.basic.Attributes;
-import brooklyn.entity.basic.ConfigurableEntityFactory;
+import brooklyn.entity.Group;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.group.Cluster;
import brooklyn.entity.group.DynamicCluster;
-import brooklyn.entity.proxying.BasicEntitySpec;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.proxying.ImplementedBy;
import brooklyn.entity.trait.Resizable;
import brooklyn.entity.trait.Startable;
+import brooklyn.entity.zookeeper.Zookeeper;
import brooklyn.event.AttributeSensor;
import brooklyn.event.basic.BasicAttributeSensor;
import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
@@ -35,93 +34,53 @@ import brooklyn.event.basic.BasicConfigKey;
import brooklyn.util.flags.SetFromFlag;
/**
- * This entity contains the sub-groups and entities that go in to a single location (e.g. datacenter)
- * to provide Kafka cluster functionality.
+ * Provides Kafka cluster functionality through a group of {@link KafkaBroker brokers} controlled
+ * by a single {@link KafkaZookeeper zookeeper} entity.
* <p>
- * You can customise the broker by customising the factory (by reference in calling code)
- * or supplying your own factory (as a config flag).
+ * You can customise the Kafka zookeeper and brokers by supplying {@link EntitySpec entity specifications}
+ * to be used when creating them. An existing {@link Zookeeper} entity may also be provided instead of the
+ * Kafka zookeeper.
* <p>
- * The contents of this group entity are:
+ * The contents of this entity are:
* <ul>
* <li>a {@link brooklyn.entity.group.DynamicCluster} of {@link KafkaBroker}s
- * <li>a {@link KafkaZookeeper}
- * <li>a {@link brooklyn.policy.Policy} to resize the DynamicCluster
+ * <li>a {@link KafkaZookeeper} or {@link Zookeeper}
+ * <li>a {@link brooklyn.policy.Policy} to resize the broker cluster
* </ul>
+ * The {@link Group group} and {@link Resizable} interface methods are delegated to the broker cluster, so calling
+ * {@link Resizable#resize(Integer) resize} will change the number of brokers.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Catalog(name="Kafka", description="Apache Kafka is a distributed publish-subscribe messaging system")
@ImplementedBy(KafkaClusterImpl.class)
-public interface KafkaCluster extends Entity, Startable, Resizable {
-
- class Spec<T extends KafkaCluster, S extends Spec<T,S>> extends BasicEntitySpec<T,S> {
-
- private static class ConcreteSpec extends Spec<KafkaCluster, ConcreteSpec> {
- ConcreteSpec() {
- super(KafkaCluster.class);
- }
- }
-
- public static Spec<KafkaCluster, ?> newInstance() {
- return new ConcreteSpec();
- }
-
- protected Spec(Class<T> type) {
- super(type);
- }
-
- public S initialSize(int val) {
- configure(INITIAL_SIZE, val);
- return self();
- }
-
- public S zookeeper(KafkaZookeeper val) {
- configure(ZOOKEEPER, val);
- return self();
- }
-
- public S brokerSpec(EntitySpec<KafkaBroker> val) {
- configure(BROKER_SPEC, val);
- return self();
- }
-
- public S brokerFactory(ConfigurableEntityFactory<KafkaBroker> val) {
- configure(BROKER_FACTORY, val);
- return self();
- }
- }
+public interface KafkaCluster extends Entity, Startable, Resizable, Group {
@SetFromFlag("startTimeout")
- public static final ConfigKey<Integer> START_TIMEOUT = ConfigKeys.START_TIMEOUT;
+ ConfigKey<Integer> START_TIMEOUT = ConfigKeys.START_TIMEOUT;
@SetFromFlag("initialSize")
ConfigKey<Integer> INITIAL_SIZE = new BasicConfigKey<Integer>(Cluster.INITIAL_SIZE, 1);
+ /** Zookeeper for the cluster. If null a default be will created. */
@SetFromFlag("zookeeper")
- BasicAttributeSensorAndConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicAttributeSensorAndConfigKey<KafkaZookeeper>(
- KafkaZookeeper.class, "kafka.cluster.zookeeper", "Kafka zookeeper for the cluster; if null a default will created");
+ BasicAttributeSensorAndConfigKey<Zookeeper> ZOOKEEPER = new BasicAttributeSensorAndConfigKey<Zookeeper>(
+ Zookeeper.class, "kafka.cluster.zookeeper", "The zookeeper for the cluster; if null a default be will created");
+ /** Spec for creating the default Kafka zookeeper entity. */
@SetFromFlag("zookeeperSpec")
BasicAttributeSensorAndConfigKey<EntitySpec<KafkaZookeeper>> ZOOKEEPER_SPEC = new BasicAttributeSensorAndConfigKey(
EntitySpec.class, "kafka.cluster.zookeeperSpec", "Spec for creating the kafka zookeeper");
- /** Factory to create a Kafka broker, given flags */
- @SetFromFlag("brokerFactory")
- BasicAttributeSensorAndConfigKey<ConfigurableEntityFactory<KafkaBroker>> BROKER_FACTORY = new BasicAttributeSensorAndConfigKey(
- ConfigurableEntityFactory.class, "kafka.cluster.brokerFactory", "Factory to create a Kafka broker");
-
- /** Spec for Kafka broker entiites to be created */
+ /** Spec for Kafka broker entities to be created. */
@SetFromFlag("brokerSpec")
BasicAttributeSensorAndConfigKey<EntitySpec<KafkaBroker>> BROKER_SPEC = new BasicAttributeSensorAndConfigKey(
EntitySpec.class, "kafka.cluster.brokerSpec", "Spec for Kafka broker entiites to be created");
+ /** Underlying Kafka broker cluster. */
AttributeSensor<DynamicCluster> CLUSTER = new BasicAttributeSensor<DynamicCluster>(
DynamicCluster.class, "kafka.cluster.brokerCluster", "Underlying Kafka broker cluster");
- AttributeSensor<String> HOSTNAME = Attributes.HOSTNAME;
-
- KafkaZookeeper getZookeeper();
-
- ConfigurableEntityFactory<KafkaBroker> getBrokerFactory();
+ Zookeeper getZookeeper();
DynamicCluster getCluster();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
index efc14fc..1938efa 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
@@ -18,7 +18,6 @@ package brooklyn.entity.messaging.kafka;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.ExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,19 +25,19 @@ import org.slf4j.LoggerFactory;
import brooklyn.enricher.basic.SensorPropagatingEnricher;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.AbstractEntity;
-import brooklyn.entity.basic.ConfigurableEntityFactory;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.group.DynamicCluster;
-import brooklyn.entity.proxying.BasicEntitySpec;
import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.entity.proxying.WrappingEntitySpec;
+import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.entity.trait.Startable;
+import brooklyn.entity.zookeeper.Zookeeper;
import brooklyn.event.feed.ConfigToAttributes;
import brooklyn.location.Location;
import brooklyn.util.MutableList;
import brooklyn.util.MutableMap;
-import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.exceptions.CompoundRuntimeException;
+import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -65,104 +64,97 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
}
@Override
- public void postConstruct() {
- ConfigToAttributes.apply(this, BROKER_FACTORY);
+ public void init() {
ConfigToAttributes.apply(this, BROKER_SPEC);
ConfigToAttributes.apply(this, ZOOKEEPER);
ConfigToAttributes.apply(this, ZOOKEEPER_SPEC);
log.debug("creating zookeeper child for {}", this);
- KafkaZookeeper zookeeper = getAttribute(ZOOKEEPER);
+ Zookeeper zookeeper = getAttribute(ZOOKEEPER);
if (zookeeper == null) {
EntitySpec<KafkaZookeeper> zookeeperSpec = getAttribute(ZOOKEEPER_SPEC);
if (zookeeperSpec == null) {
log.debug("creating zookeeper using default spec for {}", this);
- zookeeperSpec = BasicEntitySpec.newInstance(KafkaZookeeper.class);
+ zookeeperSpec = EntitySpecs.spec(KafkaZookeeper.class);
setAttribute(ZOOKEEPER_SPEC, zookeeperSpec);
} else {
log.debug("creating zookeeper using custom spec for {}", this);
}
- zookeeper = getEntityManager().createEntity(WrappingEntitySpec.newInstance(zookeeperSpec).parent(this));
+ zookeeper = addChild(zookeeperSpec);
if (Entities.isManaged(this)) Entities.manage(zookeeper);
setAttribute(ZOOKEEPER, zookeeper);
}
log.debug("creating cluster child for {}", this);
- ConfigurableEntityFactory<KafkaBroker> brokerFactory = getAttribute(BROKER_FACTORY);
EntitySpec<KafkaBroker> brokerSpec = getAttribute(BROKER_SPEC);
- if (brokerFactory == null && brokerSpec == null) {
+ if (brokerSpec == null) {
log.debug("creating default broker spec for {}", this);
- brokerSpec = BasicEntitySpec.newInstance(KafkaBroker.class);
+ brokerSpec = EntitySpecs.spec(KafkaBroker.class);
setAttribute(BROKER_SPEC, brokerSpec);
}
- // Note relies on initial_size being inherited by DynamicCluster, because key id is identical
- // We add the zookeeper configuration to the KafkaBroker specification or factory here
- Map<String,Object> flags;
- if (brokerSpec != null) {
- flags = MutableMap.<String, Object>of("memberSpec", WrappingEntitySpec.newInstance(brokerSpec).configure(KafkaBroker.ZOOKEEPER, zookeeper));
- } else {
- brokerFactory.configure(KafkaBroker.ZOOKEEPER, zookeeper);
- flags = MutableMap.<String, Object>of("factory", brokerFactory);
- }
- DynamicCluster cluster = getEntityManager().createEntity(BasicEntitySpec.newInstance(DynamicCluster.class)
- .parent(this)
- .configure(flags));
+ // Relies on initialSize being inherited by DynamicCluster, because key id is identical
+ // We add the zookeeper configuration to the KafkaBroker specification here
+ DynamicCluster cluster = addChild(EntitySpecs.spec(DynamicCluster.class)
+ .configure("memberSpec", EntitySpecs.wrapSpec(brokerSpec).configure(KafkaBroker.ZOOKEEPER, zookeeper)));
if (Entities.isManaged(this)) Entities.manage(cluster);
setAttribute(CLUSTER, cluster);
}
@Override
- public KafkaZookeeper getZookeeper() {
+ public Zookeeper getZookeeper() {
return getAttribute(ZOOKEEPER);
}
@Override
- public synchronized ConfigurableEntityFactory<KafkaBroker> getBrokerFactory() {
- return (ConfigurableEntityFactory<KafkaBroker>) getAttribute(BROKER_FACTORY);
- }
-
- @Override
- public synchronized DynamicCluster getCluster() {
+ public DynamicCluster getCluster() {
return getAttribute(CLUSTER);
}
@Override
public void start(Collection<? extends Location> locations) {
if (isLegacyConstruction()) {
- postConstruct();
+ init();
}
- if (locations.isEmpty()) locations = this.getLocations();
- Iterables.getOnlyElement(locations); //assert just one
+ if (locations.isEmpty()) locations = getLocations();
+ Iterables.getOnlyElement(locations); // Assert just one
addLocations(locations);
List<Entity> childrenToStart = MutableList.<Entity>of(getCluster());
// Set the KafkaZookeeper entity as child of cluster, if it does not already have a parent
if (getZookeeper().getParent() == null) {
addChild(getZookeeper());
- }
- // And only start zookeeper if we are parent
- if (this.equals(getZookeeper().getParent())) childrenToStart.add(getZookeeper());
- try {
- Entities.invokeEffectorList(this, childrenToStart, Startable.START, ImmutableMap.of("locations", locations)).get();
- } catch (InterruptedException e) {
- throw Exceptions.propagate(e);
- } catch (ExecutionException e) {
- throw Exceptions.propagate(e);
- }
+ } // And only start zookeeper if we are parent
+ if (Objects.equal(this, getZookeeper().getParent())) childrenToStart.add(getZookeeper());
+ Entities.invokeEffectorList(this, childrenToStart, Startable.START, ImmutableMap.of("locations", locations)).getUnchecked();
connectSensors();
}
@Override
public void stop() {
- if (this.equals(getZookeeper().getParent())) {
- getZookeeper().stop();
+ List<Exception> errors = Lists.newArrayList();
+ if (getZookeeper() != null && Objects.equal(this, getZookeeper().getParent())) {
+ try {
+ getZookeeper().stop();
+ } catch (Exception e) {
+ errors.add(e);
+ }
+ }
+ if (getCurrentSize() > 0) {
+ try {
+ getCluster().stop();
+ } catch (Exception e) {
+ errors.add(e);
+ }
}
- getCluster().stop();
- super.getLocations().clear();
+ getLocations().clear();
setAttribute(SERVICE_UP, false);
+
+ if (errors.size() != 0) {
+ throw new CompoundRuntimeException("Error stopping Kafka cluster", errors);
+ }
}
@Override
@@ -181,14 +173,32 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
.addToEntityAndEmitAll(this);
}
+ /*
+ * All Group and Resizable interface methods are delegated to the broker cluster.
+ */
+
+ /** {@inheritDoc} */
@Override
- public Integer resize(Integer desiredSize) {
- return getCluster().resize(desiredSize);
- }
+ public Collection<Entity> getMembers() { return getCluster().getMembers(); }
- /** @return the current size of the group. */
- public Integer getCurrentSize() {
- return getCluster().getCurrentSize();
- }
+ /** {@inheritDoc} */
+ @Override
+ public boolean hasMember(Entity member) { return getCluster().hasMember(member); }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean addMember(Entity member) { return getCluster().addMember(member); }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean removeMember(Entity member) { return getCluster().removeMember(member); }
+
+ /** {@inheritDoc} */
+ @Override
+ public Integer getCurrentSize() { return getCluster().getCurrentSize(); }
+
+ /** {@inheritDoc} */
+ @Override
+ public Integer resize(Integer desiredSize) { return getCluster().resize(desiredSize); }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
index a001a29..a0d7a46 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
@@ -17,40 +17,28 @@ package brooklyn.entity.messaging.kafka;
import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.SoftwareProcess;
-import brooklyn.entity.java.UsesJmx;
import brooklyn.entity.proxying.ImplementedBy;
-import brooklyn.event.AttributeSensor;
-import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.entity.zookeeper.Zookeeper;
import brooklyn.event.basic.BasicConfigKey;
-import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
import brooklyn.util.flags.SetFromFlag;
/**
* An {@link brooklyn.entity.Entity} that represents a single Kafka zookeeper instance.
*/
@ImplementedBy(KafkaZookeeperImpl.class)
-public interface KafkaZookeeper extends SoftwareProcess, UsesJmx, Kafka {
+public interface KafkaZookeeper extends Zookeeper, Kafka {
@SetFromFlag("startTimeout")
public static final ConfigKey<Integer> START_TIMEOUT = SoftwareProcess.START_TIMEOUT;
+ /** The Kafka version, not the Zookeeper version. */
@SetFromFlag("version")
ConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
- @SetFromFlag("zookeeperPort")
- PortAttributeSensorAndConfigKey ZOOKEEPER_PORT = new PortAttributeSensorAndConfigKey("zookeeper.port", "Zookeeper port", "2181+");
-
- /** Location of the configuration file template to be copied to the server. */
- @SetFromFlag("zookeeperConfig")
- ConfigKey<String> ZOOKEEPER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
- String.class, "kafka.zookeeper.configTemplate", "Zookeeper configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/zookeeper.properties");
-
- AttributeSensor<Long> OUTSTANDING_REQUESTS = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.outstandingRequests", "Outstanding request count");
- AttributeSensor<Long> PACKETS_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.received", "Total packets received");
- AttributeSensor<Long> PACKETS_SENT = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.sent", "Total packets sent");
-
- Integer getZookeeperPort();
-
- String getHostname();
+ /** Location of the kafka configuration file template to be copied to the server. */
+ @SetFromFlag("kafkaZookeeperConfig")
+ ConfigKey<String> KAFKA_ZOOKEEPER_CONFIG_TEMPLATE = new BasicConfigKey<String>(String.class,
+ "kafka.zookeeper.configTemplate", "Kafka zookeeper configuration template (in freemarker format)",
+ "classpath://brooklyn/entity/messaging/kafka/zookeeper.properties");
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
index 00f892b..79a6cf6 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
@@ -15,37 +15,22 @@
*/
package brooklyn.entity.messaging.kafka;
-import java.io.IOException;
-import java.util.Collection;
import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
-
-import javax.management.ObjectName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Objects.ToStringHelper;
+
import brooklyn.entity.Entity;
-import brooklyn.entity.basic.SoftwareProcessImpl;
-import brooklyn.event.feed.function.FunctionFeed;
-import brooklyn.event.feed.function.FunctionPollConfig;
-import brooklyn.event.feed.jmx.JmxAttributePollConfig;
-import brooklyn.event.feed.jmx.JmxFeed;
-import brooklyn.event.feed.jmx.JmxHelper;
+import brooklyn.entity.zookeeper.AbstractZookeeperImpl;
import brooklyn.util.MutableMap;
-import brooklyn.util.exceptions.Exceptions;
-
-import com.google.common.base.Functions;
-import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.base.Stopwatch;
-import com.google.common.collect.Sets;
/**
* An {@link brooklyn.entity.Entity} that represents a single Kafka zookeeper instance.
*/
-public class KafkaZookeeperImpl extends SoftwareProcessImpl implements KafkaZookeeper {
+public class KafkaZookeeperImpl extends AbstractZookeeperImpl implements KafkaZookeeper {
+
private static final Logger log = LoggerFactory.getLogger(KafkaZookeeperImpl.class);
public KafkaZookeeperImpl() {
@@ -62,83 +47,8 @@ public class KafkaZookeeperImpl extends SoftwareProcessImpl implements KafkaZook
}
@Override
- public Integer getZookeeperPort() { return getAttribute(ZOOKEEPER_PORT); }
-
- @Override
- public String getHostname() { return getAttribute(HOSTNAME); }
-
- @Override
public Class<?> getDriverInterface() {
return KafkaZookeeperDriver.class;
}
- private ObjectName zookeeperMbean = JmxHelper.createObjectName("org.apache.ZooKeeperService:name0=StandaloneServer_port-1");
- private volatile FunctionFeed functionFeed;
- private volatile JmxFeed jmxFeed;
-
- /** Wait for five minutes to start. */
- @Override
- public void waitForServiceUp() { waitForServiceUp(5, TimeUnit.MINUTES); }
-
- @Override
- public void waitForServiceUp(long duration, TimeUnit units) {
- super.waitForServiceUp(duration, units);
-
- // Wait for the MBean to exist
- JmxHelper helper = null;
- try {
- helper = new JmxHelper(this);
- helper.connect();
- helper.assertMBeanExistsEventually(zookeeperMbean, units.toMillis(duration));
- } catch (IOException e) {
- throw Exceptions.propagate(e);
- } finally {
- if (helper != null) helper.disconnect();
- }
- }
-
- @Override
- protected void connectSensors() {
- functionFeed = FunctionFeed.builder()
- .entity(this)
- .poll(new FunctionPollConfig<Object, Boolean>(SERVICE_UP)
- .period(500, TimeUnit.MILLISECONDS)
- .callable(new Callable<Boolean>() {
- public Boolean call() throws Exception {
- return getDriver().isRunning();
- }
- })
- .onError(Functions.constant(Boolean.FALSE)))
- .build();
-
- jmxFeed = JmxFeed.builder()
- .entity(this)
- .period(500, TimeUnit.MILLISECONDS)
- .pollAttribute(new JmxAttributePollConfig<Long>(OUTSTANDING_REQUESTS)
- .objectName(zookeeperMbean)
- .attributeName("OutstandingRequests")
- .onError(Functions.constant(-1l)))
- .pollAttribute(new JmxAttributePollConfig<Long>(PACKETS_RECEIVED)
- .objectName(zookeeperMbean)
- .attributeName("PacketsReceived")
- .onError(Functions.constant(-1l)))
- .pollAttribute(new JmxAttributePollConfig<Long>(PACKETS_SENT)
- .objectName(zookeeperMbean)
- .attributeName("PacketsSent")
- .onError(Functions.constant(-1l)))
- .build();
- }
-
- @Override
- public void disconnectSensors() {
- super.disconnectSensors();
- if (functionFeed != null) functionFeed.stop();
- if (jmxFeed != null) jmxFeed.stop();
- }
-
- @Override
- protected ToStringHelper toStringHelper() {
- return super.toStringHelper().add("zookeeperPort", getZookeeperPort());
- }
-
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
index a35aab6..df417e0 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
@@ -34,7 +34,7 @@ public class KafkaZookeeperSshDriver extends AbstractfKafkaSshDriver implements
@Override
protected ConfigKey<String> getConfigTemplateKey() {
- return KafkaZookeeper.ZOOKEEPER_CONFIG_TEMPLATE;
+ return KafkaZookeeper.KAFKA_ZOOKEEPER_CONFIG_TEMPLATE;
}
@Override
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/zookeeper/AbstractZookeeperImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/zookeeper/AbstractZookeeperImpl.java b/software/messaging/src/main/java/brooklyn/entity/zookeeper/AbstractZookeeperImpl.java
new file mode 100644
index 0000000..2e2fc73
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/zookeeper/AbstractZookeeperImpl.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.zookeeper;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+import javax.management.ObjectName;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.event.feed.function.FunctionFeed;
+import brooklyn.event.feed.function.FunctionPollConfig;
+import brooklyn.event.feed.jmx.JmxAttributePollConfig;
+import brooklyn.event.feed.jmx.JmxFeed;
+import brooklyn.event.feed.jmx.JmxHelper;
+import brooklyn.util.MutableMap;
+import brooklyn.util.exceptions.Exceptions;
+
+import com.google.common.base.Functions;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.Stopwatch;
+import com.google.common.collect.Sets;
+
+/**
+ * An {@link brooklyn.entity.Entity} that represents a single Apache Zookeeper instance.
+ */
+public abstract class AbstractZookeeperImpl extends SoftwareProcessImpl implements Zookeeper {
+
+ private static final Logger log = LoggerFactory.getLogger(AbstractZookeeperImpl.class);
+ private static final ObjectName ZOOKEEPER_MBEAN = JmxHelper.createObjectName("org.apache.ZooKeeperService:name0=StandaloneServer_port-1");
+
+ private volatile JmxFeed jmxFeed;
+
+ public AbstractZookeeperImpl() {
+ super();
+ }
+ public AbstractZookeeperImpl(Map<?, ?> properties) {
+ this(properties, null);
+ }
+ public AbstractZookeeperImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public AbstractZookeeperImpl(Map<?, ?> properties, Entity parent) {
+ super(properties, parent);
+ }
+
+ @Override
+ public Integer getZookeeperPort() { return getAttribute(ZOOKEEPER_PORT); }
+
+ @Override
+ public String getHostname() { return getAttribute(HOSTNAME); }
+
+ @Override
+ public void waitForServiceUp(long duration, TimeUnit units) {
+ super.waitForServiceUp(duration, units);
+
+ // Wait for the MBean to exist
+ JmxHelper helper = new JmxHelper(this);
+ try {
+ helper.assertMBeanExistsEventually(ZOOKEEPER_MBEAN, units.toMillis(duration));
+ } finally {
+ helper.disconnect();
+ }
+ }
+
+ @Override
+ protected void connectSensors() {
+ connectServiceUpIsRunning();
+
+ jmxFeed = JmxFeed.builder()
+ .entity(this)
+ .period(500, TimeUnit.MILLISECONDS)
+ .pollAttribute(new JmxAttributePollConfig<Long>(OUTSTANDING_REQUESTS)
+ .objectName(ZOOKEEPER_MBEAN)
+ .attributeName("OutstandingRequests")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(PACKETS_RECEIVED)
+ .objectName(ZOOKEEPER_MBEAN)
+ .attributeName("PacketsReceived")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(PACKETS_SENT)
+ .objectName(ZOOKEEPER_MBEAN)
+ .attributeName("PacketsSent")
+ .onError(Functions.constant(-1l)))
+ .build();
+ }
+
+ @Override
+ public void disconnectSensors() {
+ super.disconnectSensors();
+ disconnectServiceUpIsRunning();
+ if (jmxFeed != null) jmxFeed.stop();
+ }
+
+ @Override
+ protected ToStringHelper toStringHelper() {
+ return super.toStringHelper()
+ .add("zookeeperPort", getZookeeperPort());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/main/java/brooklyn/entity/zookeeper/Zookeeper.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/zookeeper/Zookeeper.java b/software/messaging/src/main/java/brooklyn/entity/zookeeper/Zookeeper.java
new file mode 100644
index 0000000..369ff61
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/zookeeper/Zookeeper.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.zookeeper;
+
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
+import brooklyn.util.flags.SetFromFlag;
+
+/**
+ * An {@link brooklyn.entity.Entity} that represents a single Apache Zookeeper instance.
+ * <p>
+ * Currently {@code abstract} as there is no generic Zookeeper driver.
+ */
+@ImplementedBy(AbstractZookeeperImpl.class)
+public interface Zookeeper extends SoftwareProcess, UsesJmx {
+
+ @SetFromFlag("version")
+ ConfigKey<String> SUGGESTED_VERSION = new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "3.3.3");
+
+ @SetFromFlag("zookeeperPort")
+ PortAttributeSensorAndConfigKey ZOOKEEPER_PORT = new PortAttributeSensorAndConfigKey("zookeeper.port", "Zookeeper port", "2181+");
+
+ AttributeSensor<Long> OUTSTANDING_REQUESTS = new BasicAttributeSensor<Long>(Long.class, "zookeeper.outstandingRequests", "Outstanding request count");
+ AttributeSensor<Long> PACKETS_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "zookeeper.packets.received", "Total packets received");
+ AttributeSensor<Long> PACKETS_SENT = new BasicAttributeSensor<Long>(Long.class, "zookeeper.packets.sent", "Total packets sent");
+
+ Integer getZookeeperPort();
+
+ String getHostname();
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
index 28ff308..8733cb0 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
@@ -41,19 +41,15 @@ public class ActiveMQIntegrationTest {
private Location testLocation
private ActiveMQBroker activeMQ
- @BeforeMethod(groups = "Integration")
+ @BeforeMethod(alwaysRun = true)
public void setup() {
app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = new LocalhostMachineProvisioningLocation()
}
- @AfterMethod(groups = "Integration")
+ @AfterMethod(alwaysRun = true)
public void shutdown() {
- try {
- if (app != null) Entities.destroyAll(app);
- } catch (Exception e) {
- log.warn("Error stopping entities", e);
- }
+ if (app != null) Entities.destroyAll(app);
}
/**
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
deleted file mode 100644
index 2ef95c5..0000000
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2013 by Cloudsoft Corp.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package brooklyn.entity.messaging.kafka;
-
-import static brooklyn.test.TestUtils.*
-import static java.util.concurrent.TimeUnit.*
-import static org.testng.Assert.*
-
-import java.util.concurrent.TimeUnit
-
-import javax.jms.Connection
-import javax.jms.MessageConsumer
-import javax.jms.MessageProducer
-import javax.jms.Queue
-import javax.jms.Session
-import javax.jms.TextMessage
-
-import org.apache.activemq.ActiveMQConnectionFactory
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-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.proxying.BasicEntitySpec
-import brooklyn.entity.trait.Startable
-import brooklyn.location.Location
-import brooklyn.location.basic.LocalhostMachineProvisioningLocation
-import brooklyn.test.entity.TestApplication
-import brooklyn.util.internal.TimeExtras
-
-/**
- * Test the operation of the {@link ActiveMQBroker} class.
- *
- * TODO test that sensors update.
- */
-public class KafkaIntegrationTest {
- private static final Logger log = LoggerFactory.getLogger(KafkaIntegrationTest.class)
-
- static { TimeExtras.init() }
-
- private TestApplication app
- private Location testLocation
-
- @BeforeMethod(groups = "Integration")
- public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
- testLocation = new LocalhostMachineProvisioningLocation()
- }
-
- @AfterMethod(groups = "Integration")
- public void shutdown() {
- if (app != null) Entities.destroyAll(app);
- }
-
- /**
- * Test that we can start a zookeeper.
- */
- @Test(groups = "Integration")
- public void testZookeeper() {
- KafkaZookeeper zookeeper = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaZookeeper.class));
-
- zookeeper.start([ testLocation ])
- executeUntilSucceedsWithShutdown(zookeeper, timeout:600*TimeUnit.SECONDS) {
- assertTrue zookeeper.getAttribute(Startable.SERVICE_UP)
- }
- assertFalse zookeeper.getAttribute(Startable.SERVICE_UP)
- }
-
- /**
- * Test that we can start a broker and zookeeper together.
- */
- @Test(groups = "Integration")
- public void testBrokerPlusZookeeper() {
- KafkaZookeeper zookeeper = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaZookeeper.class));
- KafkaBroker broker = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaBroker.class).configure(KafkaBroker.ZOOKEEPER, zookeeper));
-
- zookeeper.start([ testLocation ])
- executeUntilSucceeds(timeout:600*TimeUnit.SECONDS) {
- assertTrue zookeeper.getAttribute(Startable.SERVICE_UP)
- }
-
- broker.start([ testLocation ])
- executeUntilSucceeds(timeout:600*TimeUnit.SECONDS) {
- assertTrue broker.getAttribute(Startable.SERVICE_UP)
- }
- }
-
- /**
- * Test that we can start a cluster with zookeeper and one broker.
- *
- * Connects to the zookeeper controller and tests sending and receiving messages on a topic.
- */
- @Test(groups = "Integration")
- public void testSingleBrokerCluster() {
- KafkaCluster cluster = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaCluster.class).configure(KafkaCluster.INITIAL_SIZE, 1));
-
- cluster.start([ testLocation ])
- executeUntilSucceeds(timeout:600*TimeUnit.SECONDS) {
- assertTrue cluster.getAttribute(Startable.SERVICE_UP)
- }
-
- Entities.dumpInfo(cluster);
-
- KafkaSupport support = new KafkaSupport(cluster.getZookeeper());
- support.sendMessage("brooklyn", "TEST_MESSAGE")
- String message = support.getMessage("brooklyn");
- assertEquals(message, "TEST_MESSAGE");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java
new file mode 100644
index 0000000..54f698a
--- /dev/null
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.util.concurrent.Callable;
+
+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.messaging.activemq.ActiveMQBroker;
+import brooklyn.entity.proxying.EntitySpecs;
+import brooklyn.entity.trait.Startable;
+import brooklyn.location.Location;
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.test.Asserts;
+import brooklyn.test.entity.TestApplication;
+import brooklyn.util.MutableMap;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * Test the operation of the {@link ActiveMQBroker} class.
+ *
+ * TODO test that sensors update.
+ */
+public class KafkaIntegrationTest {
+
+ private TestApplication app;
+ private Location testLocation;
+
+ @BeforeMethod(alwaysRun = true)
+ public void setup() {
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
+ testLocation = new LocalhostMachineProvisioningLocation();
+ }
+
+ @AfterMethod(alwaysRun = true)
+ public void shutdown() {
+ if (app != null) Entities.destroyAll(app);
+ }
+
+ /**
+ * Test that we can start a zookeeper.
+ */
+ @Test(groups = "Integration")
+ public void testZookeeper() {
+ final KafkaZookeeper zookeeper = app.createAndManageChild(EntitySpecs.spec(KafkaZookeeper.class));
+
+ zookeeper.start(ImmutableList.of(testLocation));
+ Asserts.succeedsEventually(MutableMap.of("timeout", 60000l), new Callable<Void>() {
+ @Override
+ public Void call() {
+ assertTrue(zookeeper.getAttribute(Startable.SERVICE_UP));
+ return null;
+ }
+ });
+
+ zookeeper.stop();
+ assertFalse(zookeeper.getAttribute(Startable.SERVICE_UP));
+ }
+
+ /**
+ * Test that we can start a broker and zookeeper together.
+ */
+ @Test(groups = "Integration")
+ public void testBrokerPlusZookeeper() {
+ final KafkaZookeeper zookeeper = app.createAndManageChild(EntitySpecs.spec(KafkaZookeeper.class));
+ final KafkaBroker broker = app.createAndManageChild(EntitySpecs.spec(KafkaBroker.class).configure(KafkaBroker.ZOOKEEPER, zookeeper));
+
+ zookeeper.start(ImmutableList.of(testLocation));
+ Asserts.succeedsEventually(MutableMap.of("timeout", 60000l), new Callable<Void>() {
+ @Override
+ public Void call() {
+ assertTrue(zookeeper.getAttribute(Startable.SERVICE_UP));
+ return null;
+ }
+ });
+
+ broker.start(ImmutableList.of(testLocation));
+ Asserts.succeedsEventually(MutableMap.of("timeout", 60000l), new Callable<Void>() {
+ @Override
+ public Void call() {
+ assertTrue(broker.getAttribute(Startable.SERVICE_UP));
+ return null;
+ }
+ });
+
+ zookeeper.stop();
+ assertFalse(zookeeper.getAttribute(Startable.SERVICE_UP));
+
+ broker.stop();
+ assertFalse(broker.getAttribute(Startable.SERVICE_UP));
+ }
+
+ /**
+ * Test that we can start a cluster with zookeeper and one broker.
+ *
+ * Connects to the zookeeper controller and tests sending and receiving messages on a topic.
+ */
+ @Test(groups = "Integration")
+ public void testSingleBrokerCluster() {
+ final KafkaCluster cluster = app.createAndManageChild(EntitySpecs.spec(KafkaCluster.class));
+
+ cluster.start(ImmutableList.of(testLocation));
+ Asserts.succeedsEventually(MutableMap.of("timeout", 60000l), new Callable<Void>() {
+ @Override
+ public Void call() {
+ assertTrue(cluster.getAttribute(Startable.SERVICE_UP));
+ assertTrue(cluster.getZookeeper().getAttribute(Startable.SERVICE_UP));
+ assertEquals(cluster.getCurrentSize().intValue(), 1);
+ return null;
+ }
+ });
+
+ Entities.dumpInfo(cluster);
+
+ KafkaSupport support = new KafkaSupport(cluster);
+
+ support.sendMessage("brooklyn", "TEST_MESSAGE");
+ String message = support.getMessage("brooklyn");
+ assertEquals(message, "TEST_MESSAGE");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/64486e44/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
index d9372a9..019a65b 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
@@ -31,40 +31,54 @@ import kafka.javaapi.producer.ProducerData;
import kafka.message.Message;
import kafka.producer.ProducerConfig;
import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.zookeeper.Zookeeper;
-import com.beust.jcommander.internal.Lists;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
+/**
+ * Kafka test framework for integration and live tests, using the Kafka Java API.
+ */
public class KafkaSupport {
- private final KafkaZookeeper zookeeper;
+ private final KafkaCluster cluster;
- public KafkaSupport(KafkaZookeeper zookeeper) {
- this.zookeeper = zookeeper;
+ public KafkaSupport(KafkaCluster cluster) {
+ this.cluster = cluster;
}
+ /**
+ * Send a message to the {@link KafkaCluster} on the given topic.
+ */
public void sendMessage(String topic, String message) {
+ Zookeeper zookeeper = cluster.getZookeeper();
Properties props = new Properties();
props.put("zk.connect", String.format("%s:%d", zookeeper.getAttribute(Attributes.HOSTNAME), zookeeper.getZookeeperPort()));
props.put("serializer.class", "kafka.serializer.StringEncoder");
ProducerConfig config = new ProducerConfig(props);
+
Producer<String, String> producer = new Producer<String, String>(config);
ProducerData<String, String> data = new ProducerData<String, String>(topic, message);
producer.send(data);
producer.close();
}
+ /**
+ * Retrieve the next message on the given topic from the {@link KafkaCluster}.
+ */
public String getMessage(String topic) {
+ Zookeeper zookeeper = cluster.getZookeeper();
Properties props = new Properties();
props.put("zk.connect", String.format("%s:%d", zookeeper.getAttribute(Attributes.HOSTNAME), zookeeper.getZookeeperPort()));
- props.put("zk.connectiontimeout.ms", "1000000");
+ props.put("zk.connectiontimeout.ms", "120000"); // two minutes
props.put("groupid", "brooklyn");
ConsumerConfig consumerConfig = new ConsumerConfig(props);
+
ConsumerConnector consumer = Consumer.createJavaConsumerConnector(consumerConfig);
List<KafkaMessageStream<Message>> streams = consumer.createMessageStreams(ImmutableMap.of(topic, 1)).get(topic);
ConsumerIterator<Message> iterator = Iterables.getOnlyElement(streams).iterator();
Message msg = iterator.next();
+
assertTrue(msg.isValid());
ByteBuffer buf = msg.payload();
byte[] data = new byte[buf.remaining()];
[33/50] brooklyn-library git commit: Merge pull request #682 from
grkvlt/0.5-tomcat-version
Posted by he...@apache.org.
Merge pull request #682 from grkvlt/0.5-tomcat-version
Updated Tomcat to 7.0.39
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/1dc5a602
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/1dc5a602
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/1dc5a602
Branch: refs/heads/0.5.0
Commit: 1dc5a6026e33e50920a27f6a8356ebb1dcc7092e
Parents: 400e17f 96465a4
Author: Aled Sage <al...@gmail.com>
Authored: Fri Apr 19 04:29:35 2013 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Apr 19 04:29:35 2013 -0700
----------------------------------------------------------------------
.../src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
[05/50] brooklyn-library git commit: Merge pull request #630 from
aledsage/fix/LanguageUtils-deprecate
Posted by he...@apache.org.
Merge pull request #630 from aledsage/fix/LanguageUtils-deprecate
Fix WebAppIntegrationTest, and deprecate LanguageUtils
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/3d9e3cc6
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/3d9e3cc6
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/3d9e3cc6
Branch: refs/heads/0.5.0
Commit: 3d9e3cc61849b6e9ec75ed913b0b962f7851c3d9
Parents: 720c93c 2a28206
Author: Aled Sage <al...@gmail.com>
Authored: Wed Mar 27 04:29:05 2013 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Mar 27 04:29:05 2013 -0700
----------------------------------------------------------------------
.../FederatingManagementContext.groovy | 3 ++-
.../test/java/example/infinispan/OneA.groovy | 2 --
.../osgi/karaf/KarafContainerEc2LiveTest.java | 4 ++--
.../entity/osgi/karaf/KarafContainerTest.groovy | 6 +++---
.../entity/webapp/WebAppIntegrationTest.groovy | 20 ++++++++++----------
5 files changed, 17 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
[21/50] brooklyn-library git commit: New entity for Apache Kafka
messaging
Posted by he...@apache.org.
New entity for Apache Kafka messaging
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/37e890c2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/37e890c2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/37e890c2
Branch: refs/heads/0.5.0
Commit: 37e890c2b55ffb46ddc1a1425db9fff2e9b73bb5
Parents: 74e4016
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Tue Mar 19 18:16:01 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:06 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/messaging/kafka/Kafka.java | 36 ++++
.../entity/messaging/kafka/KafkaBroker.java | 67 +++++++
.../messaging/kafka/KafkaBrokerDriver.java | 24 +++
.../entity/messaging/kafka/KafkaBrokerImpl.java | 171 ++++++++++++++++
.../messaging/kafka/KafkaBrokerSshDriver.java | 163 ++++++++++++++++
.../entity/messaging/kafka/KafkaCluster.java | 124 ++++++++++++
.../messaging/kafka/KafkaClusterImpl.java | 194 +++++++++++++++++++
.../entity/messaging/kafka/KafkaTopic.java | 57 ++++++
.../entity/messaging/kafka/KafkaZookeeper.java | 51 +++++
.../messaging/kafka/KafkaZookeeperDriver.java | 24 +++
.../messaging/kafka/KafkaZookeeperImpl.java | 128 ++++++++++++
.../kafka/KafkaZookeeperSshDriver.java | 121 ++++++++++++
.../entity/messaging/kafka/server.properties | 120 ++++++++++++
.../entity/messaging/kafka/zookeeper.properties | 25 +++
.../activemq/ActiveMQIntegrationTest.groovy | 6 +-
.../messaging/kafka/KafkaIntegrationTest.groovy | 120 ++++++++++++
.../entity/messaging/kafka/KafkaLiveTest.java | 31 +++
17 files changed, 1461 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
new file mode 100644
index 0000000..7f26f8e
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.util.flags.SetFromFlag;
+
+/**
+ * Shared Kafka broker and zookeeper properties.
+ */
+public interface Kafka {
+
+ BasicConfigKey<String> SUGGESTED_VERSION = new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "0.7.2-incubating");
+
+ @SetFromFlag("downloadUrl")
+ BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
+ Attributes.DOWNLOAD_URL, "http://mirror.catn.com/pub/apache/incubator/kafka/kafka-${version}/kafka-${version}-src.tgz");
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
new file mode 100644
index 0000000..13b8d0d
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.messaging.MessageBroker;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
+import brooklyn.util.flags.SetFromFlag;
+
+/**
+ * An {@link brooklyn.entity.Entity} that represents a single Kafka broker instance.
+ */
+@ImplementedBy(KafkaBrokerImpl.class)
+public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Kafka {
+
+ @SetFromFlag("version")
+ BasicConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
+
+ @SetFromFlag("kafkaPort")
+ PortAttributeSensorAndConfigKey KAFKA_PORT = new PortAttributeSensorAndConfigKey("kafka.port", "Kafka port", "9092+");
+
+ /** Location of the configuration file template to be copied to the server.*/
+ @SetFromFlag("serverConfig")
+ BasicConfigKey<String> SERVER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
+ String.class, "kafka.config.server", "Server configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/server.properties");
+
+ @SetFromFlag("zookeeper")
+ BasicConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicConfigKey<KafkaZookeeper>(KafkaZookeeper.class, "Kafka zookeeper entity");
+
+ AttributeSensor<Long> BROKER_ID = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.id", "Kafka unique broker ID");
+
+ BasicAttributeSensor<Long> FETCH_REQUEST_COUNT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.total", "Fetch request count");
+ BasicAttributeSensor<Long> TOTAL_FETCH_TIME = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.time.total", "Total fetch request processing time (millis)");
+ BasicAttributeSensor<Double> MAX_FETCH_TIME = new BasicAttributeSensor<Double>(Double.class, "kafka.broker.fetch.time.max", "Max fetch request processing time (millis)");
+
+ BasicAttributeSensor<Long> PRODUCE_REQUEST_COUNT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.produce.total", "Produce request count");
+ BasicAttributeSensor<Long> TOTAL_PRODUCE_TIME = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.produce.time.total", "Total produce request processing time (millis)");
+ BasicAttributeSensor<Double> MAX_PRODUCE_TIME = new BasicAttributeSensor<Double>(Double.class, "kafka.broker.produce.time.max", "Max produce request processing time (millis)");
+
+ BasicAttributeSensor<Long> BYTES_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.bytes.received", "Total bytes received");
+ BasicAttributeSensor<Long> BYTES_SENT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.bytes.sent", "Total bytes sent");
+
+ Integer getKafkaPort();
+
+ Long getBrokerId();
+
+ KafkaZookeeper getZookeeper();
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerDriver.java
new file mode 100644
index 0000000..c9caa03
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerDriver.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import brooklyn.entity.basic.SoftwareProcessDriver;
+
+public interface KafkaBrokerDriver extends SoftwareProcessDriver {
+
+ Integer getKafkaPort();
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
new file mode 100644
index 0000000..d76072e
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.entity.messaging.MessageBroker;
+import brooklyn.event.feed.function.FunctionFeed;
+import brooklyn.event.feed.function.FunctionPollConfig;
+import brooklyn.event.feed.jmx.JmxAttributePollConfig;
+import brooklyn.event.feed.jmx.JmxFeed;
+import brooklyn.util.MutableMap;
+
+import com.google.common.base.Functions;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.collect.Sets;
+
+/**
+ * An {@link brooklyn.entity.Entity} that represents a single Kafka broker instance.
+ */
+public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroker, KafkaBroker {
+ private static final Logger log = LoggerFactory.getLogger(KafkaBrokerImpl.class);
+
+ private static final AtomicLong brokers = new AtomicLong(0l);
+
+ public KafkaBrokerImpl() {
+ super();
+ }
+ public KafkaBrokerImpl(Map<?, ?> properties) {
+ this(properties, null);
+ }
+ public KafkaBrokerImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public KafkaBrokerImpl(Map<?, ?> properties, Entity parent) {
+ super(properties, parent);
+ }
+
+ @Override
+ public void postConstruct() {
+ setAttribute(BROKER_ID, brokers.incrementAndGet());
+ }
+
+ @Override
+ public Integer getKafkaPort() { return getAttribute(KAFKA_PORT); }
+
+ @Override
+ public Long getBrokerId() { return getAttribute(BROKER_ID); }
+
+ @Override
+ public KafkaZookeeper getZookeeper() { return getConfig(ZOOKEEPER); }
+
+ public KafkaTopic createTopic(Map properties) {
+ KafkaTopic result = new KafkaTopic(properties, this);
+ Entities.manage(result);
+ result.create();
+ return result;
+ }
+
+ @Override
+ public Class getDriverInterface() {
+ return KafkaBrokerDriver.class;
+ }
+
+ @Override
+ protected Collection<Integer> getRequiredOpenPorts() {
+ Set<Integer> ports = Sets.newLinkedHashSet(super.getRequiredOpenPorts());
+ ports.add(getAttribute(KAFKA_PORT));
+ log.debug("getRequiredOpenPorts detected expanded ports {} for {}", ports, this);
+ return ports;
+ }
+
+ private volatile FunctionFeed functionFeed;
+ private volatile JmxFeed jmxFeed;
+
+ @Override
+ protected void connectSensors() {
+ String socketServerStatsMbean = "kafka:type=kafka.SocketServerStats";
+
+ functionFeed = FunctionFeed.builder()
+ .entity(this)
+ .poll(new FunctionPollConfig<Object, Boolean>(SERVICE_UP)
+ .period(500, TimeUnit.MILLISECONDS)
+ .callable(new Callable<Boolean>() {
+ public Boolean call() throws Exception {
+ return getDriver().isRunning();
+ }
+ })
+ .onError(Functions.constant(Boolean.FALSE)))
+ .build();
+
+ jmxFeed = JmxFeed.builder()
+ .entity(this)
+ .period(500, TimeUnit.MILLISECONDS)
+ .pollAttribute(new JmxAttributePollConfig<Long>(FETCH_REQUEST_COUNT)
+ .objectName(socketServerStatsMbean)
+ .attributeName("NumFetchRequests")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(TOTAL_FETCH_TIME)
+ .objectName(socketServerStatsMbean)
+ .attributeName("TotalFetchRequestMs")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Double>(MAX_FETCH_TIME)
+ .objectName(socketServerStatsMbean)
+ .attributeName("MaxFetchRequestMs")
+ .onError(Functions.constant(-1.0d)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(PRODUCE_REQUEST_COUNT)
+ .objectName(socketServerStatsMbean)
+ .attributeName("NumProduceRequests")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(TOTAL_PRODUCE_TIME)
+ .objectName(socketServerStatsMbean)
+ .attributeName("TotalProduceRequestMs")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Double>(MAX_PRODUCE_TIME)
+ .objectName(socketServerStatsMbean)
+ .attributeName("MaxProduceRequestMs")
+ .onError(Functions.constant(-1.0d)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(BYTES_RECEIVED)
+ .objectName(socketServerStatsMbean)
+ .attributeName("TotalBytesRead")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(BYTES_SENT)
+ .objectName(socketServerStatsMbean)
+ .attributeName("TotalBytesWritten")
+ .onError(Functions.constant(-1l)))
+ .build();
+ }
+
+ @Override
+ public void disconnectSensors() {
+ super.disconnectSensors();
+ if (functionFeed != null) functionFeed.stop();
+ if (jmxFeed != null) jmxFeed.stop();
+ }
+
+ @Override
+ protected ToStringHelper toStringHelper() {
+ return super.toStringHelper().add("kafkaPort", getKafkaPort());
+ }
+
+ @Override
+ public void setBrokerUrl() {
+ // TODO
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
new file mode 100644
index 0000000..e6c9e4e
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.BrooklynVersion;
+import brooklyn.entity.basic.lifecycle.CommonCommands;
+import brooklyn.entity.drivers.downloads.DownloadResolver;
+import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.MutableMap;
+import brooklyn.util.NetworkUtils;
+import brooklyn.util.ResourceUtils;
+import brooklyn.util.jmx.jmxrmi.JmxRmiAgent;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+public class KafkaBrokerSshDriver extends JavaSoftwareProcessSshDriver implements KafkaBrokerDriver {
+
+ private static final Logger log = LoggerFactory.getLogger(KafkaBrokerSshDriver.class);
+
+ private String expandedInstallDir;
+
+ public KafkaBrokerSshDriver(KafkaBrokerImpl entity, SshMachineLocation machine) {
+ super(entity, machine);
+ }
+
+ @Override
+ protected String getLogFileLocation() { return getRunDir()+"/kafka-log"; }
+
+ @Override
+ public Integer getKafkaPort() { return entity.getAttribute(KafkaBroker.KAFKA_PORT); }
+
+ private String getExpandedInstallDir() {
+ if (expandedInstallDir == null) throw new IllegalStateException("expandedInstallDir is null; most likely install was not called");
+ return expandedInstallDir;
+ }
+
+ @Override
+ public void install() {
+ DownloadResolver resolver = entity.getManagementContext().getEntityDownloadsManager().newDownloader(this);
+ List<String> urls = resolver.getTargets();
+ String saveAs = resolver.getFilename();
+ expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("kafka-%s-src", getVersion()));
+
+ List<String> commands = new LinkedList<String>();
+ commands.addAll(CommonCommands.downloadUrlAs(urls, saveAs));
+ commands.add(CommonCommands.INSTALL_TAR);
+ commands.add("tar xzfv "+saveAs);
+ commands.add("cd "+expandedInstallDir);
+ commands.add("./sbt update");
+ commands.add("./sbt package");
+
+ newScript(INSTALLING)
+ .failOnNonZeroResultCode()
+ .body.append(commands)
+ .execute();
+ }
+
+ @Override
+ public void customize() {
+ NetworkUtils.checkPortsValid(MutableMap.of("kafkaPort", getKafkaPort()));
+ newScript(CUSTOMIZING)
+ .failOnNonZeroResultCode()
+ .body.append(format("cp -R %s/* %s", getExpandedInstallDir(), getRunDir()))
+ .execute();
+
+ String serverConfig = entity.getConfig(KafkaBroker.SERVER_CONFIG_TEMPLATE);
+ copyTemplate(serverConfig, "server.properties");
+
+ // Copy JMX agent Jar to server
+ getMachine().copyTo(new ResourceUtils(this).getResourceFromUrl(getJmxRmiAgentJarUrl()), getJmxRmiAgentJarDestinationFilePath());
+ }
+
+ public String getJmxRmiAgentJarBasename() {
+ return "brooklyn-jmxrmi-agent-" + BrooklynVersion.get() + ".jar";
+ }
+
+ public String getJmxRmiAgentJarUrl() {
+ return "classpath://" + getJmxRmiAgentJarBasename();
+ }
+
+ public String getJmxRmiAgentJarDestinationFilePath() {
+ return getRunDir() + "/" + getJmxRmiAgentJarBasename();
+ }
+
+ @Override
+ public void launch() {
+ newScript(ImmutableMap.of("usePidFile", getPidFile()), LAUNCHING)
+ .failOnNonZeroResultCode()
+ .body.append("nohup ./bin/kafka-server-start.sh ./server.properties > console.out 2>&1 &")
+ .execute();
+ }
+
+ public String getPidFile() { return getRunDir() + "/kafka.pid"; }
+
+ @Override
+ public boolean isRunning() {
+ return newScript(ImmutableMap.of("usePidFile", getPidFile()), CHECK_RUNNING).execute() == 0;
+ }
+
+ @Override
+ public void stop() {
+ newScript(ImmutableMap.of("usePidFile", false), STOPPING)
+ .body.append("ps ax | grep kafka\\.Kafka | awk '{print $1}' | xargs kill")
+ .body.append("ps ax | grep kafka\\.Kafka | awk '{print $1}' | xargs kill -9")
+ .execute();
+ }
+
+ @Override
+ protected Map<String, ?> getJmxJavaSystemProperties() {
+ return MutableMap.<String, Object> builder()
+ .put(JmxRmiAgent.JMX_SERVER_PORT_PROPERTY, getJmxPort())
+ .put(JmxRmiAgent.RMI_REGISTRY_PORT_PROPERTY, getRmiServerPort())
+ .put("com.sun.management.jmxremote.ssl", false)
+ .put("com.sun.management.jmxremote.authenticate", false)
+ .put("java.rmi.server.hostname", getHostname())
+ .build();
+ }
+
+ @Override
+ protected List<String> getJmxJavaConfigOptions() {
+ return ImmutableList.of("-javaagent:" + getJmxRmiAgentJarDestinationFilePath());
+ }
+
+ /**
+ * Use RMI agent to provide JMX.
+ */
+ @Override
+ public Map<String, String> getShellEnvironment() {
+ Map<String, String> orig = super.getShellEnvironment();
+ String kafkaJmxOpts = orig.remove("JAVA_OPTS");
+ return MutableMap.<String, String>builder()
+ .putAll(orig)
+ .put("KAFKA_JMX_OPTS", kafkaJmxOpts)
+ .build();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
new file mode 100644
index 0000000..45843f3
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import brooklyn.catalog.Catalog;
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.basic.ConfigurableEntityFactory;
+import brooklyn.entity.group.Cluster;
+import brooklyn.entity.group.DynamicCluster;
+import brooklyn.entity.proxying.BasicEntitySpec;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.entity.trait.Resizable;
+import brooklyn.entity.trait.Startable;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.util.flags.SetFromFlag;
+
+/**
+ * This entity contains the sub-groups and entities that go in to a single location (e.g. datacenter)
+ * to provide Kafka cluster functionality.
+ * <p>
+ * You can customise the broker by customising the factory (by reference in calling code)
+ * or supplying your own factory (as a config flag).
+ * <p>
+ * The contents of this group entity are:
+ * <ul>
+ * <li>a {@link brooklyn.entity.group.DynamicCluster} of {@link KafkaBroker}s
+ * <li>a {@link KafkaZookeeper}
+ * <li>a {@link brooklyn.policy.Policy} to resize the DynamicCluster
+ * </ul>
+ */
+@SuppressWarnings({ "unchecked", "rawtypes" })
+@Catalog(name="Kafka", description="Apache Kafka is a distributed publish-subscribe messaging system")
+@ImplementedBy(KafkaClusterImpl.class)
+public interface KafkaCluster extends Entity, Startable, Resizable {
+
+ public static class Spec<T extends KafkaCluster, S extends Spec<T,S>> extends BasicEntitySpec<T,S> {
+
+ private static class ConcreteSpec extends Spec<KafkaCluster, ConcreteSpec> {
+ ConcreteSpec() {
+ super(KafkaCluster.class);
+ }
+ }
+
+ public static Spec<KafkaCluster, ?> newInstance() {
+ return new ConcreteSpec();
+ }
+
+ protected Spec(Class<T> type) {
+ super(type);
+ }
+
+ public S initialSize(int val) {
+ configure(INITIAL_SIZE, 1);
+ return self();
+ }
+
+ public S zookeeper(KafkaZookeeper val) {
+ configure(ZOOKEEPER, val);
+ return self();
+ }
+
+ public S brokerSpec(EntitySpec<KafkaBroker> val) {
+ configure(BROKER_SPEC, val);
+ return self();
+ }
+
+ public S brokerFactory(ConfigurableEntityFactory<KafkaBroker> val) {
+ configure(BROKER_FACTORY, val);
+ return self();
+ }
+ }
+
+ @SetFromFlag("initialSize")
+ public static ConfigKey<Integer> INITIAL_SIZE = new BasicConfigKey<Integer>(Cluster.INITIAL_SIZE, 1);
+
+ @SetFromFlag("controller")
+ public static BasicAttributeSensorAndConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicAttributeSensorAndConfigKey<KafkaZookeeper>(
+ KafkaZookeeper.class, "kafkacluster.zookeeper", "Kafka zookeeper for the cluster; if null a default will created");
+
+ @SetFromFlag("zookeeperSpec")
+ public static BasicAttributeSensorAndConfigKey<EntitySpec<KafkaZookeeper>> ZOOKEEPER_SPEC = new BasicAttributeSensorAndConfigKey(
+ EntitySpec.class, "kafkacluster.zookeeperSpec", "Spec for creating the kafka zookeeper");
+
+ /** Factory to create a Kafka broker, given flags */
+ @SetFromFlag("brokerFactory")
+ public static BasicAttributeSensorAndConfigKey<ConfigurableEntityFactory<KafkaBroker>> BROKER_FACTORY = new BasicAttributeSensorAndConfigKey(
+ ConfigurableEntityFactory.class, "kafkacluster.brokerFactory", "Factory to create a Kafka broker");
+
+ /** Spec for Kafka broker entiites to be created */
+ @SetFromFlag("brokerSpec")
+ public static BasicAttributeSensorAndConfigKey<EntitySpec<KafkaBroker>> BROKER_SPEC = new BasicAttributeSensorAndConfigKey(
+ EntitySpec.class, "kafkacluster.brokerSpec", "Spec for Kafka broker entiites to be created");
+
+ public static AttributeSensor<DynamicCluster> CLUSTER = new BasicAttributeSensor<DynamicCluster>(
+ DynamicCluster.class, "kafkacluster.cluster", "Underlying Kafka broker cluster");
+
+ public static final AttributeSensor<String> HOSTNAME = Attributes.HOSTNAME;
+
+ public KafkaZookeeper getZookeeper();
+
+ public ConfigurableEntityFactory<KafkaBroker> getBrokerFactory();
+
+ public DynamicCluster getCluster();
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
new file mode 100644
index 0000000..969a140
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.enricher.basic.SensorPropagatingEnricher;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractEntity;
+import brooklyn.entity.basic.ConfigurableEntityFactory;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.group.DynamicCluster;
+import brooklyn.entity.proxying.BasicEntitySpec;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.proxying.WrappingEntitySpec;
+import brooklyn.entity.trait.Startable;
+import brooklyn.event.feed.ConfigToAttributes;
+import brooklyn.location.Location;
+import brooklyn.util.MutableList;
+import brooklyn.util.MutableMap;
+import brooklyn.util.exceptions.Exceptions;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+/**
+ * Implementation of a Kafka cluster containing a {@link KafkaZookeeper} node and a group of {@link KafkaBroker}s.
+ */
+public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
+
+ public static final Logger log = LoggerFactory.getLogger(KafkaClusterImpl.class);
+
+ public KafkaClusterImpl() {
+ this(MutableMap.of(), null);
+ }
+ public KafkaClusterImpl(Map<?, ?> flags) {
+ this(flags, null);
+ }
+ public KafkaClusterImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public KafkaClusterImpl(Map<?, ?> flags, Entity parent) {
+ super(flags, parent);
+ setAttribute(SERVICE_UP, false);
+ }
+
+ @Override
+ public void postConstruct() {
+ ConfigToAttributes.apply(this, BROKER_FACTORY);
+ ConfigToAttributes.apply(this, BROKER_SPEC);
+ ConfigToAttributes.apply(this, ZOOKEEPER);
+ ConfigToAttributes.apply(this, ZOOKEEPER_SPEC);
+
+ log.debug("creating zookeeper child for {}", this);
+ KafkaZookeeper zookeeper = getAttribute(ZOOKEEPER);
+ if (zookeeper == null) {
+ EntitySpec<KafkaZookeeper> zookeeperSpec = getAttribute(ZOOKEEPER_SPEC);
+ if (zookeeperSpec == null) {
+ log.debug("creating controller using default spec for {}", this);
+ zookeeperSpec = BasicEntitySpec.newInstance(KafkaZookeeper.class);
+ setAttribute(ZOOKEEPER_SPEC, zookeeperSpec);
+ } else {
+ log.debug("creating controller using custom spec for {}", this);
+ }
+ zookeeper = getEntityManager().createEntity(WrappingEntitySpec.newInstance(zookeeperSpec).parent(this));
+ if (Entities.isManaged(this)) Entities.manage(zookeeper);
+ setAttribute(ZOOKEEPER, zookeeper);
+ }
+
+ log.debug("creating cluster child for {}", this);
+ ConfigurableEntityFactory<KafkaBroker> brokerFactory = getAttribute(BROKER_FACTORY);
+ EntitySpec<KafkaBroker> brokerSpec = getAttribute(BROKER_SPEC);
+ if (brokerFactory == null && brokerSpec == null) {
+ log.debug("creating default broker spec for {}", this);
+ brokerSpec = BasicEntitySpec.newInstance(KafkaBroker.class);
+ setAttribute(BROKER_SPEC, brokerSpec);
+ }
+ // Note relies on initial_size being inherited by DynamicCluster, because key id is identical
+ // We add the zookeeper configuration to the KafkaBroker specification or factory here
+ Map<String,Object> flags;
+ if (brokerSpec != null) {
+ flags = MutableMap.<String, Object>of("memberSpec", WrappingEntitySpec.newInstance(brokerSpec).configure(KafkaBroker.ZOOKEEPER, zookeeper));
+ } else {
+ brokerFactory.configure(KafkaBroker.ZOOKEEPER, zookeeper);
+ flags = MutableMap.<String, Object>of("factory", brokerFactory);
+ }
+ DynamicCluster cluster = getEntityManager().createEntity(BasicEntitySpec.newInstance(DynamicCluster.class)
+ .parent(this)
+ .configure(flags));
+ if (Entities.isManaged(this)) Entities.manage(cluster);
+ setAttribute(CLUSTER, cluster);
+ }
+
+ @Override
+ public KafkaZookeeper getZookeeper() {
+ return getAttribute(ZOOKEEPER);
+ }
+
+ @Override
+ public synchronized ConfigurableEntityFactory<KafkaBroker> getBrokerFactory() {
+ return (ConfigurableEntityFactory<KafkaBroker>) getAttribute(BROKER_FACTORY);
+ }
+
+ @Override
+ public synchronized DynamicCluster getCluster() {
+ return getAttribute(CLUSTER);
+ }
+
+ @Override
+ public void start(Collection<? extends Location> locations) {
+ if (isLegacyConstruction()) {
+ postConstruct();
+ }
+
+ if (locations.isEmpty()) locations = this.getLocations();
+ Iterables.getOnlyElement(locations); //assert just one
+ addLocations(locations);
+
+ List<Entity> childrenToStart = MutableList.<Entity>of(getCluster());
+ // Set the KafkaZookeeper entity as child of cluster, if it does not already have a parent
+ if (getZookeeper().getParent() == null) {
+ addChild(getZookeeper());
+ }
+ // And only start zookeeper if we are parent
+ if (this.equals(getZookeeper().getParent())) childrenToStart.add(getZookeeper());
+ try {
+ Entities.invokeEffectorList(this, childrenToStart, Startable.START, ImmutableMap.of("locations", locations)).get();
+ } catch (InterruptedException e) {
+ throw Exceptions.propagate(e);
+ } catch (ExecutionException e) {
+ throw Exceptions.propagate(e);
+ }
+
+ connectSensors();
+ }
+
+ @Override
+ public void stop() {
+ if (this.equals(getZookeeper().getParent())) {
+ getZookeeper().stop();
+ }
+ getCluster().stop();
+
+ super.getLocations().clear();
+ setAttribute(SERVICE_UP, false);
+ }
+
+ @Override
+ public void restart() {
+ // TODO prod the entities themselves to restart, instead?
+ Collection<Location> locations = Lists.newArrayList(getLocations());
+
+ stop();
+ start(locations);
+ }
+
+ void connectSensors() {
+ SensorPropagatingEnricher.newInstanceListeningToAllSensorsBut(getCluster(), SERVICE_UP)
+ .addToEntityAndEmitAll(this);
+ SensorPropagatingEnricher.newInstanceListeningTo(getZookeeper(), SERVICE_UP)
+ .addToEntityAndEmitAll(this);
+ }
+
+ @Override
+ public Integer resize(Integer desiredSize) {
+ return getCluster().resize(desiredSize);
+ }
+
+ /** @return the current size of the group. */
+ public Integer getCurrentSize() {
+ return getCluster().getCurrentSize();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaTopic.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaTopic.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaTopic.java
new file mode 100644
index 0000000..5f50c6d
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaTopic.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import java.util.Map;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractEntity;
+import brooklyn.entity.messaging.Topic;
+import brooklyn.util.MutableMap;
+
+public class KafkaTopic extends AbstractEntity implements Topic {
+
+ public KafkaTopic() {
+ super(MutableMap.of(), null);
+ }
+ public KafkaTopic(Map properties) {
+ super(properties, null);
+ }
+ public KafkaTopic(Entity parent) {
+ super(MutableMap.of(), parent);
+ }
+ public KafkaTopic(Map properties, Entity parent) {
+ super(properties, parent);
+ }
+
+ // kafka:type=kafka.logs.${topicName}
+
+ @Override
+ public String getTopicName() {
+ return null; // TODO
+ }
+
+ @Override
+ public void create() {
+ // TODO
+ }
+
+ @Override
+ public void delete() {
+ // TODO
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
new file mode 100644
index 0000000..8e1b5da
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
+import brooklyn.util.flags.SetFromFlag;
+
+/**
+ * An {@link brooklyn.entity.Entity} that represents a single Kafka zookeeper instance.
+ */
+@ImplementedBy(KafkaZookeeperImpl.class)
+public interface KafkaZookeeper extends SoftwareProcess, UsesJmx, Kafka {
+
+ @SetFromFlag("version")
+ BasicConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
+
+ @SetFromFlag("zookeeperPort")
+ PortAttributeSensorAndConfigKey ZOOKEEPER_PORT = new PortAttributeSensorAndConfigKey("zookeeper.port", "Zookeeper port", "2181+");
+
+ /** Location of the configuration file template to be copied to the server.*/
+ @SetFromFlag("zookeeperConfig")
+ BasicConfigKey<String> ZOOKEEPER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
+ String.class, "kafka.config.zookeeper", "Zookeeper configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/zookeeper.properties");
+
+ BasicAttributeSensor<Long> OUTSTANDING_REQUESTS = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.outstandingRequests", "Outstanding request count");
+ BasicAttributeSensor<Long> PACKETS_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.received", "Total packets received");
+ BasicAttributeSensor<Long> PACKETS_SENT = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.sent", "Total packets sent");
+
+ Integer getZookeeperPort();
+
+ String getHostname();
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperDriver.java
new file mode 100644
index 0000000..ac1c8fe
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperDriver.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import brooklyn.entity.basic.SoftwareProcessDriver;
+
+public interface KafkaZookeeperDriver extends SoftwareProcessDriver {
+
+ Integer getZookeeperPort();
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
new file mode 100644
index 0000000..d941411
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.entity.messaging.qpid.QpidBroker;
+import brooklyn.event.feed.function.FunctionFeed;
+import brooklyn.event.feed.function.FunctionPollConfig;
+import brooklyn.event.feed.jmx.JmxAttributePollConfig;
+import brooklyn.event.feed.jmx.JmxFeed;
+import brooklyn.util.MutableMap;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.collect.Sets;
+
+/**
+ * An {@link brooklyn.entity.Entity} that represents a single Kafka zookeeper instance.
+ */
+public class KafkaZookeeperImpl extends SoftwareProcessImpl implements KafkaZookeeper {
+ private static final Logger log = LoggerFactory.getLogger(KafkaZookeeperImpl.class);
+
+ public KafkaZookeeperImpl() {
+ super();
+ }
+ public KafkaZookeeperImpl(Map<?, ?> properties) {
+ this(properties, null);
+ }
+ public KafkaZookeeperImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public KafkaZookeeperImpl(Map<?, ?> properties, Entity parent) {
+ super(properties, parent);
+ }
+
+ @Override
+ public Integer getZookeeperPort() { return getAttribute(ZOOKEEPER_PORT); }
+
+ @Override
+ public String getHostname() { return getAttribute(HOSTNAME); }
+
+ @Override
+ public Class getDriverInterface() {
+ return KafkaZookeeperDriver.class;
+ }
+
+ @Override
+ protected Collection<Integer> getRequiredOpenPorts() {
+ Set<Integer> ports = Sets.newLinkedHashSet(super.getRequiredOpenPorts());
+ ports.add(getAttribute(ZOOKEEPER_PORT));
+ log.debug("getRequiredOpenPorts detected expanded ports {} for {}", ports, this);
+ return ports;
+ }
+
+ private volatile FunctionFeed functionFeed;
+ private volatile JmxFeed jmxFeed;
+
+ @Override
+ protected void connectSensors() {
+ String zookeeperMbean = "org.apache.ZooKeeperService:name0=StandaloneServer_port-1";
+
+ functionFeed = FunctionFeed.builder()
+ .entity(this)
+ .poll(new FunctionPollConfig<Object, Boolean>(SERVICE_UP)
+ .period(500, TimeUnit.MILLISECONDS)
+ .callable(new Callable<Boolean>() {
+ public Boolean call() throws Exception {
+ return getDriver().isRunning();
+ }
+ })
+ .onError(Functions.constant(Boolean.FALSE)))
+ .build();
+
+ jmxFeed = JmxFeed.builder()
+ .entity(this)
+ .period(500, TimeUnit.MILLISECONDS)
+ .pollAttribute(new JmxAttributePollConfig<Long>(OUTSTANDING_REQUESTS)
+ .objectName(zookeeperMbean)
+ .attributeName("OutstandingRequests")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(PACKETS_RECEIVED)
+ .objectName(zookeeperMbean)
+ .attributeName("PacketsReceived")
+ .onError(Functions.constant(-1l)))
+ .pollAttribute(new JmxAttributePollConfig<Long>(PACKETS_SENT)
+ .objectName(zookeeperMbean)
+ .attributeName("PacketsSent")
+ .onError(Functions.constant(-1l)))
+ .build();
+ }
+
+ @Override
+ public void disconnectSensors() {
+ super.disconnectSensors();
+ if (functionFeed != null) functionFeed.stop();
+ if (jmxFeed != null) jmxFeed.stop();
+ }
+
+ @Override
+ protected ToStringHelper toStringHelper() {
+ return super.toStringHelper().add("zookeeperPort", getZookeeperPort());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
new file mode 100644
index 0000000..4310489
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import static java.lang.String.format;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.basic.lifecycle.CommonCommands;
+import brooklyn.entity.drivers.downloads.DownloadResolver;
+import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.MutableMap;
+import brooklyn.util.NetworkUtils;
+
+import com.google.common.collect.ImmutableMap;
+
+public class KafkaZookeeperSshDriver extends JavaSoftwareProcessSshDriver implements KafkaZookeeperDriver {
+
+ private static final Logger log = LoggerFactory.getLogger(KafkaZookeeperSshDriver.class);
+
+ private String expandedInstallDir;
+
+ public KafkaZookeeperSshDriver(KafkaZookeeperImpl entity, SshMachineLocation machine) {
+ super(entity, machine);
+ }
+
+ @Override
+ protected String getLogFileLocation() { return getRunDir()+"/kafka-log"; }
+
+ @Override
+ public Integer getZookeeperPort() { return entity.getAttribute(KafkaZookeeper.ZOOKEEPER_PORT); }
+
+ private String getExpandedInstallDir() {
+ if (expandedInstallDir == null) throw new IllegalStateException("expandedInstallDir is null; most likely install was not called");
+ return expandedInstallDir;
+ }
+
+ @Override
+ public void install() {
+ DownloadResolver resolver = entity.getManagementContext().getEntityDownloadsManager().newDownloader(this);
+ List<String> urls = resolver.getTargets();
+ String saveAs = resolver.getFilename();
+ expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("kafka-%s-src", getVersion()));
+
+ List<String> commands = new LinkedList<String>();
+ commands.addAll(CommonCommands.downloadUrlAs(urls, saveAs));
+ commands.add(CommonCommands.INSTALL_TAR);
+ commands.add("tar xzfv "+saveAs);
+ commands.add("cd "+expandedInstallDir);
+ commands.add("./sbt update");
+ commands.add("./sbt package");
+
+ newScript(INSTALLING)
+ .failOnNonZeroResultCode()
+ .body.append(commands)
+ .execute();
+ }
+
+ @Override
+ public void customize() {
+ NetworkUtils.checkPortsValid(MutableMap.of("zookeeperPort", getZookeeperPort()));
+ newScript(CUSTOMIZING)
+ .failOnNonZeroResultCode()
+ .body.append(format("cp -R %s/* %s", getExpandedInstallDir(), getRunDir()))
+ .execute();
+
+ String serverConfig = entity.getConfig(KafkaZookeeper.ZOOKEEPER_CONFIG_TEMPLATE);
+ copyTemplate(serverConfig, "zookeeper.properties");
+ }
+
+ @Override
+ public void launch() {
+ newScript(ImmutableMap.of("usePidFile", getPidFile()), LAUNCHING)
+ .failOnNonZeroResultCode()
+ .body.append("nohup ./bin/zookeeper-server-start.sh ./zookeeper.properties > console.out 2>&1 &")
+ .execute();
+ }
+
+ public String getPidFile() { return getRunDir() + "/kafka.pid"; }
+
+ @Override
+ public boolean isRunning() {
+ return newScript(ImmutableMap.of("usePidFile", getPidFile()), CHECK_RUNNING).execute() == 0;
+ }
+
+ @Override
+ public void stop() {
+ newScript(ImmutableMap.of("usePidFile", false), STOPPING)
+ .body.append("ps ax | grep quorum\\.QuorumPeerMain | awk '{print $1}' | xargs kill")
+ .body.append("ps ax | grep quorum\\.QuorumPeerMain | awk '{print $1}' | xargs kill -9")
+ .execute();
+ }
+
+ @Override
+ public Map<String, String> getShellEnvironment() {
+ Map<String, String> orig = super.getShellEnvironment();
+ return MutableMap.<String, String>builder()
+ .put("KAFKA_JMX_OPTS", orig.get("JAVA_OPTS"))
+ .build();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/server.properties
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/server.properties b/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/server.properties
new file mode 100644
index 0000000..b440076
--- /dev/null
+++ b/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/server.properties
@@ -0,0 +1,120 @@
+[#ftl]
+# Copyright 2013 by Cloudsoft Corp.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+##
+# KafkaBroker configuration template for Brooklyn
+#
+# see kafka.server.KafkaConfig for additional details and defaults
+##
+
+############################# Server Basics #############################
+# The id of the broker. This must be set to a unique integer for each broker.
+brokerid=${entity.brokerId?c}
+
+# Hostname the broker will advertise to consumers. If not set, kafka will use the value returned
+# from InetAddress.getLocalHost(). If there are multiple interfaces getLocalHost
+# may not be what you want.
+hostname=${driver.hostname}
+
+
+############################# Socket Server Settings #############################
+
+# The port the socket server listens on
+port=${entity.kafkaPort?c}
+
+# The number of processor threads the socket server uses for receiving and answering requests.
+# Defaults to the number of cores on the machine
+num.threads=8
+
+# The send buffer (SO_SNDBUF) used by the socket server
+socket.send.buffer=1048576
+
+# The receive buffer (SO_RCVBUF) used by the socket server
+socket.receive.buffer=1048576
+
+# The maximum size of a request that the socket server will accept (protection against OOM)
+max.socket.request.bytes=104857600
+
+
+############################# Log Basics #############################
+
+# The directory under which to store log files
+log.dir=${driver.runDir}/kafka-logs
+
+# The number of logical partitions per topic per server. More partitions allow greater parallelism
+# for consumption, but also mean more files.
+num.partitions=1
+
+# Overrides for for the default given by num.partitions on a per-topic basis
+#topic.partition.count.map=topic1:3, topic2:4
+
+############################# Log Flush Policy #############################
+
+# The following configurations control the flush of data to disk. This is the most
+# important performance knob in kafka.
+# There are a few important trade-offs here:
+# 1. Durability: Unflushed data is at greater risk of loss in the event of a crash.
+# 2. Latency: Data is not made available to consumers until it is flushed (which adds latency).
+# 3. Throughput: The flush is generally the most expensive operation.
+# The settings below allow one to configure the flush policy to flush data after a period of time or
+# every N messages (or both). This can be done globally and overridden on a per-topic basis.
+
+# The number of messages to accept before forcing a flush of data to disk
+log.flush.interval=10000
+
+# The maximum amount of time a message can sit in a log before we force a flush
+log.default.flush.interval.ms=1000
+
+# Per-topic overrides for log.default.flush.interval.ms
+#topic.flush.intervals.ms=topic1:1000, topic2:3000
+
+# The interval (in ms) at which logs are checked to see if they need to be flushed to disk.
+log.default.flush.scheduler.interval.ms=1000
+
+############################# Log Retention Policy #############################
+
+# The following configurations control the disposal of log segments. The policy can
+# be set to delete segments after a period of time, or after a given size has accumulated.
+# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens
+# from the end of the log.
+
+# The minimum age of a log file to be eligible for deletion
+log.retention.hours=168
+
+# A size-based retention policy for logs. Segments are pruned from the log as long as the remaining
+# segments don't drop below log.retention.size.
+#log.retention.size=1073741824
+
+# The maximum size of a log segment file. When this size is reached a new log segment will be created.
+log.file.size=536870912
+
+# The interval at which log segments are checked to see if they can be deleted according
+# to the retention policies
+log.cleanup.interval.mins=1
+
+############################# Zookeeper #############################
+
+# Enable connecting to zookeeper
+enable.zookeeper=true
+
+# Zk connection string (see zk docs for details).
+# This is a comma separated host:port pairs, each corresponding to a zk
+# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
+# You can also append an optional chroot string to the urls to specify the
+# root directory for all kafka znodes.
+zk.connect=${entity.zookeeper.hostname}:${entity.zookeeper.zookeeperPort?c}
+
+# Timeout in ms for connecting to zookeeper
+zk.connectiontimeout.ms=1000000
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/zookeeper.properties
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/zookeeper.properties b/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/zookeeper.properties
new file mode 100644
index 0000000..4827480
--- /dev/null
+++ b/software/messaging/src/main/resources/brooklyn/entity/messaging/kafka/zookeeper.properties
@@ -0,0 +1,25 @@
+[#ftl]
+# Copyright 2013 by Cloudsoft Corp.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+##
+# KafkaZookeeper configuration template for Brooklyn
+##
+
+# the directory where the snapshot is stored.
+dataDir=${driver.runDir}/zookeeper
+# the port at which the clients will connect
+clientPort=${entity.zookeeperPort?c}
+# disable the per-ip limit on the number of connections since this is a non-production config
+maxClientCnxns=0
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
index f50de0c..28ff308 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
@@ -49,7 +49,11 @@ public class ActiveMQIntegrationTest {
@AfterMethod(groups = "Integration")
public void shutdown() {
- if (app != null) Entities.destroyAll(app);
+ try {
+ if (app != null) Entities.destroyAll(app);
+ } catch (Exception e) {
+ log.warn("Error stopping entities", e);
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
new file mode 100644
index 0000000..0943dcd
--- /dev/null
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import static brooklyn.test.TestUtils.*
+import static java.util.concurrent.TimeUnit.*
+import static org.testng.Assert.*
+
+import java.util.concurrent.TimeUnit
+
+import javax.jms.Connection
+import javax.jms.MessageConsumer
+import javax.jms.MessageProducer
+import javax.jms.Queue
+import javax.jms.Session
+import javax.jms.TextMessage
+
+import org.apache.activemq.ActiveMQConnectionFactory
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+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.proxying.BasicEntitySpec
+import brooklyn.entity.trait.Startable
+import brooklyn.location.Location
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation
+import brooklyn.test.entity.TestApplication
+import brooklyn.util.internal.TimeExtras
+
+/**
+ * Test the operation of the {@link ActiveMQBroker} class.
+ */
+public class KafkaIntegrationTest {
+ private static final Logger log = LoggerFactory.getLogger(KafkaIntegrationTest.class)
+
+ static { TimeExtras.init() }
+
+ private TestApplication app
+ private Location testLocation
+
+ @BeforeMethod(groups = "Integration")
+ public void setup() {
+ app = ApplicationBuilder.builder(TestApplication.class).manage();
+ testLocation = new LocalhostMachineProvisioningLocation()
+ }
+
+ @AfterMethod(groups = "Integration")
+ public void shutdown() {
+ if (app != null) Entities.destroyAll(app);
+ }
+
+ /**
+ * Test that we can start a zookeeper.
+ */
+ @Test(groups = "Integration")
+ public void testZookeeper() {
+ KafkaZookeeper zookeeper = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaZookeeper.class));
+
+ zookeeper.start([ testLocation ])
+ executeUntilSucceedsWithShutdown(zookeeper, timeout:600*TimeUnit.SECONDS) {
+ assertTrue zookeeper.getAttribute(Startable.SERVICE_UP)
+ }
+ assertFalse zookeeper.getAttribute(Startable.SERVICE_UP)
+ }
+
+ /**
+ * Test that we can start a broker and zookeeper together.
+ */
+ @Test(groups = "Integration")
+ public void testBrokerPlusZookeeper() {
+ KafkaZookeeper zookeeper = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaZookeeper.class));
+ KafkaBroker broker = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaBroker.class).configure(KafkaBroker.ZOOKEEPER, zookeeper));
+
+ zookeeper.start([ testLocation ])
+ executeUntilSucceeds(timeout:600*TimeUnit.SECONDS) {
+ assertTrue zookeeper.getAttribute(Startable.SERVICE_UP)
+ }
+
+ broker.start([ testLocation ])
+ executeUntilSucceeds(timeout:600*TimeUnit.SECONDS) {
+ assertTrue broker.getAttribute(Startable.SERVICE_UP)
+ }
+ }
+
+ /**
+ * Test that we can start a cluster with zookeeper and one broker.
+ */
+ @Test(groups = "Integration")
+ public void testSingleBrokerCluster() {
+ KafkaCluster cluster = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaCluster.class).configure(KafkaCluster.INITIAL_SIZE, 1));
+
+ cluster.start([ testLocation ])
+ executeUntilSucceedsWithShutdown(cluster, timeout:600*TimeUnit.SECONDS) {
+ assertTrue cluster.getAttribute(Startable.SERVICE_UP)
+ Entities.dumpInfo(cluster)
+ }
+ assertFalse cluster.getAttribute(Startable.SERVICE_UP)
+ }
+
+ // TODO test with API sending messages
+ // TODO test that sensors update
+ // TODO add demo application
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/37e890c2/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java
new file mode 100644
index 0000000..6229b4e
--- /dev/null
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import brooklyn.entity.AbstractEc2LiveTest;
+import brooklyn.location.Location;
+
+public class KafkaLiveTest extends AbstractEc2LiveTest {
+
+ /**
+ * Test Kafka cluster operation.
+ */
+ @Override
+ protected void doTest(Location loc) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+}
[08/50] brooklyn-library git commit: Rename
AbstractEntity.postConstruct() to init()
Posted by he...@apache.org.
Rename AbstractEntity.postConstruct() to init()
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/3c0588c5
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/3c0588c5
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/3c0588c5
Branch: refs/heads/0.5.0
Commit: 3c0588c55cab9a213d5dcef3050a26c689316321
Parents: 8c9b039
Author: Aled Sage <al...@gmail.com>
Authored: Thu Mar 28 14:30:35 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Mar 28 14:30:35 2013 +0000
----------------------------------------------------------------------
.../java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java | 2 +-
.../java/brooklyn/extras/whirr/WebFabricWithHadoopExample.java | 2 +-
.../src/main/java/brooklyn/demo/CumulusRDFApplication.java | 2 +-
.../main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java | 4 ++--
.../java/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java | 4 ++--
.../brooklyn/entity/nosql/cassandra/CassandraClusterImpl.java | 4 ++--
.../entity/webapp/ControlledDynamicWebAppClusterImpl.java | 4 ++--
7 files changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0588c5/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
index c1e4fcf..683938d 100644
--- a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
@@ -75,7 +75,7 @@ public class WebClusterWithHadoopExample extends AbstractApplication implements
}
@Override
- public void postConstruct() {
+ public void init() {
StringConfigMap config = getManagementContext().getConfig();
hadoopCluster = addChild(EntitySpecs.spec(WhirrHadoopCluster.class)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0588c5/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 a07d5d6..d53b798 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
@@ -93,7 +93,7 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
}
@Override
- public void postConstruct() {
+ public void init() {
StringConfigMap config = getManagementContext().getConfig();
hadoopCluster = addChild(EntitySpecs.spec(WhirrHadoopCluster.class)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0588c5/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 3ffacb0..92d2141 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
@@ -24,7 +24,7 @@ import brooklyn.entity.webapp.tomcat.TomcatServer;
public class CumulusRDFApplication extends AbstractApplication {
/** Create entities. */
- public void postConstruct() {
+ public void init() {
TomcatServer tomcat = getEntityManager().createEntity(EntitySpecs.spec(TomcatServer.class)
.configure("war", "classpath:///cumulusrdf.war"));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0588c5/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 109ca61..898a410 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
@@ -90,8 +90,8 @@ public class WebClusterDatabaseExampleApp extends AbstractApplication implements
public static final AttributeSensor<String> ROOT_URL = WebAppServiceConstants.ROOT_URL;
@Override
- public void postConstruct() {
- super.postConstruct();
+ public void init() {
+ super.init();
MySqlNode mysql = addChild(
EntitySpecs.spec(MySqlNode.class)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0588c5/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java b/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
index ec00e26..cbdbb55 100644
--- a/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
+++ b/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
@@ -31,8 +31,8 @@ public class RubyRepNodeImpl extends SoftwareProcessImpl implements RubyRepNode
* Adds support for binding to brooklyn DatabaseNodes (so the user doesn't have to call attributeWhenReady, etc)
*/
@Override
- public void postConstruct() {
- super.postConstruct();
+ public void init() {
+ super.init();
DatabaseNode leftNode = getConfig(LEFT_DATABASE);
DatabaseNode rightNode = getConfig(RIGHT_DATABASE);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0588c5/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraClusterImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraClusterImpl.java
index 7741e9f..44fbd8d 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraClusterImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraClusterImpl.java
@@ -56,8 +56,8 @@ public class CassandraClusterImpl extends DynamicClusterImpl implements Cassandr
}
@Override
- public void postConstruct() {
- super.postConstruct();
+ public void init() {
+ super.init();
// This DeferredSupplier will return a comma separated list of all available
// hostnames in the cluster or if none are available yet then a Task for the first
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0588c5/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 1c728fb..757c1b6 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
@@ -52,7 +52,7 @@ public class ControlledDynamicWebAppClusterImpl extends AbstractEntity implement
}
@Override
- public void postConstruct() {
+ public void init() {
ConfigToAttributes.apply(this, FACTORY);
ConfigToAttributes.apply(this, MEMBER_SPEC);
ConfigToAttributes.apply(this, CONTROLLER);
@@ -110,7 +110,7 @@ public class ControlledDynamicWebAppClusterImpl extends AbstractEntity implement
public void start(Collection<? extends Location> locations) {
if (isLegacyConstruction()) {
- postConstruct();
+ init();
}
if (locations.isEmpty()) locations = this.getLocations();
[27/50] brooklyn-library git commit: Update test using Kafka API
Posted by he...@apache.org.
Update test using Kafka API
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/ea32c5ad
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/ea32c5ad
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/ea32c5ad
Branch: refs/heads/0.5.0
Commit: ea32c5ad63b80c2e3b0b4c60f7f35c28042d5b38
Parents: dee689a
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Mar 20 23:46:05 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:07 2013 +0100
----------------------------------------------------------------------
.../entity/messaging/kafka/KafkaBrokerImpl.java | 2 +-
.../messaging/kafka/KafkaIntegrationTest.groovy | 5 ++---
.../entity/messaging/kafka/KafkaSupport.java | 23 +++++++++++---------
3 files changed, 16 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ea32c5ad/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index 625fe3f..ed9ae0c 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -64,7 +64,7 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
@Override
public void postConstruct() {
- setAttribute(BROKER_ID, hashCode());
+ setAttribute(BROKER_ID, Math.abs(hashCode())); // Must be positive for partitioning to work
}
@Override
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ea32c5ad/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
index 89f5773..2ef95c5 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
@@ -119,9 +119,8 @@ public class KafkaIntegrationTest {
KafkaSupport support = new KafkaSupport(cluster.getZookeeper());
support.sendMessage("brooklyn", "TEST_MESSAGE")
- List<String> messages = support.getMessage("brooklyn");
- assertEquals(messages.size(), 1);
- assertEquals(messages.get(0), "TEST_MESSAGE");
+ String message = support.getMessage("brooklyn");
+ assertEquals(message, "TEST_MESSAGE");
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ea32c5ad/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
index d026f06..d9372a9 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
@@ -15,13 +15,15 @@
*/
package brooklyn.entity.messaging.kafka;
-import static org.testng.Assert.*;
+import static org.testng.Assert.assertTrue;
+import java.nio.ByteBuffer;
import java.util.List;
import java.util.Properties;
import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
+import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaMessageStream;
import kafka.javaapi.consumer.ConsumerConnector;
import kafka.javaapi.producer.Producer;
@@ -53,20 +55,21 @@ public class KafkaSupport {
producer.close();
}
- public List<String> getMessage(String topic) {
+ public String getMessage(String topic) {
Properties props = new Properties();
props.put("zk.connect", String.format("%s:%d", zookeeper.getAttribute(Attributes.HOSTNAME), zookeeper.getZookeeperPort()));
props.put("zk.connectiontimeout.ms", "1000000");
- props.put("groupid", "test_group");
+ props.put("groupid", "brooklyn");
ConsumerConfig consumerConfig = new ConsumerConfig(props);
ConsumerConnector consumer = Consumer.createJavaConsumerConnector(consumerConfig);
List<KafkaMessageStream<Message>> streams = consumer.createMessageStreams(ImmutableMap.of(topic, 1)).get(topic);
- List<String> messages = Lists.newArrayList();
- for (Message msg : Iterables.getOnlyElement(streams)) {
- assertTrue(msg.isValid());
- String payload = new String(msg.payload().array());
- messages.add(payload);
- }
- return messages;
+ ConsumerIterator<Message> iterator = Iterables.getOnlyElement(streams).iterator();
+ Message msg = iterator.next();
+ assertTrue(msg.isValid());
+ ByteBuffer buf = msg.payload();
+ byte[] data = new byte[buf.remaining()];
+ buf.get(data);
+ String payload = new String(data);
+ return payload;
}
}
[43/50] brooklyn-library git commit: Tidying up Redis entity code -
Convert RedisIntegrationTest to Java - Update RedisStore to use FreeMarker
template - Use RedisSupport class to encapsulate API testing - Use SshFeed to
poll for uptime
Posted by he...@apache.org.
Tidying up Redis entity code
- Convert RedisIntegrationTest to Java
- Update RedisStore to use FreeMarker template
- Use RedisSupport class to encapsulate API testing
- Use SshFeed to poll for uptime
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/e9cb1572
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/e9cb1572
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/e9cb1572
Branch: refs/heads/0.5.0
Commit: e9cb1572990ac3e678b3f953c1c26ad219af28b8
Parents: e4098ab
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Mon Apr 22 14:40:19 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:44 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/RedisCluster.java | 2 +-
.../entity/nosql/redis/RedisClusterImpl.java | 15 +--
.../brooklyn/entity/nosql/redis/RedisSlave.java | 16 +++-
.../entity/nosql/redis/RedisSlaveImpl.java | 14 +--
.../brooklyn/entity/nosql/redis/RedisStore.java | 25 ++---
.../entity/nosql/redis/RedisStoreImpl.java | 86 ++++++++---------
.../entity/nosql/redis/RedisStoreSshDriver.java | 6 +-
.../brooklyn/entity/nosql/redis/redis.conf | 13 +++
.../brooklyn/entity/nosql/redis/slave.conf | 13 +++
.../nosql/src/main/resources/redis-logo.png | Bin 0 -> 34333 bytes
.../entity/nosql/redis/RedisEc2LiveTest.java | 22 ++---
.../nosql/redis/RedisIntegrationTest.groovy | 93 -------------------
.../nosql/redis/RedisIntegrationTest.java | 77 +++++++++++++++
.../entity/nosql/redis/RedisSupport.java | 41 ++++++++
14 files changed, 227 insertions(+), 196 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
index 57b3682..0393926 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
@@ -13,7 +13,7 @@ import brooklyn.entity.trait.Startable;
*
* TODO add sensors with aggregated Redis statistics from cluster
*/
-@Catalog(name="Redis Cluster", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.jpeg")
+@Catalog(name="Redis Cluster", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.png")
@ImplementedBy(RedisClusterImpl.class)
public interface RedisCluster extends Entity, Startable {
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
index 08d114a..6a5e6ff 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
@@ -16,7 +16,7 @@ import brooklyn.util.MutableMap;
import com.google.common.collect.Maps;
public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
- Map redisProperties = Maps.newLinkedHashMap();
+
RedisStore master;
DynamicCluster slaves;
@@ -31,23 +31,18 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
}
public RedisClusterImpl(Map properties, Entity parent) {
super(properties, parent);
-
- redisProperties.putAll(properties);
}
@Override
public void start(Collection<? extends Location> locations) {
- master = addChild(EntitySpecs.spec(RedisStore.class)
- .configure(redisProperties));
+ master = addChild(EntitySpecs.spec(RedisStore.class));
Entities.manage(master);
master.start(locations);
- redisProperties.put("master", master);
-
+
slaves = addChild(EntitySpecs.spec(DynamicCluster.class)
- .configure(redisProperties)
- .configure(DynamicCluster.FACTORY, new BasicConfigurableEntityFactory(RedisSlave.class)));
+ .configure(DynamicCluster.MEMBER_SPEC, EntitySpecs.spec(RedisSlave.class).configure(RedisSlave.MASTER, master)));
slaves.start(locations);
-
+
setAttribute(Startable.SERVICE_UP, true);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
index d433688..6b07c2b 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
@@ -1,12 +1,24 @@
package brooklyn.entity.nosql.redis;
+import brooklyn.config.ConfigKey;
import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.util.flags.SetFromFlag;
/**
* A {@link RedisStore} configured as a slave.
- *
- * The {@code master} property must be set to the master Redis store entity.
*/
@ImplementedBy(RedisSlaveImpl.class)
public interface RedisSlave extends RedisStore {
+
+ @SetFromFlag("master")
+ ConfigKey<RedisStore> MASTER = new BasicConfigKey<RedisStore>(RedisStore.class, "redis.master", "Redis master");
+
+ @SetFromFlag("redisConfigTemplateUrl")
+ ConfigKey<String> REDIS_CONFIG_TEMPLATE_URL = new BasicConfigKey<String>(
+ String.class, "redis.config.templateUrl", "Template file (in freemarker format) for the redis.conf config file",
+ "classpath://brooklyn/entity/nosql/redis/slave.conf");
+
+ RedisStore getMaster();
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
index 2ea0783..c0718b9 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
@@ -9,11 +9,8 @@ import com.google.common.base.Preconditions;
/**
* A {@link RedisStore} configured as a slave.
- *
- * The {@code master} property must be set to the master Redis store entity.
*/
public class RedisSlaveImpl extends RedisStoreImpl implements RedisSlave {
- RedisStore master;
public RedisSlaveImpl() {
this(MutableMap.of(), null);
@@ -26,17 +23,10 @@ public class RedisSlaveImpl extends RedisStoreImpl implements RedisSlave {
}
public RedisSlaveImpl(Map properties, Entity parent) {
super(properties, parent);
-
- // TODO Use config key for "master"
- Preconditions.checkArgument(properties.containsKey("master"), "The Redis master entity must be specified");
- master = (RedisStore) properties.get("master");
}
@Override
- public String getConfigData(int port, boolean include) {
- String masterAddress = master.getAddress();
- int masterPort = getParent().getAttribute(REDIS_PORT);
-
- return super.getConfigData(port, include) + "slaveof "+masterAddress+" "+masterPort;
+ public RedisStore getMaster() {
+ return getConfig(MASTER);
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
index a6ce441..492da2d 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
@@ -22,22 +22,23 @@ import brooklyn.util.flags.SetFromFlag;
public interface RedisStore extends SoftwareProcess, DataStore {
@SetFromFlag("version")
- public static final BasicConfigKey<String> SUGGESTED_VERSION =
+ BasicConfigKey<String> SUGGESTED_VERSION =
new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "2.6.7");
@SetFromFlag("downloadUrl")
- public static final BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
+ BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
SoftwareProcess.DOWNLOAD_URL, "http://redis.googlecode.com/files/redis-${version}.tar.gz");
@SetFromFlag("redisPort")
- public static final PortAttributeSensorAndConfigKey REDIS_PORT = new PortAttributeSensorAndConfigKey("redis.port", "Redis port number", 6379);
-
- @SetFromFlag("configFile")
- public static final ConfigKey<String> REDIS_CONFIG_FILE = new BasicConfigKey<String>(String.class, "redis.config.file", "Redis user configuration file");
-
- public static final AttributeSensor<Integer> UPTIME = new BasicAttributeSensor<Integer>(Integer.class, "redis.uptime", "Redis uptime in seconds");
-
- public String getAddress();
-
- public String getConfigData(int port, boolean include);
+ PortAttributeSensorAndConfigKey REDIS_PORT = new PortAttributeSensorAndConfigKey("redis.port", "Redis port number", 6379);
+
+ @SetFromFlag("redisConfigTemplateUrl")
+ ConfigKey<String> REDIS_CONFIG_TEMPLATE_URL = new BasicConfigKey<String>(
+ String.class, "redis.config.templateUrl", "Template file (in freemarker format) for the redis.conf config file",
+ "classpath://brooklyn/entity/nosql/redis/redis.conf");
+
+ AttributeSensor<Integer> UPTIME = new BasicAttributeSensor<Integer>(Integer.class, "redis.uptime", "Redis uptime in seconds");
+
+ String getAddress();
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
index 5c454cd..bf6c171 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
@@ -4,15 +4,27 @@ import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.Map;
+import javax.annotation.Nullable;
+
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.SshValueFunctions;
import brooklyn.location.MachineLocation;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.util.MutableMap;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicates;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
+
/**
* An entity that represents a Redis key-value store service.
*
@@ -21,6 +33,8 @@ import brooklyn.util.MutableMap;
public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
protected static final Logger LOG = LoggerFactory.getLogger(RedisStore.class);
+ private transient SshFeed sshFeed;
+
public RedisStoreImpl() {
this(MutableMap.of(), null);
}
@@ -39,25 +53,37 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
super.connectSensors();
connectServiceUpIsRunning();
-
- // TODO IF desired, port this for setting UPTIME (because legacy sshAdapter is deleted)
-// String output = sshAdapter.newOutputValueProvider("${driver.runDir}/bin/redis-cli info").compute()
-// for (String line : output.split("\n")) {
-// if (line =~ /^uptime_in_seconds:/) {
-// String data = line.trim()
-// int colon = data.indexOf(":")
-// return Integer.parseInt(data.substring(colon + 1))
-// }
-// }
+
+ sshFeed = SshFeed.builder()
+ .entity(this)
+ .poll(new SshPollConfig<Integer>(UPTIME)
+ .command(getDriver().getRunDir() + "/bin/redis-cli info")
+ .onError(Functions.constant(-1))
+ .onSuccess(Functions.compose(new Function<String, Integer>(){
+ @Override
+ public Integer apply(@Nullable String input) {
+ Optional<String> line = Iterables.tryFind(Splitter.on('\n').split(input), Predicates.containsPattern("uptime_in_seconds:"));
+ if (line.isPresent()) {
+ String data = line.get().trim();
+ int colon = data.indexOf(":");
+ return Integer.parseInt(data.substring(colon + 1));
+ } else {
+ throw new IllegalStateException();
+ }
+ }
+ }, SshValueFunctions.stdout())))
+ .build();
}
@Override
public void disconnectSensors() {
super.disconnectSensors();
disconnectServiceUpIsRunning();
+ if (sshFeed != null && sshFeed.isActivated()) sshFeed.stop();
}
-
- public Class getDriverInterface() {
+
+ @Override
+ public Class<?> getDriverInterface() {
return RedisStoreDriver.class;
}
@@ -65,45 +91,11 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
public RedisStoreDriver getDriver() {
return (RedisStoreDriver) super.getDriver();
}
-
+
@Override
public String getAddress() {
MachineLocation machine = getMachineOrNull();
return (machine != null) ? machine.getAddress().getHostAddress() : null;
}
-
-
- // FIXME Don't want to hard-code this as SshMachineLocatoin; want generic way of doing machine.copyTo
- @Override
- protected SshMachineLocation getMachineOrNull() {
- return (SshMachineLocation) super.getMachineOrNull();
- }
-
- // FIXME This logic should all be in the driver
- void doExtraConfigurationDuringStart() {
- int port = getAttribute(REDIS_PORT);
- boolean include = false;
-
- String includeName = getConfig(REDIS_CONFIG_FILE);
- if (includeName != null && includeName.length() > 0) {
- File includeFile = new File(includeName);
- include = includeFile.exists();
- }
-
- getMachineOrNull().copyTo(new ByteArrayInputStream(getConfigData(port, include).getBytes()), getDriver().getRunDir()+"/redis.conf");
- if (include) getMachineOrNull().copyTo(new File(includeName), getDriver().getRunDir()+"/include.conf");
-
- super.configure();
- }
- @Override
- public String getConfigData(int port, boolean include) {
- String data =
- "daemonize yes"+"\n"+
- "pidfile "+getDriver().getRunDir()+"/pid.txt"+"\n"+
- "port "+port+"\n";
-
- if (include) data += "include "+getDriver().getRunDir()+"/include.conf";
- return data;
- }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
index 8b8e8ae..7cbe3c7 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
@@ -68,10 +68,10 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
format("cd %s", getExpandedInstallDir()),
"make install PREFIX="+getRunDir())
.execute();
-
- getEntity().doExtraConfigurationDuringStart();
+
+ copyTemplate(getEntity().getConfig(RedisStore.REDIS_CONFIG_TEMPLATE_URL), "redis.conf");
}
-
+
@Override
public void launch() {
// TODO Should we redirect stdout/stderr: format(" >> %s/console 2>&1 </dev/null &", getRunDir())
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
new file mode 100644
index 0000000..b2dd5cb
--- /dev/null
+++ b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
@@ -0,0 +1,13 @@
+# Redis configuration file
+
+# Start as daemon
+daemonize yes
+pidfile ${driver.runDir}/pid.txt
+
+# Set port and optional bind address
+port ${entity.port}
+# bind ${driver.machine.address}
+
+# Configure logging
+loglevel verbose
+logfile ${driver.runDir}/redis.log
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
new file mode 100644
index 0000000..b2dd5cb
--- /dev/null
+++ b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
@@ -0,0 +1,13 @@
+# Redis configuration file
+
+# Start as daemon
+daemonize yes
+pidfile ${driver.runDir}/pid.txt
+
+# Set port and optional bind address
+port ${entity.port}
+# bind ${driver.machine.address}
+
+# Configure logging
+loglevel verbose
+logfile ${driver.runDir}/redis.log
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/resources/redis-logo.png
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/redis-logo.png b/software/nosql/src/main/resources/redis-logo.png
new file mode 100644
index 0000000..4ad2561
Binary files /dev/null and b/software/nosql/src/main/resources/redis-logo.png differ
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
index d49fee5..eb49ac9 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
@@ -1,12 +1,9 @@
package brooklyn.entity.nosql.redis;
-import static org.testng.Assert.assertTrue;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
-import redis.clients.jedis.Connection;
import brooklyn.entity.AbstractEc2LiveTest;
import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.location.Location;
@@ -28,25 +25,18 @@ public class RedisEc2LiveTest extends AbstractEc2LiveTest {
@Override
protected void doTest(Location loc) throws Exception {
- // Start Redis
RedisStore redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
app.start(ImmutableList.of(loc));
EntityTestUtils.assertAttributeEqualsEventually(redis, RedisStore.SERVICE_UP, true);
- // Access Redis
- Connection connection = getRedisConnection(redis);
- assertTrue(connection.isConnected());
- connection.disconnect();
+ RedisSupport support = new RedisSupport(redis);
+ try {
+ support.redisTest();
+ } finally {
+ redis.stop();
+ }
}
- private Connection getRedisConnection(RedisStore redis) {
- String hostname = redis.getAttribute(RedisStore.HOSTNAME);
- int port = redis.getAttribute(RedisStore.REDIS_PORT);
- Connection connection = new Connection(hostname, port);
- connection.connect();
- return connection;
- }
-
@Test(enabled=false)
public void testDummy() {} // Convince testng IDE integration that this really does have test methods
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
deleted file mode 100644
index 44d9e0e..0000000
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
+++ /dev/null
@@ -1,93 +0,0 @@
-package brooklyn.entity.nosql.redis;
-
-import static brooklyn.test.TestUtils.*
-import static org.testng.Assert.*
-
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.testng.annotations.AfterMethod
-import org.testng.annotations.BeforeMethod
-import org.testng.annotations.Test
-
-import redis.clients.jedis.Connection
-import brooklyn.entity.basic.ApplicationBuilder
-import brooklyn.entity.basic.Entities
-import brooklyn.entity.proxying.EntitySpecs
-import brooklyn.entity.trait.Startable
-import brooklyn.location.Location
-import brooklyn.location.basic.LocalhostMachineProvisioningLocation
-import brooklyn.test.entity.TestApplication
-import brooklyn.util.internal.TimeExtras
-
-/**
- * Test the operation of the {@link RedisStore} class.
- *
- * TODO clarify test purpose
- */
-public class RedisIntegrationTest {
- private static final Logger log = LoggerFactory.getLogger(RedisIntegrationTest.class)
-
- static { TimeExtras.init() }
-
- private TestApplication app
- private Location testLocation
- private RedisStore redis
-
- @BeforeMethod(alwaysRun=true)
- public void setup() {
- app = ApplicationBuilder.newManagedApp(TestApplication.class);
- testLocation = new LocalhostMachineProvisioningLocation(name:'london')
- }
-
- @AfterMethod(alwaysRun=true)
- public void shutdown() {
- if (app != null) Entities.destroyAll(app);
- }
-
- /**
- * Test that the server starts up and sets SERVICE_UP correctly.
- */
- // FIXME Marked as WIP because failing in jenkins; environmental differences?
- @Test(groups = ["Integration"])
- public void canStartupAndShutdown() {
- redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
- app.start([ testLocation ])
- executeUntilSucceeds() {
- assertTrue redis.getAttribute(Startable.SERVICE_UP)
- }
-
- redis.stop()
- assertFalse redis.getAttribute(Startable.SERVICE_UP)
- }
-
- /**
- * Test that a client can connect to the service.
- */
- // FIXME Marked as WIP because failing in jenkins; environmental differences?
- @Test(groups = ["Integration"])
- public void testRedisConnection() {
- // Start Redis
- redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
- app.start([ testLocation ])
- executeUntilSucceeds {
- assertTrue redis.getAttribute(Startable.SERVICE_UP)
- }
-
- try {
- // Access Redis
- Connection connection = getRedisConnection(redis)
- assertTrue connection.isConnected()
- connection.disconnect()
- } finally {
- // Stop broker
- redis.stop()
- }
- }
-
- private Connection getRedisConnection(RedisStore redis) {
- int port = redis.getAttribute(RedisStore.REDIS_PORT)
- Connection connection = new Connection("localhost", port)
- connection.connect()
- return connection
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
new file mode 100644
index 0000000..1ddfa92
--- /dev/null
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
@@ -0,0 +1,77 @@
+package brooklyn.entity.nosql.redis;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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.proxying.EntitySpecs;
+import brooklyn.entity.trait.Startable;
+import brooklyn.location.Location;
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.test.EntityTestUtils;
+import brooklyn.test.entity.TestApplication;
+import brooklyn.util.MutableMap;
+import brooklyn.util.internal.TimeExtras;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * Test the operation of the {@link RedisStore} class.
+ */
+public class RedisIntegrationTest {
+
+ static { TimeExtras.init(); }
+
+ private TestApplication app;
+ private Location testLocation;
+ private RedisStore redis;
+
+ @BeforeMethod(alwaysRun=true)
+ public void setup() {
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
+ testLocation = new LocalhostMachineProvisioningLocation(MutableMap.of("name", "london"));
+ }
+
+ @AfterMethod(alwaysRun=true)
+ public void shutdown() {
+ if (app != null) Entities.destroyAll(app);
+ }
+
+ /**
+ * Test that the server starts up and sets SERVICE_UP correctly.
+ */
+ @Test(groups = { "Integration" })
+ public void canStartupAndShutdown() throws Exception {
+ redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
+ app.start(ImmutableList.of(testLocation));
+
+ EntityTestUtils.assertAttributeEqualsEventually(redis, Startable.SERVICE_UP, true);
+
+ redis.stop();
+
+ EntityTestUtils.assertAttributeEqualsEventually(redis, Startable.SERVICE_UP, false);
+ }
+
+ /**
+ * Test that a client can connect to the service.
+ */
+ @Test(groups = { "Integration" })
+ public void testRedisConnection() throws Exception {
+ redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
+ app.start(ImmutableList.of(testLocation));
+
+ EntityTestUtils.assertAttributeEqualsEventually(redis, Startable.SERVICE_UP, true);
+
+ RedisSupport support = new RedisSupport(redis);
+ try {
+ support.redisTest();
+ } finally {
+ redis.stop();
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
new file mode 100644
index 0000000..f617922
--- /dev/null
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012-2013 by Cloudsoft Corp.
+ */
+package brooklyn.entity.nosql.redis;
+
+import static org.testng.Assert.assertTrue;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import redis.clients.jedis.Connection;
+
+/**
+ * {@link RedisStore} testing using Redis API.
+ */
+public class RedisSupport {
+ private static final Logger log = LoggerFactory.getLogger(RedisSupport.class);
+
+ private RedisStore redis;
+
+ public RedisSupport(RedisStore redis) {
+ this.redis = redis;
+ }
+
+ /**
+ * Exercise the {@link RedisStore} using the Redis API.
+ */
+ public void redisTest() throws Exception {
+ // Access Redis
+ Connection connection = getRedisConnection(redis);
+ assertTrue(connection.isConnected());
+ connection.disconnect();
+ }
+
+ private Connection getRedisConnection(RedisStore redis) {
+ int port = redis.getAttribute(RedisStore.REDIS_PORT);
+ Connection connection = new Connection("localhost", port);
+ connection.connect();
+ return connection;
+ }
+}
[12/50] brooklyn-library git commit: converting postConstruct to init
Posted by he...@apache.org.
converting postConstruct to init
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/32a6eba5
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/32a6eba5
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/32a6eba5
Branch: refs/heads/0.5.0
Commit: 32a6eba53bc5706d3f097d0300230a06c66f5829
Parents: 3c0f5e6
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Apr 1 12:30:26 2013 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Apr 1 12:41:41 2013 +0100
----------------------------------------------------------------------
.../src/main/java/brooklyn/demo/GlobalWebFabricExample.java | 2 +-
.../src/main/java/brooklyn/extras/whirr/WhirrExample.java | 4 ++--
.../main/java/brooklyn/extras/whirr/WhirrHadoopExample.java | 4 ++--
.../java/brooklyn/demo/MonitoredCassandraClusterExample.java | 2 +-
.../cloudfoundry/MovableCloudFoundryClusterExample.java | 2 +-
.../src/main/java/brooklyn/demo/StandaloneBrokerExample.java | 2 +-
.../src/main/java/brooklyn/demo/SingleWebServerExample.java | 2 +-
.../src/main/java/brooklyn/demo/WebClusterDatabaseExample.java | 2 +-
.../main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java | 6 ++----
.../java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy | 2 +-
.../src/main/java/brooklyn/demo/WebClusterExample.java | 2 +-
11 files changed, 14 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
index dbfab17..774affa 100644
--- a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
+++ b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
@@ -41,7 +41,7 @@ public class GlobalWebFabricExample extends AbstractApplication {
);
@Override
- public void postConstruct() {
+ public void init() {
StringConfigMap config = getManagementContext().getConfig();
GeoscalingDnsService geoDns = addChild(EntitySpecs.spec(GeoscalingDnsService.class)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
index d01bc4c..aef2f0e 100644
--- a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
@@ -27,8 +27,8 @@ public class WhirrExample extends AbstractApplication {
"whirr.instance-templates=1 noop, 1 elasticsearch"+"\n";
@Override
- public void postConstruct() {
- WhirrCluster cluster = addChild(EntitySpecs.spec(WhirrCluster.class)
+ public void init() {
+ addChild(EntitySpecs.spec(WhirrCluster.class)
.configure("recipe", RECIPE));
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
index 7a51b0c..d15d163 100644
--- a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
@@ -23,8 +23,8 @@ public class WhirrHadoopExample extends AbstractApplication {
public static final String DEFAULT_LOCATION = "aws-ec2:eu-west-1";
@Override
- public void postConstruct() {
- WhirrCluster cluster = addChild(EntitySpecs.spec(WhirrHadoopCluster.class)
+ public void init() {
+ addChild(EntitySpecs.spec(WhirrHadoopCluster.class)
.displayName("brooklyn-hadoop-example")
.configure("size", 2)
.configure("memory", 2048));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
index 6c475b2..9c543e3 100644
--- a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
+++ b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
@@ -8,7 +8,7 @@ import brooklyn.entity.proxying.EntitySpecs;
public class MonitoredCassandraClusterExample extends AbstractApplication {
@Override
- public void postConstruct() {
+ public void init() {
addChild(EntitySpecs.spec(CassandraCluster.class)
.configure("initialSize", "2")
.configure("clusterName", "CassandraDemo")
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
index ee96826..3b30d1e 100644
--- a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
+++ b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
@@ -16,7 +16,7 @@ public class MovableCloudFoundryClusterExample extends AbstractApplication {
public static final String WAR_FILE_URL = "classpath://hello-world-webapp.war";
@Override
- public void postConstruct() {
+ public void init() {
addChild(EntitySpecs.spec(MovableElasticWebAppCluster.class)
.configure("war", WAR_FILE_URL));
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
index 3d9b903..83cdc31 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
@@ -24,7 +24,7 @@ public class StandaloneBrokerExample extends AbstractApplication {
public static final String DEFAULT_LOCATION = "localhost";
@Override
- public void postConstruct() {
+ public void init() {
// Configure the Qpid broker entity
QpidBroker broker = addChild(EntitySpecs.spec(QpidBroker.class)
.configure("amqpPort", 5672)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
index 10905e1..3272a6c 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
@@ -22,7 +22,7 @@ public class SingleWebServerExample extends AbstractApplication {
private static final String WAR_PATH = "classpath://hello-world-webapp.war";
@Override
- public void postConstruct() {
+ public void init() {
addChild(EntitySpecs.spec(JBoss7Server.class)
.configure("war", WAR_PATH)
.configure("httpPort", "8080+"));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
index 5436ee6..5c673b1 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
@@ -48,7 +48,7 @@ public class WebClusterDatabaseExample extends AbstractApplication {
"appservers.count", "Number of app servers deployed");
@Override
- public void postConstruct() {
+ public void init() {
MySqlNode mysql = addChild(EntitySpecs.spec(MySqlNode.class)
.configure("creationScriptUrl", DB_SETUP_SQL_URL));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/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 df88bb9..014a58a 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
@@ -41,10 +41,8 @@ import com.google.common.collect.Lists;
/**
* Launches a 3-tier app with nginx, clustered jboss, and mysql.
* <p>
- * Demonstrates how to define a new Application Entity class (reusable and extensible),
- * as opposed to just using the builder as in {@link WebClusterDatabaseExample}.
- * With an app, when we define public static sensors and runtime config _on the app class_
- * (not the builder) they can be discovered at runtime.
+ * Includes some advanced features such as KPI / derived sensors,
+ * and annotations for use in a catalog.
* <p>
* This variant also increases minimum size to 2.
* Note the policy min size must have the same value,
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
index ee2652c..542cd8a 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
@@ -39,7 +39,7 @@ public class WebClusterDatabaseExampleGroovy extends AbstractApplication {
public static final String DB_PASSWORD = "br00k11n";
@Override
- public void postConstruct() {
+ public void init() {
MySqlNode mysql = addChild(MySqlNode,
creationScriptUrl: DB_SETUP_SQL_URL);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/32a6eba5/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
index 8e6f670..86c28ee 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
@@ -41,7 +41,7 @@ public class WebClusterExample extends AbstractApplication {
private ControlledDynamicWebAppCluster web;
@Override
- public void postConstruct() {
+ public void init() {
nginxController = addChild(EntitySpecs.spec(NginxController.class)
//.configure("domain", "webclusterexample.brooklyn.local")
.configure("port", "8000+"));
[18/50] brooklyn-library git commit: Merge pull request #661 from
grkvlt/0.5-remove-old-example
Posted by he...@apache.org.
Merge pull request #661 from grkvlt/0.5-remove-old-example
Remove old monitored-cassandra-cluster example project
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/227e33d5
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/227e33d5
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/227e33d5
Branch: refs/heads/0.5.0
Commit: 227e33d57d798f67f6af401dbeb2b2430df6b025
Parents: 49d15bb 8ff050f
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 10 13:46:49 2013 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Apr 10 13:46:49 2013 -0700
----------------------------------------------------------------------
.../demo/MonitoredCassandraClusterExample.java | 20 --------------------
1 file changed, 20 deletions(-)
----------------------------------------------------------------------
[39/50] brooklyn-library git commit: Redis: split interface+impl,
and fix ec2 test
Posted by he...@apache.org.
Redis: split interface+impl, and fix ec2 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/c06d64c0
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/c06d64c0
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/c06d64c0
Branch: refs/heads/0.5.0
Commit: c06d64c0b7764baa7d31938c991b45d4c94bd848
Parents: 464ef00
Author: Aled Sage <al...@gmail.com>
Authored: Mon Apr 22 13:09:04 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:43 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/RedisCluster.java | 71 ----------
.../entity/nosql/redis/RedisClusterImpl.java | 66 +++++++++
.../brooklyn/entity/nosql/redis/RedisShard.java | 23 ----
.../entity/nosql/redis/RedisShardImpl.java | 22 +++
.../brooklyn/entity/nosql/redis/RedisSlave.java | 41 ------
.../entity/nosql/redis/RedisSlaveImpl.java | 42 ++++++
.../brooklyn/entity/nosql/redis/RedisStore.java | 134 -------------------
.../entity/nosql/redis/RedisStoreImpl.java | 109 +++++++++++++++
.../entity/nosql/redis/RedisStoreSshDriver.java | 6 +-
.../entity/nosql/redis/RedisEc2LiveTest.java | 10 +-
.../nosql/redis/RedisIntegrationTest.groovy | 16 ++-
11 files changed, 260 insertions(+), 280 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
deleted file mode 100644
index 7d063b5..0000000
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package brooklyn.entity.nosql.redis;
-
-import java.util.Collection;
-import java.util.Map;
-
-import brooklyn.catalog.Catalog;
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.AbstractEntity;
-import brooklyn.entity.basic.BasicConfigurableEntityFactory;
-import brooklyn.entity.group.DynamicCluster;
-import brooklyn.entity.group.DynamicClusterImpl;
-import brooklyn.entity.trait.Startable;
-import brooklyn.location.Location;
-import brooklyn.util.MutableMap;
-
-import com.google.common.collect.Maps;
-
-/**
- * A cluster of {@link RedisStore}s with ione master and a group of slaves.
- *
- * The slaves are contained in a {@link DynamicCluster} which can be resized by a policy if required.
- *
- * TODO add sensors with aggregated Redis statistics from cluster
- */
-@Catalog(name="Redis Cluster", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.jpeg")
-public class RedisCluster extends AbstractEntity implements Startable {
- Map redisProperties = Maps.newLinkedHashMap();
- RedisCluster master;
- DynamicCluster slaves;
-
- public RedisCluster() {
- this(MutableMap.of(), null);
- }
- public RedisCluster(Map properties) {
- this(properties, null);
- }
- public RedisCluster(Entity parent) {
- this(MutableMap.of(), parent);
- }
- public RedisCluster(Map properties, Entity parent) {
- super(properties, parent);
-
- redisProperties.putAll(properties);
- redisProperties.put("factory", new BasicConfigurableEntityFactory(RedisSlave.class));
- }
-
- @Override
- public void start(Collection<? extends Location> locations) {
- master = new RedisCluster(redisProperties, this);
- master.start(locations);
- redisProperties.put("master", master);
-
- slaves = new DynamicClusterImpl(redisProperties, this);
- slaves.start(locations);
-
- setAttribute(Startable.SERVICE_UP, true);
- }
-
- @Override
- public void stop() {
- slaves.stop();
- master.stop();
-
- setAttribute(Startable.SERVICE_UP, false);
- }
-
- @Override
- public void restart() {
- throw new UnsupportedOperationException();
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
new file mode 100644
index 0000000..08d114a
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
@@ -0,0 +1,66 @@
+package brooklyn.entity.nosql.redis;
+
+import java.util.Collection;
+import java.util.Map;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractEntity;
+import brooklyn.entity.basic.BasicConfigurableEntityFactory;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.group.DynamicCluster;
+import brooklyn.entity.proxying.EntitySpecs;
+import brooklyn.entity.trait.Startable;
+import brooklyn.location.Location;
+import brooklyn.util.MutableMap;
+
+import com.google.common.collect.Maps;
+
+public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
+ Map redisProperties = Maps.newLinkedHashMap();
+ RedisStore master;
+ DynamicCluster slaves;
+
+ public RedisClusterImpl() {
+ this(MutableMap.of(), null);
+ }
+ public RedisClusterImpl(Map properties) {
+ this(properties, null);
+ }
+ public RedisClusterImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public RedisClusterImpl(Map properties, Entity parent) {
+ super(properties, parent);
+
+ redisProperties.putAll(properties);
+ }
+
+ @Override
+ public void start(Collection<? extends Location> locations) {
+ master = addChild(EntitySpecs.spec(RedisStore.class)
+ .configure(redisProperties));
+ Entities.manage(master);
+ master.start(locations);
+ redisProperties.put("master", master);
+
+ slaves = addChild(EntitySpecs.spec(DynamicCluster.class)
+ .configure(redisProperties)
+ .configure(DynamicCluster.FACTORY, new BasicConfigurableEntityFactory(RedisSlave.class)));
+ slaves.start(locations);
+
+ setAttribute(Startable.SERVICE_UP, true);
+ }
+
+ @Override
+ public void stop() {
+ if (slaves != null) slaves.stop();
+ if (master != null) master.stop();
+
+ setAttribute(Startable.SERVICE_UP, false);
+ }
+
+ @Override
+ public void restart() {
+ throw new UnsupportedOperationException();
+ }
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java
deleted file mode 100644
index 9cad4ce..0000000
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package brooklyn.entity.nosql.redis;
-
-import java.util.Map;
-
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.AbstractEntity;
-import brooklyn.entity.nosql.Shard;
-import brooklyn.util.MutableMap;
-
-public class RedisShard extends AbstractEntity implements Shard {
- public RedisShard() {
- this(MutableMap.of(), null);
- }
- public RedisShard(Map properties) {
- this(properties, null);
- }
- public RedisShard(Entity parent) {
- this(MutableMap.of(), parent);
- }
- public RedisShard(Map properties, Entity parent) {
- super(properties, parent);
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java
new file mode 100644
index 0000000..0eee09f
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java
@@ -0,0 +1,22 @@
+package brooklyn.entity.nosql.redis;
+
+import java.util.Map;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractEntity;
+import brooklyn.util.MutableMap;
+
+public class RedisShardImpl extends AbstractEntity implements RedisShard {
+ public RedisShardImpl() {
+ this(MutableMap.of(), null);
+ }
+ public RedisShardImpl(Map properties) {
+ this(properties, null);
+ }
+ public RedisShardImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public RedisShardImpl(Map properties, Entity parent) {
+ super(properties, parent);
+ }
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
deleted file mode 100644
index cf4815b..0000000
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package brooklyn.entity.nosql.redis;
-
-import java.util.Map;
-
-import brooklyn.entity.Entity;
-import brooklyn.util.MutableMap;
-
-import com.google.common.base.Preconditions;
-
-/**
- * A {@link RedisStore} configured as a slave.
- *
- * The {@code master} property must be set to the master Redis store entity.
- */
-public class RedisSlave extends RedisStore {
- RedisStore master;
-
- public RedisSlave() {
- this(MutableMap.of(), null);
- }
- public RedisSlave(Map properties) {
- this(properties, null);
- }
- public RedisSlave(Entity parent) {
- this(MutableMap.of(), parent);
- }
- public RedisSlave(Map properties, Entity parent) {
- super(properties, parent);
-
- Preconditions.checkArgument(properties.containsKey("master"), "The Redis master entity must be specified");
- master = (RedisStore) properties.get("master");
- }
-
- @Override
- public String getConfigData(int port, boolean include) {
- String masterAddress = master.getAddress();
- int masterPort = getParent().getAttribute(REDIS_PORT);
-
- return super.getConfigData(port, include) + "slaveof "+masterAddress+" "+masterPort;
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
new file mode 100644
index 0000000..2ea0783
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
@@ -0,0 +1,42 @@
+package brooklyn.entity.nosql.redis;
+
+import java.util.Map;
+
+import brooklyn.entity.Entity;
+import brooklyn.util.MutableMap;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * A {@link RedisStore} configured as a slave.
+ *
+ * The {@code master} property must be set to the master Redis store entity.
+ */
+public class RedisSlaveImpl extends RedisStoreImpl implements RedisSlave {
+ RedisStore master;
+
+ public RedisSlaveImpl() {
+ this(MutableMap.of(), null);
+ }
+ public RedisSlaveImpl(Map properties) {
+ this(properties, null);
+ }
+ public RedisSlaveImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public RedisSlaveImpl(Map properties, Entity parent) {
+ super(properties, parent);
+
+ // TODO Use config key for "master"
+ Preconditions.checkArgument(properties.containsKey("master"), "The Redis master entity must be specified");
+ master = (RedisStore) properties.get("master");
+ }
+
+ @Override
+ public String getConfigData(int port, boolean include) {
+ String masterAddress = master.getAddress();
+ int masterPort = getParent().getAttribute(REDIS_PORT);
+
+ return super.getConfigData(port, include) + "slaveof "+masterAddress+" "+masterPort;
+ }
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
deleted file mode 100644
index 7272088..0000000
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package brooklyn.entity.nosql.redis;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.util.Map;
-import java.util.concurrent.Callable;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.catalog.Catalog;
-import brooklyn.config.ConfigKey;
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.SoftwareProcess;
-import brooklyn.entity.basic.SoftwareProcessImpl;
-import brooklyn.entity.nosql.DataStore;
-import brooklyn.event.AttributeSensor;
-import brooklyn.event.basic.BasicAttributeSensor;
-import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
-import brooklyn.event.basic.BasicConfigKey;
-import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
-import brooklyn.location.MachineLocation;
-import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.util.MutableMap;
-import brooklyn.util.flags.SetFromFlag;
-
-/**
- * An entity that represents a Redis key-value store service.
- *
- * TODO add sensors with Redis statistics using INFO command
- */
-@Catalog(name="Redis Server", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.jpeg")
-public class RedisStore extends SoftwareProcessImpl implements DataStore {
- protected static final Logger LOG = LoggerFactory.getLogger(RedisStore.class);
-
- @SetFromFlag("version")
- public static final BasicConfigKey<String> SUGGESTED_VERSION =
- new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "2.6.7");
-
- @SetFromFlag("downloadUrl")
- public static final BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
- SoftwareProcess.DOWNLOAD_URL, "http://redis.googlecode.com/files/redis-${version}.tar.gz");
-
- public static final PortAttributeSensorAndConfigKey REDIS_PORT = new PortAttributeSensorAndConfigKey("redis.port", "Redis port number", 6379);
- public static final ConfigKey<String> REDIS_CONFIG_FILE = new BasicConfigKey<String>(String.class, "redis.config.file", "Redis user configuration file");
- public static final AttributeSensor<Integer> UPTIME = new BasicAttributeSensor<Integer>(Integer.class, "redis.uptime", "Redis uptime in seconds");
-
- public RedisStore() {
- this(MutableMap.of(), null);
- }
- public RedisStore(Map properties) {
- this(properties, null);
- }
- public RedisStore(Entity parent) {
- this(MutableMap.of(), parent);
- }
- public RedisStore(Map properties, Entity parent) {
- super(properties, parent);
-
- setConfigIfValNonNull(REDIS_PORT, properties.get("redisPort"));
- setConfigIfValNonNull(REDIS_CONFIG_FILE, properties.get("configFile"));
- }
-
- @Override
- protected void connectSensors() {
- super.connectSensors();
-
- connectServiceUpIsRunning();
-
- // TODO IF desired, port this for setting UPTIME (because legacy sshAdapter is deleted)
-// String output = sshAdapter.newOutputValueProvider("${driver.runDir}/bin/redis-cli info").compute()
-// for (String line : output.split("\n")) {
-// if (line =~ /^uptime_in_seconds:/) {
-// String data = line.trim()
-// int colon = data.indexOf(":")
-// return Integer.parseInt(data.substring(colon + 1))
-// }
-// }
- }
-
- @Override
- public void disconnectSensors() {
- super.disconnectSensors();
- disconnectServiceUpIsRunning();
- }
-
- public Class getDriverInterface() {
- return RedisStoreDriver.class;
- }
-
- @Override
- public RedisStoreDriver getDriver() {
- return (RedisStoreDriver) super.getDriver();
- }
-
- public String getAddress() {
- MachineLocation machine = getMachineOrNull();
- return (machine != null) ? machine.getAddress().getHostAddress() : null;
- }
-
-
- // FIXME Don't want to hard-code this as SshMachineLocatoin; want generic way of doing machine.copyTo
- @Override
- protected SshMachineLocation getMachineOrNull() {
- return (SshMachineLocation) super.getMachineOrNull();
- }
-
- // FIXME This logic should all be in the driver
- void doExtraConfigurationDuringStart() {
- int port = getAttribute(REDIS_PORT);
- boolean include = false;
-
- String includeName = getConfig(REDIS_CONFIG_FILE);
- if (includeName != null && includeName.length() > 0) {
- File includeFile = new File(includeName);
- include = includeFile.exists();
- }
-
- getMachineOrNull().copyTo(new ByteArrayInputStream(getConfigData(port, include).getBytes()), getDriver().getRunDir()+"/redis.conf");
- if (include) getMachineOrNull().copyTo(new File(includeName), getDriver().getRunDir()+"/include.conf");
-
- super.configure();
- }
-
- public String getConfigData(int port, boolean include) {
- String data =
- "daemonize yes"+"\n"+
- "pidfile "+getDriver().getRunDir()+"/pid.txt"+"\n"+
- "port "+port+"\n";
-
- if (include) data += "include "+getDriver().getRunDir()+"/include.conf";
- return data;
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
new file mode 100644
index 0000000..5c454cd
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
@@ -0,0 +1,109 @@
+package brooklyn.entity.nosql.redis;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.location.MachineLocation;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.MutableMap;
+
+/**
+ * An entity that represents a Redis key-value store service.
+ *
+ * TODO add sensors with Redis statistics using INFO command
+ */
+public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
+ protected static final Logger LOG = LoggerFactory.getLogger(RedisStore.class);
+
+ public RedisStoreImpl() {
+ this(MutableMap.of(), null);
+ }
+ public RedisStoreImpl(Map properties) {
+ this(properties, null);
+ }
+ public RedisStoreImpl(Entity parent) {
+ this(MutableMap.of(), parent);
+ }
+ public RedisStoreImpl(Map properties, Entity parent) {
+ super(properties, parent);
+ }
+
+ @Override
+ protected void connectSensors() {
+ super.connectSensors();
+
+ connectServiceUpIsRunning();
+
+ // TODO IF desired, port this for setting UPTIME (because legacy sshAdapter is deleted)
+// String output = sshAdapter.newOutputValueProvider("${driver.runDir}/bin/redis-cli info").compute()
+// for (String line : output.split("\n")) {
+// if (line =~ /^uptime_in_seconds:/) {
+// String data = line.trim()
+// int colon = data.indexOf(":")
+// return Integer.parseInt(data.substring(colon + 1))
+// }
+// }
+ }
+
+ @Override
+ public void disconnectSensors() {
+ super.disconnectSensors();
+ disconnectServiceUpIsRunning();
+ }
+
+ public Class getDriverInterface() {
+ return RedisStoreDriver.class;
+ }
+
+ @Override
+ public RedisStoreDriver getDriver() {
+ return (RedisStoreDriver) super.getDriver();
+ }
+
+ @Override
+ public String getAddress() {
+ MachineLocation machine = getMachineOrNull();
+ return (machine != null) ? machine.getAddress().getHostAddress() : null;
+ }
+
+
+ // FIXME Don't want to hard-code this as SshMachineLocatoin; want generic way of doing machine.copyTo
+ @Override
+ protected SshMachineLocation getMachineOrNull() {
+ return (SshMachineLocation) super.getMachineOrNull();
+ }
+
+ // FIXME This logic should all be in the driver
+ void doExtraConfigurationDuringStart() {
+ int port = getAttribute(REDIS_PORT);
+ boolean include = false;
+
+ String includeName = getConfig(REDIS_CONFIG_FILE);
+ if (includeName != null && includeName.length() > 0) {
+ File includeFile = new File(includeName);
+ include = includeFile.exists();
+ }
+
+ getMachineOrNull().copyTo(new ByteArrayInputStream(getConfigData(port, include).getBytes()), getDriver().getRunDir()+"/redis.conf");
+ if (include) getMachineOrNull().copyTo(new File(includeName), getDriver().getRunDir()+"/include.conf");
+
+ super.configure();
+ }
+
+ @Override
+ public String getConfigData(int port, boolean include) {
+ String data =
+ "daemonize yes"+"\n"+
+ "pidfile "+getDriver().getRunDir()+"/pid.txt"+"\n"+
+ "port "+port+"\n";
+
+ if (include) data += "include "+getDriver().getRunDir()+"/include.conf";
+ return data;
+ }
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
index 7ae292a..8b8e8ae 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
@@ -21,13 +21,13 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
private String expandedInstallDir;
- public RedisStoreSshDriver(RedisStore entity, SshMachineLocation machine) {
+ public RedisStoreSshDriver(RedisStoreImpl entity, SshMachineLocation machine) {
super(entity, machine);
}
@Override
- public RedisStore getEntity() {
- return (RedisStore) super.getEntity();
+ public RedisStoreImpl getEntity() {
+ return (RedisStoreImpl) super.getEntity();
}
protected Integer getRedisPort() {
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
index 187f981..a3eeb2f 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
@@ -8,20 +8,28 @@ import org.testng.annotations.Test;
import redis.clients.jedis.Connection;
import brooklyn.entity.AbstractEc2LiveTest;
+import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.location.Location;
import brooklyn.test.EntityTestUtils;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
public class RedisEc2LiveTest extends AbstractEc2LiveTest {
@SuppressWarnings("unused")
private static final Logger LOG = LoggerFactory.getLogger(RedisEc2LiveTest.class);
+ @Test(groups = {"Live"})
+ public void test_CentOS_6_3() throws Exception {
+ // Image: {id=us-east-1/ami-7d7bfc14, providerId=ami-7d7bfc14, name=RightImage_CentOS_6.3_x64_v5.8.8.5, location={scope=REGION, id=us-east-1, description=us-east-1, parent=aws-ec2, iso3166Codes=[US-VA]}, os={family=centos, arch=paravirtual, version=6.0, description=rightscale-us-east/RightImage_CentOS_6.3_x64_v5.8.8.5.manifest.xml, is64Bit=true}, description=rightscale-us-east/RightImage_CentOS_6.3_x64_v5.8.8.5.manifest.xml, version=5.8.8.5, status=AVAILABLE[available], loginUser=root, userMetadata={owner=411009282317, rootDeviceType=instance-store, virtualizationType=paravirtual, hypervisor=xen}}
+ runTest(ImmutableMap.of("imageId", "us-east-1/ami-7d7bfc14", "hardwareId", SMALL_HARDWARE_ID));
+ }
+
@Override
protected void doTest(Location loc) throws Exception {
// Start Redis
- RedisStore redis = new RedisStore(app);
+ RedisStore redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
app.start(ImmutableList.of(loc));
EntityTestUtils.assertAttributeEqualsEventually(redis, RedisStore.SERVICE_UP, true);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c06d64c0/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
index c737070..44d9e0e 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
@@ -10,11 +10,13 @@ import org.testng.annotations.BeforeMethod
import org.testng.annotations.Test
import redis.clients.jedis.Connection
+import brooklyn.entity.basic.ApplicationBuilder
+import brooklyn.entity.basic.Entities
+import brooklyn.entity.proxying.EntitySpecs
import brooklyn.entity.trait.Startable
import brooklyn.location.Location
import brooklyn.location.basic.LocalhostMachineProvisioningLocation
import brooklyn.test.entity.TestApplication
-import brooklyn.test.entity.TestApplicationImpl
import brooklyn.util.internal.TimeExtras
/**
@@ -31,15 +33,15 @@ public class RedisIntegrationTest {
private Location testLocation
private RedisStore redis
- @BeforeMethod(groups = "Integration")
+ @BeforeMethod(alwaysRun=true)
public void setup() {
- app = new TestApplicationImpl();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = new LocalhostMachineProvisioningLocation(name:'london')
}
- @AfterMethod(groups = "Integration")
+ @AfterMethod(alwaysRun=true)
public void shutdown() {
- if (app != null) app.stop()
+ if (app != null) Entities.destroyAll(app);
}
/**
@@ -48,7 +50,7 @@ public class RedisIntegrationTest {
// FIXME Marked as WIP because failing in jenkins; environmental differences?
@Test(groups = ["Integration"])
public void canStartupAndShutdown() {
- redis = new RedisStore(parent:app);
+ redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
app.start([ testLocation ])
executeUntilSucceeds() {
assertTrue redis.getAttribute(Startable.SERVICE_UP)
@@ -65,7 +67,7 @@ public class RedisIntegrationTest {
@Test(groups = ["Integration"])
public void testRedisConnection() {
// Start Redis
- redis = new RedisStore(parent:app)
+ redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
app.start([ testLocation ])
executeUntilSucceeds {
assertTrue redis.getAttribute(Startable.SERVICE_UP)
[20/50] brooklyn-library git commit: Added test using Kafka API and
example application
Posted by he...@apache.org.
Added test using Kafka API and example 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/c1437063
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/c1437063
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/c1437063
Branch: refs/heads/0.5.0
Commit: c14370630975d0b83741704f0df266cf7033a6a8
Parents: 37e890c
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Mar 20 19:49:50 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:06 2013 +0100
----------------------------------------------------------------------
examples/simple-messaging-pubsub/README.txt | 7 +-
.../java/brooklyn/demo/KafkaClusterExample.java | 40 +++++++++++
.../brooklyn/demo/StandaloneBrokerExample.java | 54 ---------------
.../demo/StandaloneQpidBrokerExample.java | 54 +++++++++++++++
software/messaging/pom.xml | 73 +++++++++++++-------
.../entity/messaging/kafka/KafkaBroker.java | 4 +-
.../entity/messaging/kafka/KafkaBrokerImpl.java | 7 +-
.../entity/messaging/kafka/KafkaZookeeper.java | 2 +-
.../messaging/kafka/KafkaIntegrationTest.groovy | 21 ++++--
.../entity/messaging/kafka/KafkaSupport.java | 72 +++++++++++++++++++
10 files changed, 240 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/examples/simple-messaging-pubsub/README.txt
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/README.txt b/examples/simple-messaging-pubsub/README.txt
index 6048867..e27992e 100644
--- a/examples/simple-messaging-pubsub/README.txt
+++ b/examples/simple-messaging-pubsub/README.txt
@@ -7,7 +7,7 @@ The commands below assume that the `brooklyn` script is already on your $PATH, a
export BROOKLYN_CLASSPATH=$(pwd)/target/classes
# Launches a qpid broker on localhost
- brooklyn -v launch --app brooklyn.demo.StandaloneBrokerExample --location localhost
+ brooklyn -v launch --app brooklyn.demo.StandaloneQpidBrokerExample --location localhost
# You can get the broker's URL from the brooklyn web-console at http://localhost:8081
# by looking at the broker entity's sensors or from the verbose output from the application startup
@@ -19,6 +19,11 @@ The commands below assume that the `brooklyn` script is already on your $PATH, a
# Test publishing a message to the broker
java -cp "./resources/lib/*:./target/classes" brooklyn.demo.Publish ${URL}
+To test a Kafka distributed messaging cluster example, use the following command:
+
+ # Launches a Kafka cluster on AWS EC2 with two brokers
+ brooklyn -v launch --app brooklyn.demo.KafkaClusterExample --location aws-ec2:eu-west-1
+
---
For more information, please visit: http://brooklyncentral.github.com/use/examples/messaging/
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java
new file mode 100644
index 0000000..fae6bb6
--- /dev/null
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/KafkaClusterExample.java
@@ -0,0 +1,40 @@
+package brooklyn.demo;
+
+import java.util.List;
+
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.messaging.kafka.KafkaCluster;
+import brooklyn.entity.proxying.BasicEntitySpec;
+import brooklyn.launcher.BrooklynLauncher;
+import brooklyn.util.CommandLineUtil;
+
+import com.google.common.collect.Lists;
+
+/** Kafka Cluster Application */
+public class KafkaClusterExample extends ApplicationBuilder {
+
+ public static final String DEFAULT_LOCATION = "localhost";
+
+ /** Configure the application. */
+ protected void doBuild() {
+ createChild(BasicEntitySpec.newInstance(KafkaCluster.class)
+ .configure("initialSize", 2));
+
+ appDisplayName("Kafka cluster application");
+ }
+
+ public static void main(String[] argv) {
+ List<String> args = Lists.newArrayList(argv);
+ String port = CommandLineUtil.getCommandLineOption(args, "--port", "8081+");
+ String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
+
+ BrooklynLauncher launcher = BrooklynLauncher.newInstance()
+ .application(new KafkaClusterExample())
+ .webconsolePort(port)
+ .location(location)
+ .start();
+
+ Entities.dumpInfo(launcher.getApplications());
+ }
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
deleted file mode 100644
index 83cdc31..0000000
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package brooklyn.demo;
-
-import java.util.List;
-
-import brooklyn.entity.basic.AbstractApplication;
-import brooklyn.entity.basic.Entities;
-import brooklyn.entity.messaging.amqp.AmqpServer;
-import brooklyn.entity.messaging.qpid.QpidBroker;
-import brooklyn.entity.proxying.EntitySpecs;
-import brooklyn.launcher.BrooklynLauncher;
-import brooklyn.util.CommandLineUtil;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-
-/** Qpid Broker Application */
-public class StandaloneBrokerExample extends AbstractApplication {
-
- public static final String CUSTOM_CONFIG_PATH = "classpath://custom-config.xml";
- public static final String PASSWD_PATH = "classpath://passwd";
- public static final String QPID_BDBSTORE_JAR_PATH = "classpath://qpid-bdbstore-0.14.jar";
- public static final String BDBSTORE_JAR_PATH = "classpath://je-5.0.34.jar";
-
- public static final String DEFAULT_LOCATION = "localhost";
-
- @Override
- public void init() {
- // Configure the Qpid broker entity
- QpidBroker broker = addChild(EntitySpecs.spec(QpidBroker.class)
- .configure("amqpPort", 5672)
- .configure("amqpVersion", AmqpServer.AMQP_0_10)
- .configure("runtimeFiles", ImmutableMap.builder()
- .put(QpidBroker.CONFIG_XML, CUSTOM_CONFIG_PATH)
- .put(QpidBroker.PASSWD, PASSWD_PATH)
- .put("lib/opt/qpid-bdbstore-0.14.jar", QPID_BDBSTORE_JAR_PATH)
- .put("lib/opt/je-5.0.34.jar", BDBSTORE_JAR_PATH)
- .build())
- .configure("queue", "testQueue"));
- }
-
- public static void main(String[] argv) {
- List<String> args = Lists.newArrayList(argv);
- String port = CommandLineUtil.getCommandLineOption(args, "--port", "8081+");
- String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
-
- BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(EntitySpecs.appSpec(StandaloneBrokerExample.class).displayName("Qpid app"))
- .webconsolePort(port)
- .location(location)
- .start();
-
- Entities.dumpInfo(launcher.getApplications());
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneQpidBrokerExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneQpidBrokerExample.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneQpidBrokerExample.java
new file mode 100644
index 0000000..19b6c2e
--- /dev/null
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneQpidBrokerExample.java
@@ -0,0 +1,54 @@
+package brooklyn.demo;
+
+import java.util.List;
+
+import brooklyn.entity.basic.AbstractApplication;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.messaging.amqp.AmqpServer;
+import brooklyn.entity.messaging.qpid.QpidBroker;
+import brooklyn.entity.proxying.EntitySpecs;
+import brooklyn.launcher.BrooklynLauncher;
+import brooklyn.util.CommandLineUtil;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+
+/** Qpid Broker Application */
+public class StandaloneQpidBrokerExample extends AbstractApplication {
+
+ public static final String CUSTOM_CONFIG_PATH = "classpath://custom-config.xml";
+ public static final String PASSWD_PATH = "classpath://passwd";
+ public static final String QPID_BDBSTORE_JAR_PATH = "classpath://qpid-bdbstore-0.14.jar";
+ public static final String BDBSTORE_JAR_PATH = "classpath://je-5.0.34.jar";
+
+ public static final String DEFAULT_LOCATION = "localhost";
+
+ @Override
+ public void init() {
+ // Configure the Qpid broker entity
+ QpidBroker broker = addChild(EntitySpecs.spec(QpidBroker.class)
+ .configure("amqpPort", 5672)
+ .configure("amqpVersion", AmqpServer.AMQP_0_10)
+ .configure("runtimeFiles", ImmutableMap.builder()
+ .put(QpidBroker.CONFIG_XML, CUSTOM_CONFIG_PATH)
+ .put(QpidBroker.PASSWD, PASSWD_PATH)
+ .put("lib/opt/qpid-bdbstore-0.14.jar", QPID_BDBSTORE_JAR_PATH)
+ .put("lib/opt/je-5.0.34.jar", BDBSTORE_JAR_PATH)
+ .build())
+ .configure("queue", "testQueue"));
+ }
+
+ public static void main(String[] argv) {
+ List<String> args = Lists.newArrayList(argv);
+ String port = CommandLineUtil.getCommandLineOption(args, "--port", "8081+");
+ String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
+
+ BrooklynLauncher launcher = BrooklynLauncher.newInstance()
+ .application(EntitySpecs.appSpec(StandaloneQpidBrokerExample.class).displayName("Qpid app"))
+ .webconsolePort(port)
+ .location(location)
+ .start();
+
+ Entities.dumpInfo(launcher.getApplications());
+ }
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/software/messaging/pom.xml
----------------------------------------------------------------------
diff --git a/software/messaging/pom.xml b/software/messaging/pom.xml
index 4b0f372..7a81336 100644
--- a/software/messaging/pom.xml
+++ b/software/messaging/pom.xml
@@ -14,37 +14,21 @@
<relativePath>../../pom.xml</relativePath>
</parent>
- <dependencies>
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jms_1.1_spec</artifactId>
- <version>1.1.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.qpid</groupId>
- <artifactId>qpid-client</artifactId>
- <version>0.20</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.activemq</groupId>
- <artifactId>activemq-core</artifactId>
- <version>5.7.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.rabbitmq</groupId>
- <artifactId>amqp-client</artifactId>
- <version>2.8.7</version>
- </dependency>
+ <repositories>
+ <repository>
+ <id>clojars.org</id>
+ <url>http://clojars.org/repo</url>
+ </repository>
+ </repositories>
+ <dependencies>
<dependency>
<groupId>io.brooklyn</groupId>
<artifactId>brooklyn-software-base</artifactId>
<version>${project.version}</version>
</dependency>
-
+
+ <!-- test dependencies -->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>brooklyn-test-support</artifactId>
@@ -64,13 +48,50 @@
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
- <!-- bring in jclouds for testing -->
<dependency>
<groupId>io.brooklyn</groupId>
<artifactId>brooklyn-locations-jclouds</artifactId>
<version>${brooklyn.version}</version>
<scope>test</scope>
</dependency>
+
+ <!-- for qpid -->
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jms_1.1_spec</artifactId>
+ <version>1.1.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>qpid-client</artifactId>
+ <version>0.20</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- for activemq -->
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-core</artifactId>
+ <version>5.7.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- for rabbit -->
+ <dependency>
+ <groupId>com.rabbitmq</groupId>
+ <artifactId>amqp-client</artifactId>
+ <version>2.8.7</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- for kafka -->
+ <dependency>
+ <groupId>storm</groupId>
+ <artifactId>kafka</artifactId>
+ <version>0.7.0-incubating</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
index 13b8d0d..01fa424 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
@@ -45,7 +45,7 @@ public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Ka
@SetFromFlag("zookeeper")
BasicConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicConfigKey<KafkaZookeeper>(KafkaZookeeper.class, "Kafka zookeeper entity");
- AttributeSensor<Long> BROKER_ID = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.id", "Kafka unique broker ID");
+ AttributeSensor<Integer> BROKER_ID = new BasicAttributeSensor<Integer>(Integer.class, "kafka.broker.id", "Kafka unique broker ID");
BasicAttributeSensor<Long> FETCH_REQUEST_COUNT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.total", "Fetch request count");
BasicAttributeSensor<Long> TOTAL_FETCH_TIME = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.time.total", "Total fetch request processing time (millis)");
@@ -60,7 +60,7 @@ public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Ka
Integer getKafkaPort();
- Long getBrokerId();
+ Integer getBrokerId();
KafkaZookeeper getZookeeper();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index d76072e..ae21118 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -29,6 +29,7 @@ import brooklyn.entity.Entity;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.SoftwareProcessImpl;
import brooklyn.entity.messaging.MessageBroker;
+import brooklyn.event.basic.BasicAttributeSensor;
import brooklyn.event.feed.function.FunctionFeed;
import brooklyn.event.feed.function.FunctionPollConfig;
import brooklyn.event.feed.jmx.JmxAttributePollConfig;
@@ -45,8 +46,6 @@ import com.google.common.collect.Sets;
public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroker, KafkaBroker {
private static final Logger log = LoggerFactory.getLogger(KafkaBrokerImpl.class);
- private static final AtomicLong brokers = new AtomicLong(0l);
-
public KafkaBrokerImpl() {
super();
}
@@ -62,14 +61,14 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
@Override
public void postConstruct() {
- setAttribute(BROKER_ID, brokers.incrementAndGet());
+ setAttribute(BROKER_ID, hashCode());
}
@Override
public Integer getKafkaPort() { return getAttribute(KAFKA_PORT); }
@Override
- public Long getBrokerId() { return getAttribute(BROKER_ID); }
+ public Integer getBrokerId() { return getAttribute(BROKER_ID); }
@Override
public KafkaZookeeper getZookeeper() { return getConfig(ZOOKEEPER); }
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
index 8e1b5da..a1001f3 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
@@ -35,7 +35,7 @@ public interface KafkaZookeeper extends SoftwareProcess, UsesJmx, Kafka {
@SetFromFlag("zookeeperPort")
PortAttributeSensorAndConfigKey ZOOKEEPER_PORT = new PortAttributeSensorAndConfigKey("zookeeper.port", "Zookeeper port", "2181+");
- /** Location of the configuration file template to be copied to the server.*/
+ /** Location of the configuration file template to be copied to the server. */
@SetFromFlag("zookeeperConfig")
BasicConfigKey<String> ZOOKEEPER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
String.class, "kafka.config.zookeeper", "Zookeeper configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/zookeeper.properties");
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
index 0943dcd..cbfb410 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
@@ -46,6 +46,8 @@ import brooklyn.util.internal.TimeExtras
/**
* Test the operation of the {@link ActiveMQBroker} class.
+ *
+ * TODO test that sensors update.
*/
public class KafkaIntegrationTest {
private static final Logger log = LoggerFactory.getLogger(KafkaIntegrationTest.class)
@@ -101,20 +103,27 @@ public class KafkaIntegrationTest {
/**
* Test that we can start a cluster with zookeeper and one broker.
+ *
+ * Connects to the zookeeper controller and tests sending and receiving messages on a topic.
*/
@Test(groups = "Integration")
public void testSingleBrokerCluster() {
KafkaCluster cluster = app.createAndManageChild(BasicEntitySpec.newInstance(KafkaCluster.class).configure(KafkaCluster.INITIAL_SIZE, 1));
cluster.start([ testLocation ])
- executeUntilSucceedsWithShutdown(cluster, timeout:600*TimeUnit.SECONDS) {
+ executeUntilSucceeds(timeout:600*TimeUnit.SECONDS) {
assertTrue cluster.getAttribute(Startable.SERVICE_UP)
- Entities.dumpInfo(cluster)
}
- assertFalse cluster.getAttribute(Startable.SERVICE_UP)
+
+ Entities.dumpInfo(cluster);
+
+ Thread.sleep(5000l);
+
+ KafkaSupport support = new KafkaSupport(cluster.getZookeeper());
+ support.sendMessage("brooklyn", "TEST_MESSAGE")
+ List<String> messages = support.getMessage("brooklyn");
+ assertEquals(messages.size(), 1);
+ assertEquals(messages.get(0), "TEST_MESSAGE");
}
- // TODO test with API sending messages
- // TODO test that sensors update
- // TODO add demo application
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c1437063/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
new file mode 100644
index 0000000..d026f06
--- /dev/null
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaSupport.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import static org.testng.Assert.*;
+
+import java.util.List;
+import java.util.Properties;
+
+import kafka.consumer.Consumer;
+import kafka.consumer.ConsumerConfig;
+import kafka.consumer.KafkaMessageStream;
+import kafka.javaapi.consumer.ConsumerConnector;
+import kafka.javaapi.producer.Producer;
+import kafka.javaapi.producer.ProducerData;
+import kafka.message.Message;
+import kafka.producer.ProducerConfig;
+import brooklyn.entity.basic.Attributes;
+
+import com.beust.jcommander.internal.Lists;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+
+public class KafkaSupport {
+
+ private final KafkaZookeeper zookeeper;
+
+ public KafkaSupport(KafkaZookeeper zookeeper) {
+ this.zookeeper = zookeeper;
+ }
+
+ public void sendMessage(String topic, String message) {
+ Properties props = new Properties();
+ props.put("zk.connect", String.format("%s:%d", zookeeper.getAttribute(Attributes.HOSTNAME), zookeeper.getZookeeperPort()));
+ props.put("serializer.class", "kafka.serializer.StringEncoder");
+ ProducerConfig config = new ProducerConfig(props);
+ Producer<String, String> producer = new Producer<String, String>(config);
+ ProducerData<String, String> data = new ProducerData<String, String>(topic, message);
+ producer.send(data);
+ producer.close();
+ }
+
+ public List<String> getMessage(String topic) {
+ Properties props = new Properties();
+ props.put("zk.connect", String.format("%s:%d", zookeeper.getAttribute(Attributes.HOSTNAME), zookeeper.getZookeeperPort()));
+ props.put("zk.connectiontimeout.ms", "1000000");
+ props.put("groupid", "test_group");
+ ConsumerConfig consumerConfig = new ConsumerConfig(props);
+ ConsumerConnector consumer = Consumer.createJavaConsumerConnector(consumerConfig);
+ List<KafkaMessageStream<Message>> streams = consumer.createMessageStreams(ImmutableMap.of(topic, 1)).get(topic);
+ List<String> messages = Lists.newArrayList();
+ for (Message msg : Iterables.getOnlyElement(streams)) {
+ assertTrue(msg.isValid());
+ String payload = new String(msg.payload().array());
+ messages.add(payload);
+ }
+ return messages;
+ }
+}
[49/50] brooklyn-library git commit: AbstractController: use
PORT_NUMBER_SENSOR config
Posted by he...@apache.org.
AbstractController: use PORT_NUMBER_SENSOR config
- Previously, it hard-coded HTTP_PORT rather than using
key specified in the configuration
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/929ee88c
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/929ee88c
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/929ee88c
Branch: refs/heads/0.5.0
Commit: 929ee88c559c2696f48e681d75824c8f62be5640
Parents: 0d9ee80
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 17 14:41:12 2013 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Apr 25 11:24:49 2013 +0100
----------------------------------------------------------------------
.../main/java/brooklyn/entity/proxy/AbstractControllerImpl.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/929ee88c/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 4585013..609cfed 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -150,7 +150,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
}
@Override
- public AttributeSensor getPortNumberSensor() {
+ public AttributeSensor<Integer> getPortNumberSensor() {
return getAttribute(PORT_NUMBER_SENSOR);
}
@@ -336,7 +336,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
protected String getAddressOfEntity(Entity member) {
String ip = member.getAttribute(Attributes.HOSTNAME);
- Integer port = member.getAttribute(Attributes.HTTP_PORT);
+ Integer port = member.getAttribute(getPortNumberSensor());
if (ip!=null && port!=null) {
return ip+":"+port;
}
[23/50] brooklyn-library git commit: Organize imports
Posted by he...@apache.org.
Organize imports
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/dee689a4
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/dee689a4
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/dee689a4
Branch: refs/heads/0.5.0
Commit: dee689a492130ce5117c9a3b5246b7f61cc330de
Parents: 2ca3ea7
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Mar 20 21:49:58 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:06 2013 +0100
----------------------------------------------------------------------
.../java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java | 1 -
.../brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java | 4 +---
.../java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java | 2 --
.../brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java | 2 +-
4 files changed, 2 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dee689a4/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index 0abdf45..625fe3f 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -22,7 +22,6 @@ import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
-import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.slf4j.Logger;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dee689a4/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
index e6c9e4e..b3cd0f0 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
@@ -15,10 +15,8 @@
*/
package brooklyn.entity.messaging.kafka;
-import static com.google.common.base.Preconditions.checkNotNull;
import static java.lang.String.format;
-import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -50,7 +48,7 @@ public class KafkaBrokerSshDriver extends JavaSoftwareProcessSshDriver implement
}
@Override
- protected String getLogFileLocation() { return getRunDir()+"/kafka-log"; }
+ protected String getLogFileLocation() { return getRunDir()+"/console.out"; }
@Override
public Integer getKafkaPort() { return entity.getAttribute(KafkaBroker.KAFKA_PORT); }
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dee689a4/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
index a572a75..8d9d4f4 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
@@ -29,7 +29,6 @@ import org.slf4j.LoggerFactory;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.SoftwareProcessImpl;
-import brooklyn.entity.messaging.qpid.QpidBroker;
import brooklyn.event.feed.function.FunctionFeed;
import brooklyn.event.feed.function.FunctionPollConfig;
import brooklyn.event.feed.jmx.JmxAttributePollConfig;
@@ -38,7 +37,6 @@ import brooklyn.event.feed.jmx.JmxHelper;
import brooklyn.util.MutableMap;
import brooklyn.util.exceptions.Exceptions;
-import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.Sets;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dee689a4/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
index 4310489..bbaaa0d 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
@@ -44,7 +44,7 @@ public class KafkaZookeeperSshDriver extends JavaSoftwareProcessSshDriver implem
}
@Override
- protected String getLogFileLocation() { return getRunDir()+"/kafka-log"; }
+ protected String getLogFileLocation() { return getRunDir()+"/console.out"; }
@Override
public Integer getZookeeperPort() { return entity.getAttribute(KafkaZookeeper.ZOOKEEPER_PORT); }
[41/50] brooklyn-library git commit: Redis: add missing interfaces
Posted by he...@apache.org.
Redis: add missing 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/e4098ab6
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/e4098ab6
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/e4098ab6
Branch: refs/heads/0.5.0
Commit: e4098ab6d71c4a1c64d316861e1b728c7da81479
Parents: c06d64c
Author: Aled Sage <al...@gmail.com>
Authored: Mon Apr 22 13:09:04 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:44 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/RedisCluster.java | 19 +++++++++
.../brooklyn/entity/nosql/redis/RedisShard.java | 9 ++++
.../brooklyn/entity/nosql/redis/RedisSlave.java | 12 ++++++
.../brooklyn/entity/nosql/redis/RedisStore.java | 43 ++++++++++++++++++++
.../entity/nosql/redis/RedisEc2LiveTest.java | 3 +-
5 files changed, 85 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e4098ab6/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
new file mode 100644
index 0000000..57b3682
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
@@ -0,0 +1,19 @@
+package brooklyn.entity.nosql.redis;
+
+import brooklyn.catalog.Catalog;
+import brooklyn.entity.Entity;
+import brooklyn.entity.group.DynamicCluster;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.entity.trait.Startable;
+
+/**
+ * A cluster of {@link RedisStore}s with one master and a group of slaves.
+ *
+ * The slaves are contained in a {@link DynamicCluster} which can be resized by a policy if required.
+ *
+ * TODO add sensors with aggregated Redis statistics from cluster
+ */
+@Catalog(name="Redis Cluster", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.jpeg")
+@ImplementedBy(RedisClusterImpl.class)
+public interface RedisCluster extends Entity, Startable {
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e4098ab6/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java
new file mode 100644
index 0000000..7ce30c0
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShard.java
@@ -0,0 +1,9 @@
+package brooklyn.entity.nosql.redis;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.nosql.Shard;
+import brooklyn.entity.proxying.ImplementedBy;
+
+@ImplementedBy(RedisShardImpl.class)
+public interface RedisShard extends Entity, Shard {
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e4098ab6/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
new file mode 100644
index 0000000..d433688
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
@@ -0,0 +1,12 @@
+package brooklyn.entity.nosql.redis;
+
+import brooklyn.entity.proxying.ImplementedBy;
+
+/**
+ * A {@link RedisStore} configured as a slave.
+ *
+ * The {@code master} property must be set to the master Redis store entity.
+ */
+@ImplementedBy(RedisSlaveImpl.class)
+public interface RedisSlave extends RedisStore {
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e4098ab6/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
new file mode 100644
index 0000000..a6ce441
--- /dev/null
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
@@ -0,0 +1,43 @@
+package brooklyn.entity.nosql.redis;
+
+import brooklyn.catalog.Catalog;
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.nosql.DataStore;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
+import brooklyn.util.flags.SetFromFlag;
+
+/**
+ * An entity that represents a Redis key-value store service.
+ *
+ * TODO add sensors with Redis statistics using INFO command
+ */
+@Catalog(name="Redis Server", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.jpeg")
+@ImplementedBy(RedisStoreImpl.class)
+public interface RedisStore extends SoftwareProcess, DataStore {
+
+ @SetFromFlag("version")
+ public static final BasicConfigKey<String> SUGGESTED_VERSION =
+ new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "2.6.7");
+
+ @SetFromFlag("downloadUrl")
+ public static final BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
+ SoftwareProcess.DOWNLOAD_URL, "http://redis.googlecode.com/files/redis-${version}.tar.gz");
+
+ @SetFromFlag("redisPort")
+ public static final PortAttributeSensorAndConfigKey REDIS_PORT = new PortAttributeSensorAndConfigKey("redis.port", "Redis port number", 6379);
+
+ @SetFromFlag("configFile")
+ public static final ConfigKey<String> REDIS_CONFIG_FILE = new BasicConfigKey<String>(String.class, "redis.config.file", "Redis user configuration file");
+
+ public static final AttributeSensor<Integer> UPTIME = new BasicAttributeSensor<Integer>(Integer.class, "redis.uptime", "Redis uptime in seconds");
+
+ public String getAddress();
+
+ public String getConfigData(int port, boolean include);
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e4098ab6/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
index a3eeb2f..d49fee5 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
@@ -40,8 +40,9 @@ public class RedisEc2LiveTest extends AbstractEc2LiveTest {
}
private Connection getRedisConnection(RedisStore redis) {
+ String hostname = redis.getAttribute(RedisStore.HOSTNAME);
int port = redis.getAttribute(RedisStore.REDIS_PORT);
- Connection connection = new Connection("localhost", port);
+ Connection connection = new Connection(hostname, port);
connection.connect();
return connection;
}
[40/50] brooklyn-library git commit: Fixing build commands to install
Redis
Posted by he...@apache.org.
Fixing build commands to install Redis
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/464ef006
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/464ef006
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/464ef006
Branch: refs/heads/0.5.0
Commit: 464ef0063caa3ecbb2786fbae12c3e00721a7bb9
Parents: c65577e
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Sat Apr 20 17:29:44 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:43 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/nosql/redis/RedisStoreSshDriver.java | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/464ef006/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
index 6efccdb..7ae292a 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
@@ -5,11 +5,12 @@ import static java.lang.String.format;
import java.util.List;
import brooklyn.entity.basic.AbstractSoftwareProcessSshDriver;
-import brooklyn.entity.basic.lifecycle.CommonCommands;
+import brooklyn.entity.basic.Entities;
import brooklyn.entity.drivers.downloads.DownloadResolver;
import brooklyn.location.Location;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.util.MutableMap;
+import brooklyn.util.ssh.CommonCommands;
import com.google.common.collect.ImmutableList;
@@ -40,7 +41,7 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
@Override
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("redis-%s", getVersion()));
@@ -48,12 +49,10 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
List<String> commands = ImmutableList.<String>builder()
.addAll(CommonCommands.downloadUrlAs(urls, saveAs))
.add(CommonCommands.INSTALL_TAR)
- .add(CommonCommands.installPackage(MutableMap.of("apt", "libjemalloc-dev", "yum", "jemalloc-devel", "port", null, "brew", null), null))
.add("tar xzfv " + saveAs)
.add(format("cd redis-%s", getVersion()))
.add("make distclean")
- .add("cd deps; make hiredis lua jemalloc linenoise; cd ..")
- .add("make LDFLAGS=\"-all-static\"")
+ .add("make")
.build();
newScript(INSTALLING)
[04/50] brooklyn-library git commit: Merge pull request #627 from
grkvlt/wait-for-server-up
Posted by he...@apache.org.
Merge pull request #627 from grkvlt/wait-for-server-up
Make startup timeout configurable and connect SERVICE_UP to isRunning
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/720c93cd
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/720c93cd
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/720c93cd
Branch: refs/heads/0.5.0
Commit: 720c93cdb8b958e57a9251a56d97563e99ad7bd6
Parents: a179334 8fa6840
Author: Aled Sage <al...@gmail.com>
Authored: Wed Mar 27 04:06:21 2013 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Mar 27 04:06:21 2013 -0700
----------------------------------------------------------------------
.../entity/database/derby/DerbyDatabase.java | 14 +++++------
.../database/rubyrep/RubyRepNodeImpl.java | 20 +++-------------
.../entity/messaging/qpid/QpidBrokerImpl.java | 3 +--
.../messaging/rabbit/RabbitBrokerImpl.java | 25 +++++++++-----------
.../entity/nosql/couchdb/CouchDBNodeImpl.java | 17 +++----------
.../entity/nosql/mongodb/MongoDbServerImpl.java | 16 +++----------
.../brooklyn/entity/nosql/redis/RedisStore.java | 17 ++++++-------
7 files changed, 36 insertions(+), 76 deletions(-)
----------------------------------------------------------------------
[38/50] brooklyn-library git commit: Add one minute timeout to
RabbitMQ integration test
Posted by he...@apache.org.
Add one minute timeout to RabbitMQ integration 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/c65577e9
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/c65577e9
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/c65577e9
Branch: refs/heads/0.5.0
Commit: c65577e9eb7447ac8a9403f53f6a63bac9403bb5
Parents: 4b5d145
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Apr 24 13:09:07 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:09:07 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c65577e9/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
index 94aeb0f..1ad3597 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
@@ -101,7 +101,7 @@ public class RabbitIntegrationTest {
QueueingConsumer queueConsumer = new QueueingConsumer(consumer);
consumer.basicConsume(queue, true, queueConsumer);
- QueueingConsumer.Delivery delivery = queueConsumer.nextDelivery();
+ QueueingConsumer.Delivery delivery = queueConsumer.nextDelivery(60 * 1000l); // one minute timeout
assertEquals(delivery.body, content)
} finally {
producer?.close()
[24/50] brooklyn-library git commit: Added EC2 live test for
KafkaCluster
Posted by he...@apache.org.
Added EC2 live test for KafkaCluster
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/317363ab
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/317363ab
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/317363ab
Branch: refs/heads/0.5.0
Commit: 317363ab745e7f660d27d29abf4808650483fcd3
Parents: 64486e4
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Apr 3 12:37:09 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:07 2013 +0100
----------------------------------------------------------------------
.../entity/messaging/kafka/KafkaLiveTest.java | 37 ++++++++++++++++++--
1 file changed, 35 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/317363ab/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java
index 6229b4e..8f61400 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaLiveTest.java
@@ -15,17 +15,50 @@
*/
package brooklyn.entity.messaging.kafka;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.concurrent.Callable;
+
import brooklyn.entity.AbstractEc2LiveTest;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.proxying.EntitySpecs;
+import brooklyn.entity.trait.Startable;
import brooklyn.location.Location;
+import brooklyn.test.Asserts;
+import brooklyn.util.MutableMap;
+
+import com.google.common.collect.ImmutableList;
public class KafkaLiveTest extends AbstractEc2LiveTest {
/**
- * Test Kafka cluster operation.
+ * Test that can install, start and use a Kafka cluster with two brokers.
*/
@Override
protected void doTest(Location loc) throws Exception {
- throw new UnsupportedOperationException();
+ final KafkaCluster cluster = app.createAndManageChild(EntitySpecs.spec(KafkaCluster.class)
+ .configure("startTimeout", 300) // 5 minutes
+ .configure("initialSize", 2));
+ app.start(ImmutableList.of(loc));
+
+ Asserts.succeedsEventually(MutableMap.of("timeout", 300000l), new Callable<Void>() {
+ @Override
+ public Void call() {
+ assertTrue(cluster.getAttribute(Startable.SERVICE_UP));
+ assertTrue(cluster.getZookeeper().getAttribute(Startable.SERVICE_UP));
+ assertEquals(cluster.getCurrentSize().intValue(), 2);
+ return null;
+ }
+ });
+
+ Entities.dumpInfo(cluster);
+
+ KafkaSupport support = new KafkaSupport(cluster);
+
+ support.sendMessage("brooklyn", "TEST_MESSAGE");
+ String message = support.getMessage("brooklyn");
+ assertEquals(message, "TEST_MESSAGE");
}
}
[32/50] brooklyn-library git commit: Updated Tomcat to 7.0.39
Posted by he...@apache.org.
Updated Tomcat to 7.0.39
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/96465a40
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/96465a40
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/96465a40
Branch: refs/heads/0.5.0
Commit: 96465a40142fcc1aec0f3e32428aa5cf6180cd35
Parents: 74e4016
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Fri Apr 19 12:22:12 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 12:22:55 2013 +0100
----------------------------------------------------------------------
.../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/96465a40/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 0b46566..241fd20 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
@@ -40,7 +40,7 @@ public interface TomcatServer extends JavaWebAppSoftwareProcess, UsesJmx, HasSho
}
@SetFromFlag("version")
- BasicConfigKey<String> SUGGESTED_VERSION = new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "7.0.37");
+ BasicConfigKey<String> SUGGESTED_VERSION = new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "7.0.39");
@SetFromFlag("downloadUrl")
BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
[07/50] brooklyn-library git commit: Merge pull request #626 from
ahgittin/misc
Posted by he...@apache.org.
Merge pull request #626 from ahgittin/misc
HttpLatencyDetector
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/8c9b039e
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/8c9b039e
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/8c9b039e
Branch: refs/heads/0.5.0
Commit: 8c9b039e848bfd57eacccb2f520944494cb9666a
Parents: ca73363 f10cb8a
Author: Aled Sage <al...@gmail.com>
Authored: Wed Mar 27 08:49:23 2013 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Mar 27 08:49:23 2013 -0700
----------------------------------------------------------------------
.../extras/whirr/WebClusterWithHadoopExample.java | 14 ++------------
.../extras/whirr/WebFabricWithHadoopExample.java | 14 ++------------
.../brooklyn/demo/WebClusterDatabaseExampleApp.java | 12 +++++++++++-
3 files changed, 15 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
[44/50] brooklyn-library git commit: Better testing with Jedis API
Posted by he...@apache.org.
Better testing with Jedis API
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/657047f0
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/657047f0
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/657047f0
Branch: refs/heads/0.5.0
Commit: 657047f053938eb768e689147fe3e1cf2c6fb6a9
Parents: 79e666f
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Mon Apr 22 18:06:29 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:44 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/JedisSupport.java | 63 ++++++++++++++++++++
.../entity/nosql/redis/RedisEc2LiveTest.java | 2 +-
.../nosql/redis/RedisIntegrationTest.java | 2 +-
.../entity/nosql/redis/RedisSupport.java | 41 -------------
4 files changed, 65 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/657047f0/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java
new file mode 100644
index 0000000..d481136
--- /dev/null
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2012-2013 by Cloudsoft Corp.
+ */
+package brooklyn.entity.nosql.redis;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPubSub;
+
+/**
+ * {@link RedisStore} testing using Jedis API.
+ */
+public class JedisSupport {
+ private static final Logger log = LoggerFactory.getLogger(JedisSupport.class);
+
+ private RedisStore redis;
+
+ public JedisSupport(RedisStore redis) {
+ this.redis = redis;
+ }
+
+ /**
+ * Exercise the {@link RedisStore} using the Jedis API.
+ */
+ public void redisTest() throws Exception {
+ final CountDownLatch latch = new CountDownLatch(1);
+ Jedis client = getRedisClient(redis);
+ client.subscribe(new JedisPubSub() {
+ public void onMessage(String channel, String message) {
+ assertEquals(channel, "brooklyn");
+ assertEquals(message, "message");
+ latch.countDown();
+ }
+ public void onSubscribe(String channel, int subscribedChannels) { }
+ public void onUnsubscribe(String channel, int subscribedChannels) { }
+ public void onPSubscribe(String pattern, int subscribedChannels) { }
+ public void onPUnsubscribe(String pattern, int subscribedChannels) { }
+ public void onPMessage(String pattern, String channel, String message) { }
+ }, "brooklyn");
+
+ client.publish("brooklyn", "message");
+
+ assertTrue(latch.await(60, TimeUnit.SECONDS));
+ client.disconnect();
+ }
+
+ private Jedis getRedisClient(RedisStore redis) {
+ int port = redis.getAttribute(RedisStore.REDIS_PORT);
+ String host = redis.getAttribute(RedisStore.HOSTNAME);
+ Jedis client = new Jedis(host, port);
+ client.connect();
+ assertTrue(client.isConnected());
+ return client;
+ }
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/657047f0/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
index eb49ac9..e9365f3 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
@@ -29,7 +29,7 @@ public class RedisEc2LiveTest extends AbstractEc2LiveTest {
app.start(ImmutableList.of(loc));
EntityTestUtils.assertAttributeEqualsEventually(redis, RedisStore.SERVICE_UP, true);
- RedisSupport support = new RedisSupport(redis);
+ JedisSupport support = new JedisSupport(redis);
try {
support.redisTest();
} finally {
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/657047f0/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
index 1ddfa92..35b6a9e 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
@@ -66,7 +66,7 @@ public class RedisIntegrationTest {
EntityTestUtils.assertAttributeEqualsEventually(redis, Startable.SERVICE_UP, true);
- RedisSupport support = new RedisSupport(redis);
+ JedisSupport support = new JedisSupport(redis);
try {
support.redisTest();
} finally {
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/657047f0/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
deleted file mode 100644
index f617922..0000000
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2012-2013 by Cloudsoft Corp.
- */
-package brooklyn.entity.nosql.redis;
-
-import static org.testng.Assert.assertTrue;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import redis.clients.jedis.Connection;
-
-/**
- * {@link RedisStore} testing using Redis API.
- */
-public class RedisSupport {
- private static final Logger log = LoggerFactory.getLogger(RedisSupport.class);
-
- private RedisStore redis;
-
- public RedisSupport(RedisStore redis) {
- this.redis = redis;
- }
-
- /**
- * Exercise the {@link RedisStore} using the Redis API.
- */
- public void redisTest() throws Exception {
- // Access Redis
- Connection connection = getRedisConnection(redis);
- assertTrue(connection.isConnected());
- connection.disconnect();
- }
-
- private Connection getRedisConnection(RedisStore redis) {
- int port = redis.getAttribute(RedisStore.REDIS_PORT);
- Connection connection = new Connection("localhost", port);
- connection.connect();
- return connection;
- }
-}
[31/50] brooklyn-library git commit: Use new method in Entities class
to get download resolver
Posted by he...@apache.org.
Use new method in Entities class to get download resolver
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/400e17f2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/400e17f2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/400e17f2
Branch: refs/heads/0.5.0
Commit: 400e17f2274307e087f8725a3ca476e1ca634da4
Parents: 317363a
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Apr 4 12:08:34 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:37:17 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/400e17f2/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
index 21e7092..2686140 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.BrooklynVersion;
import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.EntityLocal;
import brooklyn.util.ssh.CommonCommands;
import brooklyn.entity.drivers.downloads.DownloadResolver;
@@ -69,7 +70,7 @@ public abstract class AbstractfKafkaSshDriver extends JavaSoftwareProcessSshDriv
@Override
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("kafka-%s-src", getVersion()));
[36/50] brooklyn-library git commit: Fix until clause in groovy
WebAppIntegrationTest to return boolean
Posted by he...@apache.org.
Fix until clause in groovy WebAppIntegrationTest to return boolean
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/d99e0868
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/d99e0868
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/d99e0868
Branch: refs/heads/0.5.0
Commit: d99e0868f70aa7253dd2f37acb72d7da9e649102
Parents: 1dc5a60
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Fri Apr 19 21:14:57 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 21:14:57 2013 +0100
----------------------------------------------------------------------
.../test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/d99e0868/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
index f9414d1..8d4a153 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
@@ -105,7 +105,7 @@ public class WebAppIntegrationTest {
gotException = null
}
.every(100 * MILLISECONDS)
- .until { gotException }
+ .until { gotException != null }
.limitIterationsTo(25)
.run();
[16/50] brooklyn-library git commit: Remove old
monitored-cassandra-cluster example project
Posted by he...@apache.org.
Remove old monitored-cassandra-cluster example project
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/8ff050ff
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/8ff050ff
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/8ff050ff
Branch: refs/heads/0.5.0
Commit: 8ff050ff814f5ff1612f42f765192de43e9086c1
Parents: 32a6eba
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Apr 10 14:49:53 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 10 15:14:57 2013 +0100
----------------------------------------------------------------------
.../demo/MonitoredCassandraClusterExample.java | 20 --------------------
1 file changed, 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ff050ff/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
deleted file mode 100644
index 9c543e3..0000000
--- a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package brooklyn.demo;
-
-import brooklyn.entity.basic.AbstractApplication;
-import brooklyn.entity.nosql.cassandra.CassandraCluster;
-import brooklyn.entity.proxying.EntitySpecs;
-
-/** Cassandra Application */
-public class MonitoredCassandraClusterExample extends AbstractApplication {
-
- @Override
- public void init() {
- addChild(EntitySpecs.spec(CassandraCluster.class)
- .configure("initialSize", "2")
- .configure("clusterName", "CassandraDemo")
- .configure("jmxPort", "11099+")
- .configure("rmiServerPort", "9001+")
- .configure("thriftPort", "9160+"));
- }
-
-}
[46/50] brooklyn-library git commit: Synchronous test using Jedis API
Posted by he...@apache.org.
Synchronous test using Jedis API
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/387cc271
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/387cc271
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/387cc271
Branch: refs/heads/0.5.0
Commit: 387cc27178f4087b087ffbab0ec082982f2e7d53
Parents: dc04ab2
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Tue Apr 23 01:41:19 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:45 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/JedisSupport.java | 42 ++++++++------------
1 file changed, 16 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/387cc271/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java
index d481136..e086188 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/JedisSupport.java
@@ -5,21 +5,15 @@ package brooklyn.entity.nosql.redis;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisPubSub;
+
+import com.google.common.base.Strings;
/**
* {@link RedisStore} testing using Jedis API.
*/
public class JedisSupport {
- private static final Logger log = LoggerFactory.getLogger(JedisSupport.class);
+ private static final String TEST_DATA = Strings.repeat("0123456789", 16);
private RedisStore redis;
@@ -31,25 +25,21 @@ public class JedisSupport {
* Exercise the {@link RedisStore} using the Jedis API.
*/
public void redisTest() throws Exception {
- final CountDownLatch latch = new CountDownLatch(1);
+ writeData(TEST_DATA);
+ String result = readData();
+ assertEquals(result, TEST_DATA);
+ }
+ public void writeData(String data) throws Exception {
+ Jedis client = getRedisClient(redis);
+ client.set("brooklyn", data);
+ client.disconnect();
+ }
+
+ public String readData() throws Exception {
Jedis client = getRedisClient(redis);
- client.subscribe(new JedisPubSub() {
- public void onMessage(String channel, String message) {
- assertEquals(channel, "brooklyn");
- assertEquals(message, "message");
- latch.countDown();
- }
- public void onSubscribe(String channel, int subscribedChannels) { }
- public void onUnsubscribe(String channel, int subscribedChannels) { }
- public void onPSubscribe(String pattern, int subscribedChannels) { }
- public void onPUnsubscribe(String pattern, int subscribedChannels) { }
- public void onPMessage(String pattern, String channel, String message) { }
- }, "brooklyn");
-
- client.publish("brooklyn", "message");
-
- assertTrue(latch.await(60, TimeUnit.SECONDS));
+ String result = client.get("brooklyn");
client.disconnect();
+ return result;
}
private Jedis getRedisClient(RedisStore redis) {
[47/50] brooklyn-library git commit: geo-dns: update member list of
entity.hostname changes
Posted by he...@apache.org.
geo-dns: update member list of entity.hostname changes
- Useful for some private subnet examples, where the hostname/url
gets transformed.
- Transforms tests from groovy to 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/8d1b5d2b
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/8d1b5d2b
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/8d1b5d2b
Branch: refs/heads/0.5.0
Commit: 8d1b5d2b8e40a882f9f396ae9f4673ee1a30150b
Parents: 387cc27
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 17 14:38:04 2013 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Apr 25 11:18:21 2013 +0100
----------------------------------------------------------------------
.../entity/dns/AbstractGeoDnsServiceImpl.java | 78 +++++----
.../entity/dns/AbstractGeoDnsServiceTest.groovy | 152 -----------------
.../entity/dns/AbstractGeoDnsServiceTest.java | 166 +++++++++++++++++++
.../geoscaling/GeoscalingIntegrationTest.groovy | 67 --------
.../geoscaling/GeoscalingIntegrationTest.java | 86 ++++++++++
5 files changed, 301 insertions(+), 248 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8d1b5d2b/software/webapp/src/main/java/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java b/software/webapp/src/main/java/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
index 55be2c0..959c277 100644
--- a/software/webapp/src/main/java/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
@@ -3,6 +3,7 @@ package brooklyn.entity.dns;
import static com.google.common.base.Preconditions.checkNotNull;
import java.net.InetAddress;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
@@ -154,8 +155,8 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
boolean changed = false;
Set<Entity> previousOnes = MutableSet.copyOf(targetHosts.keySet());
for (Entity e: pool) {
- if (previousOnes.remove(e)) continue;
- changed |= addTargetHost(e, false);
+ previousOnes.remove(e);
+ changed |= addTargetHost(e);
}
//anything left in previousOnes is no longer applicable
for (Entity e: previousOnes) {
@@ -171,44 +172,39 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
}
}
- /** returns if host is added */
- protected boolean addTargetHost(Entity e, boolean doUpdate) {
- if (targetHosts.containsKey(e)) {
- log.warn("GeoDns ignoring already-added entity {}", e);
- return false;
- }
- //add it if it is valid
+ /**
+ * Adds this host, if it is absent or if its hostname has changed.
+ *
+ * @return true if host is added or changed
+ */
+ protected boolean addTargetHost(Entity e) {
try {
- String hostname = e.getAttribute(Attributes.HOSTNAME);
- String url = e.getAttribute(WebAppService.ROOT_URL);
- if (url!=null) {
- URL u = new URL(url);
- if (hostname==null) {
- if (!entitiesWithoutGeoInfo.contains(e)) //don't log repeatedly
- log.warn("GeoDns using URL {} to redirect to {} (HOSTNAME attribute is preferred, but not available)", url, e);
- hostname = u.getHost();
- }
- if (u.getPort() > 0 && u.getPort() != 80 && u.getPort() != 443) {
- if (!entitiesWithoutGeoInfo.contains(e)) //don't log repeatedly
- log.warn("GeoDns detected non-standard port in URL {} for {}; forwarding may not work", url, e);
- }
- }
- if (hostname==null) {
+ HostGeoInfo oldGeo = targetHosts.get(e);
+ String hostname = inferHostname(e);
+ HostGeoInfo geoH = (hostname == null) ? null : HostGeoInfo.fromIpAddress(InetAddress.getByName(hostname));
+
+ if (hostname == null) {
if (entitiesWithoutGeoInfo.add(e)) {
log.debug("GeoDns ignoring {}, will continue scanning (no hostname or URL available)", e);
}
return false;
}
- HostGeoInfo geoH = HostGeoInfo.fromIpAddress(InetAddress.getByName(hostname));
+
if (geoH == null) {
if (entitiesWithoutGeoInfo.add(e)) {
log.warn("GeoDns ignoring {} (no geography info available for {})", e, hostname);
}
return false;
}
+
+ // If we already knew about it, and it hasn't changed, then nothing to do
+ if (oldGeo != null && geoH.getAddress().equals(oldGeo.getAddress())) {
+ return false;
+ }
+
+ // Check if location has lat/lon explicitly set; use geo-dns but warn if dramatically different
HostGeoInfo geoE = HostGeoInfo.fromEntity(e);
- if (geoE!=null) {
- //geo info set for both; prefer H, but warn if they differ dramatially
+ if (geoE != null) {
if ((Math.abs(geoH.latitude-geoE.latitude)>3) ||
(Math.abs(geoH.longitude-geoE.longitude)>3) ) {
log.warn("GeoDns mismatch, {} is in {} but hosts URL in {}", new Object[] {e, geoE, geoH});
@@ -216,10 +212,10 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
}
entitiesWithoutGeoInfo.remove(e);
- log.info("GeoDns adding "+e+" at "+geoH+(url!=null ? " (downstream listening on "+url+")" : ""));
+ log.info("GeoDns adding "+e+" at "+geoH+(oldGeo != null ? " (previously "+oldGeo+")" : ""));
targetHosts.put(e, geoH);
- if (doUpdate) update();
return true;
+
} catch (Exception ee) {
log.warn("GeoDns ignoring {} (error analysing location, {}", e, ee);
return false;
@@ -250,4 +246,28 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
setAttribute(TARGETS, entityIdToUrl);
}
+ protected String inferHostname(Entity entity) {
+ String hostname = entity.getAttribute(Attributes.HOSTNAME);
+ String url = entity.getAttribute(WebAppService.ROOT_URL);
+ if (url!=null) {
+ try {
+ URL u = new URL(url);
+
+ if (hostname==null) {
+ if (!entitiesWithoutGeoInfo.contains(entity)) //don't log repeatedly
+ log.warn("GeoDns using URL {} to redirect to {} (HOSTNAME attribute is preferred, but not available)", url, entity);
+ hostname = u.getHost();
+ }
+
+ if (u.getPort() > 0 && u.getPort() != 80 && u.getPort() != 443) {
+ if (!entitiesWithoutGeoInfo.contains(entity)) //don't log repeatedly
+ log.warn("GeoDns detected non-standard port in URL {} for {}; forwarding may not work", url, entity);
+ }
+
+ } catch (MalformedURLException e) {
+ LOG.warn("Invalid URL {} for entity {} in {}", new Object[] {url, entity, this});
+ }
+ }
+ return hostname;
+ }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8d1b5d2b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy
deleted file mode 100644
index bba6b3b..0000000
--- a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy
+++ /dev/null
@@ -1,152 +0,0 @@
-package brooklyn.entity.dns;
-
-import static java.util.concurrent.TimeUnit.*
-import static org.testng.Assert.*
-
-import java.util.concurrent.TimeUnit
-
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.testng.annotations.AfterMethod
-import org.testng.annotations.BeforeMethod
-import org.testng.annotations.Test
-
-import brooklyn.entity.Entity
-import brooklyn.entity.basic.ApplicationBuilder
-import brooklyn.entity.basic.DynamicGroup
-import brooklyn.entity.basic.Entities
-import brooklyn.entity.group.DynamicFabric
-import brooklyn.entity.proxying.EntitySpecs
-import brooklyn.location.Location
-import brooklyn.location.basic.SimulatedLocation
-import brooklyn.location.basic.SshMachineLocation
-import brooklyn.location.geo.HostGeoInfo
-import brooklyn.test.entity.TestApplication
-import brooklyn.test.entity.TestEntity
-import brooklyn.test.entity.TestEntityImpl
-import brooklyn.util.internal.Repeater
-import brooklyn.util.internal.TimeExtras
-
-import com.google.common.base.Predicates
-import com.google.common.collect.Iterables
-
-public class AbstractGeoDnsServiceTest {
- public static final Logger log = LoggerFactory.getLogger(AbstractGeoDnsServiceTest.class);
- static { TimeExtras.init() }
-
- private static final String WEST_IP = "208.95.232.123";
- private static final String EAST_IP = "216.150.144.82";
- private static final double WEST_LATITUDE = 37.43472, WEST_LONGITUDE = -121.89500;
- private static final double EAST_LATITUDE = 41.10361, EAST_LONGITUDE = -73.79583;
-
- private static final Location WEST_PARENT = new SimulatedLocation(
- name: "West parent", latitude: WEST_LATITUDE, longitude: WEST_LONGITUDE);
- private static final Location WEST_CHILD = new SshMachineLocation(
- name: "West child", address: WEST_IP, parentLocation: WEST_PARENT);
- private static final Location WEST_CHILD_WITH_LOCATION = new SshMachineLocation(
- name: "West child with location", address: WEST_IP, parentLocation: WEST_PARENT,
- latitude: WEST_LATITUDE, longitude: WEST_LONGITUDE);
-
- private static final Location EAST_PARENT = new SimulatedLocation(
- name: "East parent", latitude: EAST_LATITUDE, longitude: EAST_LONGITUDE);
- private static final Location EAST_CHILD = new SshMachineLocation(
- name: "East child", address: EAST_IP, parentLocation: EAST_PARENT);
- private static final Location EAST_CHILD_WITH_LOCATION = new SshMachineLocation(
- name: "East child with location", address: EAST_IP, parentLocation: EAST_PARENT,
- latitude: EAST_LATITUDE, longitude: EAST_LONGITUDE);
-
- private TestApplication app;
- private DynamicFabric fabric;
- private DynamicGroup testEntities;
- private GeoDnsTestService geoDns;
-
-
- @BeforeMethod(alwaysRun=true)
- public void setup() {
- app = ApplicationBuilder.newManagedApp(TestApplication.class);
- fabric = app.createAndManageChild(EntitySpecs.spec(DynamicFabric.class)
- .configure("factory", { properties -> new TestEntityImpl(properties) }));
-
- testEntities = app.createAndManageChild(EntitySpecs.spec(DynamicGroup.class)
- .configure(DynamicGroup.ENTITY_FILTER, Predicates.instanceOf(TestEntity.class)));
- geoDns = new GeoDnsTestService(app, polPeriod:10);
- geoDns.setTargetEntityProvider(testEntities);
- Entities.startManagement(geoDns);
- }
-
- @AfterMethod(alwaysRun=true)
- public void shutdown() {
- if (app != null) Entities.destroy(app);
- }
-
-
- @Test
- public void testGeoInfoOnLocation() {
- app.start( [ WEST_CHILD_WITH_LOCATION, EAST_CHILD_WITH_LOCATION ] );
-
- waitForTargetHosts(geoDns);
- assertTrue(geoDns.targetHostsByName.containsKey("West child with location"), "targets="+geoDns.targetHostsByName);
- assertTrue(geoDns.targetHostsByName.containsKey("East child with location"), "targets="+geoDns.targetHostsByName);
- }
-
- @Test
- public void testGeoInfoOnParentLocation() {
- app.start( [ WEST_CHILD, EAST_CHILD ] );
-
- waitForTargetHosts(geoDns);
- assertTrue(geoDns.targetHostsByName.containsKey("West child"), "targets="+geoDns.targetHostsByName);
- assertTrue(geoDns.targetHostsByName.containsKey("East child"), "targets="+geoDns.targetHostsByName);
- }
-
- //TODO
-// @Test
-// public void testMissingGeoInfo() {
-// }
-//
-// @Test
-// public void testEmptyGroup() {
-// }
-
- private static void waitForTargetHosts(GeoDnsTestService service) {
- new Repeater("Wait for target hosts")
- .repeat()
- .every(500 * MILLISECONDS)
- .until { service.targetHostsByName.size() == 2 }
- .limitIterationsTo(20)
- .run();
- }
-
-
- private static class GeoDnsTestService extends AbstractGeoDnsServiceImpl {
- public Map<String, HostGeoInfo> targetHostsByName = new LinkedHashMap<String, HostGeoInfo>();
-
- public GeoDnsTestService(properties=[:], Entity parent) {
- super(properties, parent);
- }
-
- protected boolean addTargetHost(Entity e, boolean doUpdate) {
- //ignore geo lookup, override parent menu
- log.info("TestService adding target host $e");
- Location l = Iterables.getOnlyElement(e.locations);
- HostGeoInfo geoInfo = new HostGeoInfo("127.0.0.1", l.name,
- l.findLocationProperty("latitude"), l.findLocationProperty("longitude"));
- targetHosts.put(e, geoInfo);
- if (doUpdate) update();
- return true;
- }
-
- @Override
- protected void reconfigureService(Collection<HostGeoInfo> targetHosts) {
- targetHostsByName.clear();
- for (HostGeoInfo host : targetHosts) {
- if (host != null) targetHostsByName.put(host.displayName, host);
- }
- }
-
- @Override
- public String getHostname() {
- return "localhost";
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8d1b5d2b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
new file mode 100644
index 0000000..b365a6a
--- /dev/null
+++ b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
@@ -0,0 +1,166 @@
+package brooklyn.entity.dns;
+
+import static org.testng.Assert.assertTrue;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.DynamicGroup;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.group.DynamicFabric;
+import brooklyn.entity.proxying.EntitySpecs;
+import brooklyn.location.Location;
+import brooklyn.location.basic.SimulatedLocation;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.location.geo.HostGeoInfo;
+import brooklyn.test.entity.TestApplication;
+import brooklyn.test.entity.TestEntity;
+import brooklyn.util.MutableMap;
+import brooklyn.util.internal.Repeater;
+
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+
+public class AbstractGeoDnsServiceTest {
+ public static final Logger log = LoggerFactory.getLogger(AbstractGeoDnsServiceTest.class);
+
+ private static final String WEST_IP = "208.95.232.123";
+ private static final String EAST_IP = "216.150.144.82";
+ private static final double WEST_LATITUDE = 37.43472, WEST_LONGITUDE = -121.89500;
+ private static final double EAST_LATITUDE = 41.10361, EAST_LONGITUDE = -73.79583;
+
+ private static SimulatedLocation newSimulatedLocation(String name, double lat, double lon) {
+ return new SimulatedLocation(MutableMap.of("name", name, "latitude", lat, "longitude", lon));
+ }
+
+ private static Location newSshMachineLocation(String name, String address, Location parent) {
+ return new SshMachineLocation(MutableMap.of("name", name, "address", address, "parentLocation", parent));
+ }
+
+ private static Location newSshMachineLocation(String name, String address, Location parent, double lat, double lon) {
+ return new SshMachineLocation(MutableMap.of("name", name, "address", address, "parentLocation", parent, "latitude", lat, "longitude", lon));
+ }
+
+ private static final Location WEST_PARENT = newSimulatedLocation("West parent", WEST_LATITUDE, WEST_LONGITUDE);
+
+ private static final Location WEST_CHILD = newSshMachineLocation("West child", WEST_IP, WEST_PARENT);
+ private static final Location WEST_CHILD_WITH_LOCATION = newSshMachineLocation("West child with location", WEST_IP, WEST_PARENT, WEST_LATITUDE, WEST_LONGITUDE);
+
+ private static final Location EAST_PARENT = newSimulatedLocation("East parent", EAST_LATITUDE, EAST_LONGITUDE);
+ private static final Location EAST_CHILD = newSshMachineLocation("East child", EAST_IP, EAST_PARENT);
+ private static final Location EAST_CHILD_WITH_LOCATION = newSshMachineLocation("East child with location", EAST_IP, EAST_PARENT, EAST_LATITUDE, EAST_LONGITUDE);
+
+ private TestApplication app;
+ private DynamicFabric fabric;
+ private DynamicGroup testEntities;
+ private GeoDnsTestService geoDns;
+
+
+ @BeforeMethod(alwaysRun=true)
+ public void setup() {
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
+ fabric = app.createAndManageChild(EntitySpecs.spec(DynamicFabric.class)
+ .configure(DynamicFabric.MEMBER_SPEC, EntitySpecs.spec(TestEntity.class)));
+
+ testEntities = app.createAndManageChild(EntitySpecs.spec(DynamicGroup.class)
+ .configure(DynamicGroup.ENTITY_FILTER, Predicates.instanceOf(TestEntity.class)));
+ geoDns = new GeoDnsTestService(MutableMap.of("pollPeriod", 10), app);
+ geoDns.setTargetEntityProvider(testEntities);
+ Entities.startManagement(geoDns);
+ }
+
+ @AfterMethod(alwaysRun=true)
+ public void shutdown() {
+ if (app != null) Entities.destroy(app);
+ }
+
+
+ @Test
+ public void testGeoInfoOnLocation() {
+ app.start( ImmutableList.of(WEST_CHILD_WITH_LOCATION, EAST_CHILD_WITH_LOCATION) );
+
+ waitForTargetHosts(geoDns);
+ assertTrue(geoDns.targetHostsByName.containsKey("West child with location"), "targets="+geoDns.targetHostsByName);
+ assertTrue(geoDns.targetHostsByName.containsKey("East child with location"), "targets="+geoDns.targetHostsByName);
+ }
+
+ @Test
+ public void testGeoInfoOnParentLocation() {
+ app.start( ImmutableList.of(WEST_CHILD, EAST_CHILD) );
+
+ waitForTargetHosts(geoDns);
+ assertTrue(geoDns.targetHostsByName.containsKey("West child"), "targets="+geoDns.targetHostsByName);
+ assertTrue(geoDns.targetHostsByName.containsKey("East child"), "targets="+geoDns.targetHostsByName);
+ }
+
+ //TODO
+// @Test
+// public void testMissingGeoInfo() {
+// }
+//
+// @Test
+// public void testEmptyGroup() {
+// }
+
+ private static void waitForTargetHosts(final GeoDnsTestService service) {
+ new Repeater("Wait for target hosts")
+ .repeat()
+ .every(500, TimeUnit.MILLISECONDS)
+ .until(new Callable<Boolean>() {
+ public Boolean call() {
+ return service.targetHostsByName.size() == 2;
+ }})
+ .limitIterationsTo(20)
+ .run();
+ }
+
+
+ private static class GeoDnsTestService extends AbstractGeoDnsServiceImpl {
+ public Map<String, HostGeoInfo> targetHostsByName = new LinkedHashMap<String, HostGeoInfo>();
+
+ public GeoDnsTestService(Entity parent) {
+ super(MutableMap.of(), parent);
+ }
+
+ public GeoDnsTestService(Map properties, Entity parent) {
+ super(properties, parent);
+ }
+
+ @Override
+ protected boolean addTargetHost(Entity e) {
+ //ignore geo lookup, override parent menu
+ log.info("TestService adding target host $e");
+ Location l = Iterables.getOnlyElement(e.getLocations());
+ HostGeoInfo geoInfo = new HostGeoInfo("127.0.0.1", l.getName(),
+ (Double) l.findLocationProperty("latitude"), (Double) l.findLocationProperty("longitude"));
+ targetHosts.put(e, geoInfo);
+ return true;
+ }
+
+ @Override
+ protected void reconfigureService(Collection<HostGeoInfo> targetHosts) {
+ targetHostsByName.clear();
+ for (HostGeoInfo host : targetHosts) {
+ if (host != null) targetHostsByName.put(host.displayName, host);
+ }
+ }
+
+ @Override
+ public String getHostname() {
+ return "localhost";
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8d1b5d2b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy
deleted file mode 100644
index bae975f..0000000
--- a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy
+++ /dev/null
@@ -1,67 +0,0 @@
-package brooklyn.entity.dns.geoscaling
-
-import static java.util.concurrent.TimeUnit.*
-import static org.testng.Assert.*
-
-import org.testng.annotations.Test
-
-import brooklyn.entity.basic.ApplicationBuilder
-import brooklyn.entity.basic.Attributes
-import brooklyn.entity.basic.DynamicGroup
-import brooklyn.entity.proxying.EntitySpecs
-import brooklyn.location.basic.SshMachineLocation
-import brooklyn.location.geo.HostGeoInfo
-import brooklyn.test.entity.TestApplication
-import brooklyn.test.entity.TestEntity
-import brooklyn.util.internal.Repeater
-import brooklyn.util.internal.TimeExtras
-
-import com.google.common.base.Predicates
-
-/**
- * {@link GeoscalingScriptGenerator} unit tests.
- */
-class GeoscalingIntegrationTest {
- static { TimeExtras.init() }
-
- private final static Set<HostGeoInfo> HOSTS = [
- new HostGeoInfo("1.2.3.100", "Server 1", 40.0, -80.0),
- new HostGeoInfo("1.2.3.101", "Server 2", 30.0, 20.0)
- ]
-
- private final String primaryDomain = "geopaas.org"//"domain"+((int)(Math.random()*10000))+".test.org";
- private final String subDomain = "subdomain"+((int)(Math.random()*10000));
- private final InetAddress addr = InetAddress.localHost
- private final SshMachineLocation loc = new SshMachineLocation(address:addr, name:'Edinburgh', latitude : 55.94944, longitude : -3.16028, iso3166 : ["GB-EDH"])
-
- @Test(groups=["Integration"])
- public void testRoutesToExpectedLocation() {
- TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class);
- TestEntity target = app.createAndManageChild(EntitySpecs.spec(TestEntity.class));
- target.setAttribute(Attributes.HOSTNAME,addr.getHostName())
-
- DynamicGroup group = app.createAndManageChild(EntitySpecs.spec(DynamicGroup.class)
- .configure(DynamicGroup.ENTITY_FILTER, Predicates.instanceOf(TestEntity.class)));
-
- GeoscalingDnsService geoDns = app.createAndManageChild(EntitySpecs.spec(GeoscalingDnsService.class)
- .displayName("Geo-DNS")
- .configure("username", "cloudsoft")
- .configure("password", "cl0uds0ft")
- .configure("primaryDomainName", primaryDomain)
- .configure("smartSubdomainName", subDomain)
- .configure("targetEntityProvider", group));
-
- app.start([loc])
-
- println("geo-scaling test, using $subDomain.$primaryDomain; expect to be wired to $addr")
-
- new Repeater("Wait for target hosts")
- .repeat()
- .every(500 * MILLISECONDS)
- .until { geoDns.getTargetHosts().size() == 1 }
- .limitIterationsTo(20)
- .run();
-
- assertEquals(geoDns.getTargetHosts().size(), 1);
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8d1b5d2b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java
new file mode 100644
index 0000000..bfae0b5
--- /dev/null
+++ b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java
@@ -0,0 +1,86 @@
+package brooklyn.entity.dns.geoscaling;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.InetAddress;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.basic.DynamicGroup;
+import brooklyn.entity.proxying.EntitySpecs;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.location.geo.HostGeoInfo;
+import brooklyn.test.entity.TestApplication;
+import brooklyn.test.entity.TestEntity;
+import brooklyn.util.MutableMap;
+import brooklyn.util.NetworkUtils;
+import brooklyn.util.internal.Repeater;
+
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * {@link GeoscalingScriptGenerator} unit tests.
+ */
+public class GeoscalingIntegrationTest {
+
+ protected static final Logger LOG = LoggerFactory.getLogger(GeoscalingIntegrationTest.class);
+
+ private final static Set<HostGeoInfo> HOSTS = ImmutableSet.of(
+ new HostGeoInfo("1.2.3.100", "Server 1", 40.0, -80.0),
+ new HostGeoInfo("1.2.3.101", "Server 2", 30.0, 20.0)
+ );
+
+ private final String primaryDomain = "geopaas.org";//"domain"+((int)(Math.random()*10000))+".test.org";
+ private final String subDomain = "subdomain"+((int)(Math.random()*10000));
+ private final InetAddress addr = NetworkUtils.getLocalHost();
+ private final SshMachineLocation loc = new SshMachineLocation(MutableMap.builder()
+ .put("address", addr)
+ .put("name", "Edinburgh")
+ .put("latitude", 55.94944)
+ .put("longitude", -3.16028)
+ .put("iso3166", ImmutableList.of("GB-EDH"))
+ .build());
+
+ @Test(groups={"Integration"})
+ public void testRoutesToExpectedLocation() {
+ TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class);
+ TestEntity target = app.createAndManageChild(EntitySpecs.spec(TestEntity.class));
+ target.setAttribute(Attributes.HOSTNAME,addr.getHostName());
+
+ DynamicGroup group = app.createAndManageChild(EntitySpecs.spec(DynamicGroup.class)
+ .configure(DynamicGroup.ENTITY_FILTER, Predicates.instanceOf(TestEntity.class)));
+
+ final GeoscalingDnsService geoDns = app.createAndManageChild(EntitySpecs.spec(GeoscalingDnsService.class)
+ .displayName("Geo-DNS")
+ .configure("username", "cloudsoft")
+ .configure("password", "cl0uds0ft")
+ .configure("primaryDomainName", primaryDomain)
+ .configure("smartSubdomainName", subDomain)
+ .configure("targetEntityProvider", group));
+
+ app.start(ImmutableList.of(loc));
+
+ LOG.info("geo-scaling test, using {}.{}; expect to be wired to {}", new Object[] {subDomain, primaryDomain, addr});
+
+ new Repeater("Wait for target hosts")
+ .repeat()
+ .every(500, TimeUnit.MILLISECONDS)
+ .until(new Callable<Boolean>() {
+ public Boolean call() {
+ return geoDns.getTargetHosts().size() == 1;
+ }})
+ .limitIterationsTo(20)
+ .run();
+
+ assertEquals(geoDns.getTargetHosts().size(), 1);
+ }
+}
[29/50] brooklyn-library git commit: Tidy up interface definitions
Posted by he...@apache.org.
Tidy up interface definitions
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/98257804
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/98257804
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/98257804
Branch: refs/heads/0.5.0
Commit: 982578042e025181b2af67a215917229c1ab3bc3
Parents: 9cbbe5e
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Mar 21 12:09:30 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:07 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/messaging/kafka/Kafka.java | 3 +-
.../entity/messaging/kafka/KafkaBroker.java | 25 +++++++-------
.../entity/messaging/kafka/KafkaCluster.java | 36 ++++++++++----------
.../entity/messaging/kafka/KafkaZookeeper.java | 14 ++++----
4 files changed, 41 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/98257804/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
index a0e4eef..02cc0af 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
@@ -15,6 +15,7 @@
*/
package brooklyn.entity.messaging.kafka;
+import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.SoftwareProcess;
import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
@@ -26,7 +27,7 @@ import brooklyn.util.flags.SetFromFlag;
*/
public interface Kafka {
- BasicConfigKey<String> SUGGESTED_VERSION = new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "0.7.2-incubating");
+ ConfigKey<String> SUGGESTED_VERSION = new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "0.7.2-incubating");
@SetFromFlag("downloadUrl")
BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/98257804/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
index e17f0de..2a82b13 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
@@ -15,6 +15,7 @@
*/
package brooklyn.entity.messaging.kafka;
+import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.SoftwareProcess;
import brooklyn.entity.java.UsesJmx;
import brooklyn.entity.messaging.MessageBroker;
@@ -35,31 +36,31 @@ public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Ka
public static final ConfigKey<Integer> START_TIMEOUT = SoftwareProcess.START_TIMEOUT;
@SetFromFlag("version")
- BasicConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
+ ConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
@SetFromFlag("kafkaPort")
PortAttributeSensorAndConfigKey KAFKA_PORT = new PortAttributeSensorAndConfigKey("kafka.port", "Kafka port", "9092+");
/** Location of the configuration file template to be copied to the server.*/
@SetFromFlag("serverConfig")
- BasicConfigKey<String> SERVER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
- String.class, "kafka.config.server", "Server configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/server.properties");
+ ConfigKey<String> SERVER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
+ String.class, "kafka.broker.configTemplate", "Server configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/server.properties");
@SetFromFlag("zookeeper")
- BasicConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicConfigKey<KafkaZookeeper>(KafkaZookeeper.class, "kafka.broker.zookeeper", "Kafka zookeeper entity");
+ ConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicConfigKey<KafkaZookeeper>(KafkaZookeeper.class, "kafka.broker.zookeeper", "Kafka zookeeper entity");
AttributeSensor<Integer> BROKER_ID = new BasicAttributeSensor<Integer>(Integer.class, "kafka.broker.id", "Kafka unique broker ID");
- BasicAttributeSensor<Long> FETCH_REQUEST_COUNT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.total", "Fetch request count");
- BasicAttributeSensor<Long> TOTAL_FETCH_TIME = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.time.total", "Total fetch request processing time (millis)");
- BasicAttributeSensor<Double> MAX_FETCH_TIME = new BasicAttributeSensor<Double>(Double.class, "kafka.broker.fetch.time.max", "Max fetch request processing time (millis)");
+ AttributeSensor<Long> FETCH_REQUEST_COUNT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.total", "Fetch request count");
+ AttributeSensor<Long> TOTAL_FETCH_TIME = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.fetch.time.total", "Total fetch request processing time (millis)");
+ AttributeSensor<Double> MAX_FETCH_TIME = new BasicAttributeSensor<Double>(Double.class, "kafka.broker.fetch.time.max", "Max fetch request processing time (millis)");
- BasicAttributeSensor<Long> PRODUCE_REQUEST_COUNT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.produce.total", "Produce request count");
- BasicAttributeSensor<Long> TOTAL_PRODUCE_TIME = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.produce.time.total", "Total produce request processing time (millis)");
- BasicAttributeSensor<Double> MAX_PRODUCE_TIME = new BasicAttributeSensor<Double>(Double.class, "kafka.broker.produce.time.max", "Max produce request processing time (millis)");
+ AttributeSensor<Long> PRODUCE_REQUEST_COUNT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.produce.total", "Produce request count");
+ AttributeSensor<Long> TOTAL_PRODUCE_TIME = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.produce.time.total", "Total produce request processing time (millis)");
+ AttributeSensor<Double> MAX_PRODUCE_TIME = new BasicAttributeSensor<Double>(Double.class, "kafka.broker.produce.time.max", "Max produce request processing time (millis)");
- BasicAttributeSensor<Long> BYTES_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.bytes.received", "Total bytes received");
- BasicAttributeSensor<Long> BYTES_SENT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.bytes.sent", "Total bytes sent");
+ AttributeSensor<Long> BYTES_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.bytes.received", "Total bytes received");
+ AttributeSensor<Long> BYTES_SENT = new BasicAttributeSensor<Long>(Long.class, "kafka.broker.bytes.sent", "Total bytes sent");
Integer getKafkaPort();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/98257804/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
index 65ed272..96e46ff 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaCluster.java
@@ -53,7 +53,7 @@ import brooklyn.util.flags.SetFromFlag;
@ImplementedBy(KafkaClusterImpl.class)
public interface KafkaCluster extends Entity, Startable, Resizable {
- public static class Spec<T extends KafkaCluster, S extends Spec<T,S>> extends BasicEntitySpec<T,S> {
+ class Spec<T extends KafkaCluster, S extends Spec<T,S>> extends BasicEntitySpec<T,S> {
private static class ConcreteSpec extends Spec<KafkaCluster, ConcreteSpec> {
ConcreteSpec() {
@@ -70,7 +70,7 @@ public interface KafkaCluster extends Entity, Startable, Resizable {
}
public S initialSize(int val) {
- configure(INITIAL_SIZE, 1);
+ configure(INITIAL_SIZE, val);
return self();
}
@@ -94,35 +94,35 @@ public interface KafkaCluster extends Entity, Startable, Resizable {
public static final ConfigKey<Integer> START_TIMEOUT = ConfigKeys.START_TIMEOUT;
@SetFromFlag("initialSize")
- public static ConfigKey<Integer> INITIAL_SIZE = new BasicConfigKey<Integer>(Cluster.INITIAL_SIZE, 1);
+ ConfigKey<Integer> INITIAL_SIZE = new BasicConfigKey<Integer>(Cluster.INITIAL_SIZE, 1);
- @SetFromFlag("controller")
- public static BasicAttributeSensorAndConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicAttributeSensorAndConfigKey<KafkaZookeeper>(
- KafkaZookeeper.class, "kafkacluster.zookeeper", "Kafka zookeeper for the cluster; if null a default will created");
+ @SetFromFlag("zookeeper")
+ BasicAttributeSensorAndConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicAttributeSensorAndConfigKey<KafkaZookeeper>(
+ KafkaZookeeper.class, "kafka.cluster.zookeeper", "Kafka zookeeper for the cluster; if null a default will created");
@SetFromFlag("zookeeperSpec")
- public static BasicAttributeSensorAndConfigKey<EntitySpec<KafkaZookeeper>> ZOOKEEPER_SPEC = new BasicAttributeSensorAndConfigKey(
- EntitySpec.class, "kafkacluster.zookeeperSpec", "Spec for creating the kafka zookeeper");
+ BasicAttributeSensorAndConfigKey<EntitySpec<KafkaZookeeper>> ZOOKEEPER_SPEC = new BasicAttributeSensorAndConfigKey(
+ EntitySpec.class, "kafka.cluster.zookeeperSpec", "Spec for creating the kafka zookeeper");
/** Factory to create a Kafka broker, given flags */
@SetFromFlag("brokerFactory")
- public static BasicAttributeSensorAndConfigKey<ConfigurableEntityFactory<KafkaBroker>> BROKER_FACTORY = new BasicAttributeSensorAndConfigKey(
- ConfigurableEntityFactory.class, "kafkacluster.brokerFactory", "Factory to create a Kafka broker");
+ BasicAttributeSensorAndConfigKey<ConfigurableEntityFactory<KafkaBroker>> BROKER_FACTORY = new BasicAttributeSensorAndConfigKey(
+ ConfigurableEntityFactory.class, "kafka.cluster.brokerFactory", "Factory to create a Kafka broker");
/** Spec for Kafka broker entiites to be created */
@SetFromFlag("brokerSpec")
- public static BasicAttributeSensorAndConfigKey<EntitySpec<KafkaBroker>> BROKER_SPEC = new BasicAttributeSensorAndConfigKey(
- EntitySpec.class, "kafkacluster.brokerSpec", "Spec for Kafka broker entiites to be created");
+ BasicAttributeSensorAndConfigKey<EntitySpec<KafkaBroker>> BROKER_SPEC = new BasicAttributeSensorAndConfigKey(
+ EntitySpec.class, "kafka.cluster.brokerSpec", "Spec for Kafka broker entiites to be created");
- public static AttributeSensor<DynamicCluster> CLUSTER = new BasicAttributeSensor<DynamicCluster>(
- DynamicCluster.class, "kafkacluster.cluster", "Underlying Kafka broker cluster");
+ AttributeSensor<DynamicCluster> CLUSTER = new BasicAttributeSensor<DynamicCluster>(
+ DynamicCluster.class, "kafka.cluster.brokerCluster", "Underlying Kafka broker cluster");
- public static final AttributeSensor<String> HOSTNAME = Attributes.HOSTNAME;
+ AttributeSensor<String> HOSTNAME = Attributes.HOSTNAME;
- public KafkaZookeeper getZookeeper();
+ KafkaZookeeper getZookeeper();
- public ConfigurableEntityFactory<KafkaBroker> getBrokerFactory();
+ ConfigurableEntityFactory<KafkaBroker> getBrokerFactory();
- public DynamicCluster getCluster();
+ DynamicCluster getCluster();
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/98257804/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
index 522828f..a001a29 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeper.java
@@ -15,9 +15,11 @@
*/
package brooklyn.entity.messaging.kafka;
+import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.SoftwareProcess;
import brooklyn.entity.java.UsesJmx;
import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.AttributeSensor;
import brooklyn.event.basic.BasicAttributeSensor;
import brooklyn.event.basic.BasicConfigKey;
import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
@@ -33,19 +35,19 @@ public interface KafkaZookeeper extends SoftwareProcess, UsesJmx, Kafka {
public static final ConfigKey<Integer> START_TIMEOUT = SoftwareProcess.START_TIMEOUT;
@SetFromFlag("version")
- BasicConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
+ ConfigKey<String> SUGGESTED_VERSION = Kafka.SUGGESTED_VERSION;
@SetFromFlag("zookeeperPort")
PortAttributeSensorAndConfigKey ZOOKEEPER_PORT = new PortAttributeSensorAndConfigKey("zookeeper.port", "Zookeeper port", "2181+");
/** Location of the configuration file template to be copied to the server. */
@SetFromFlag("zookeeperConfig")
- BasicConfigKey<String> ZOOKEEPER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
- String.class, "kafka.config.zookeeper", "Zookeeper configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/zookeeper.properties");
+ ConfigKey<String> ZOOKEEPER_CONFIG_TEMPLATE = new BasicConfigKey<String>(
+ String.class, "kafka.zookeeper.configTemplate", "Zookeeper configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/zookeeper.properties");
- BasicAttributeSensor<Long> OUTSTANDING_REQUESTS = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.outstandingRequests", "Outstanding request count");
- BasicAttributeSensor<Long> PACKETS_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.received", "Total packets received");
- BasicAttributeSensor<Long> PACKETS_SENT = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.sent", "Total packets sent");
+ AttributeSensor<Long> OUTSTANDING_REQUESTS = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.outstandingRequests", "Outstanding request count");
+ AttributeSensor<Long> PACKETS_RECEIVED = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.received", "Total packets received");
+ AttributeSensor<Long> PACKETS_SENT = new BasicAttributeSensor<Long>(Long.class, "kafka.zookeeper.packets.sent", "Total packets sent");
Integer getZookeeperPort();
[09/50] brooklyn-library git commit: KarafSshDriver:
expandedInstallDir is protected
Posted by he...@apache.org.
KarafSshDriver: expandedInstallDir is protected
- Needs to be protected for sub-types that override install()
- TODO: Should this be protected (rather than private) in all
our entity driver? Probably!
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/bccb14fb
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/bccb14fb
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/bccb14fb
Branch: refs/heads/0.5.0
Commit: bccb14fb25f409a0526172c4db1d31fb24acc270
Parents: 23a5c98
Author: Aled Sage <al...@gmail.com>
Authored: Thu Mar 28 15:23:55 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Mar 29 09:37:57 2013 +0000
----------------------------------------------------------------------
.../src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/bccb14fb/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
----------------------------------------------------------------------
diff --git a/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java b/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
index 787717a..ccd713a 100644
--- a/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
+++ b/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
@@ -17,7 +17,7 @@ import com.google.common.collect.ImmutableList;
public class KarafSshDriver extends JavaSoftwareProcessSshDriver implements KarafDriver {
- private String expandedInstallDir;
+ protected String expandedInstallDir;
// TODO getJmxJavaSystemProperties(), don't set via JAVA_OPTS; set ourselves manually
// (karaf reads from props files)
@@ -37,7 +37,7 @@ public class KarafSshDriver extends JavaSoftwareProcessSshDriver implements Kara
return format("{%s}/data/karaf.out", getRunDir());
}
- private String getExpandedInstallDir() {
+ protected String getExpandedInstallDir() {
if (expandedInstallDir == null) throw new IllegalStateException("expandedInstallDir is null; most likely install was not called");
return expandedInstallDir;
}
[13/50] brooklyn-library git commit: Examples extend
AbstractApplication instead of ApplicationBuilder
Posted by he...@apache.org.
Examples extend AbstractApplication instead of ApplicationBuilder
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/3c0f5e60
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/3c0f5e60
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/3c0f5e60
Branch: refs/heads/0.5.0
Commit: 3c0f5e60b45be72d0afc2acebc3e9111b73a4cd0
Parents: 576b649
Author: Aled Sage <al...@gmail.com>
Authored: Thu Mar 28 16:45:00 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Apr 1 12:41:41 2013 +0100
----------------------------------------------------------------------
.../java/brooklyn/demo/GlobalWebFabricExample.java | 11 ++++++-----
.../extras/whirr/WebClusterWithHadoopExample.java | 2 +-
.../extras/whirr/WebFabricWithHadoopExample.java | 2 +-
.../main/java/brooklyn/extras/whirr/WhirrExample.java | 9 +++++----
.../java/brooklyn/extras/whirr/WhirrHadoopExample.java | 8 ++++----
.../demo/MonitoredCassandraClusterExample.java | 6 +++---
.../MovableCloudFoundryClusterExample.java | 8 ++++----
.../java/brooklyn/demo/StandaloneBrokerExample.java | 9 +++++----
.../java/brooklyn/demo/SingleWebServerExample.java | 8 ++++----
.../java/brooklyn/demo/WebClusterDatabaseExample.java | 13 +++++++------
.../demo/WebClusterDatabaseExampleGroovy.groovy | 11 ++++++-----
.../src/main/java/brooklyn/demo/WebClusterExample.java | 9 +++++----
12 files changed, 51 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
index d57d9e3..dbfab17 100644
--- a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
+++ b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
@@ -9,7 +9,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.config.StringConfigMap;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.dns.geoscaling.GeoscalingDnsService;
@@ -27,7 +27,7 @@ import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
-public class GlobalWebFabricExample extends ApplicationBuilder {
+public class GlobalWebFabricExample extends AbstractApplication {
public static final Logger log = LoggerFactory.getLogger(GlobalWebFabricExample.class);
@@ -39,8 +39,9 @@ public class GlobalWebFabricExample extends ApplicationBuilder {
"aws-ec2:us-west-1"
// "cloudfoundry:https://api.aws.af.cm/",
);
-
- protected void doBuild() {
+
+ @Override
+ public void postConstruct() {
StringConfigMap config = getManagementContext().getConfig();
GeoscalingDnsService geoDns = addChild(EntitySpecs.spec(GeoscalingDnsService.class)
@@ -74,7 +75,7 @@ public class GlobalWebFabricExample extends ApplicationBuilder {
String locations = CommandLineUtil.getCommandLineOption(args, "--locations", Joiner.on(",").join(DEFAULT_LOCATIONS));
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new GlobalWebFabricExample().appDisplayName("Brooklyn Global Web Fabric Example"))
+ .application(EntitySpecs.appSpec(GlobalWebFabricExample.class).displayName("Brooklyn Global Web Fabric Example"))
.webconsolePort(port)
.locations(Arrays.asList(locations))
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
index 683938d..0a0f849 100644
--- a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WebClusterWithHadoopExample.java
@@ -182,7 +182,7 @@ public class WebClusterWithHadoopExample extends AbstractApplication implements
String location = CommandLineUtil.getCommandLineOption(args, "--location", Joiner.on(",").join(DEFAULT_LOCATIONS));
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(EntitySpecs.spec(StartableApplication.class)
+ .application(EntitySpecs.appSpec(StartableApplication.class)
.displayName("Brooklyn Global Web Fabric with Hadoop Example")
.impl(WebClusterWithHadoopExample.class))
.webconsolePort(port)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/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 d53b798..11916a1 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
@@ -256,7 +256,7 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
String location = CommandLineUtil.getCommandLineOption(args, "--location", Joiner.on(",").join(DEFAULT_LOCATIONS));
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(EntitySpecs.spec(StartableApplication.class)
+ .application(EntitySpecs.appSpec(StartableApplication.class)
.displayName("Brooklyn Global Web Fabric with Hadoop Example")
.impl(WebFabricWithHadoopExample.class))
.webconsolePort(port)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
index a3fe74c..d01bc4c 100644
--- a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrExample.java
@@ -5,7 +5,7 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.StartableApplication;
import brooklyn.entity.proxying.EntitySpecs;
@@ -15,7 +15,7 @@ import brooklyn.util.CommandLineUtil;
import com.google.common.collect.Lists;
-public class WhirrExample extends ApplicationBuilder {
+public class WhirrExample extends AbstractApplication {
private static final Logger LOG = LoggerFactory.getLogger(WhirrExample.class);
@@ -26,7 +26,8 @@ public class WhirrExample extends ApplicationBuilder {
"whirr.hardware-min-ram=1024"+"\n"+
"whirr.instance-templates=1 noop, 1 elasticsearch"+"\n";
- protected void doBuild() {
+ @Override
+ public void postConstruct() {
WhirrCluster cluster = addChild(EntitySpecs.spec(WhirrCluster.class)
.configure("recipe", RECIPE));
}
@@ -37,7 +38,7 @@ public class WhirrExample extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new WhirrExample())
+ .application(EntitySpecs.appSpec(WhirrExample.class))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
index fbaa636..7a51b0c 100644
--- a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/WhirrHadoopExample.java
@@ -5,7 +5,7 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.StartableApplication;
import brooklyn.entity.proxying.EntitySpecs;
@@ -16,14 +16,14 @@ import brooklyn.util.CommandLineUtil;
import com.google.common.collect.Lists;
-public class WhirrHadoopExample extends ApplicationBuilder {
+public class WhirrHadoopExample extends AbstractApplication {
private static final Logger LOG = LoggerFactory.getLogger(WhirrHadoopExample.class);
public static final String DEFAULT_LOCATION = "aws-ec2:eu-west-1";
@Override
- protected void doBuild() {
+ public void postConstruct() {
WhirrCluster cluster = addChild(EntitySpecs.spec(WhirrHadoopCluster.class)
.displayName("brooklyn-hadoop-example")
.configure("size", 2)
@@ -36,7 +36,7 @@ public class WhirrHadoopExample extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new WhirrHadoopExample())
+ .application(EntitySpecs.appSpec(WhirrHadoopExample.class))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
index 3c1a05f..6c475b2 100644
--- a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
+++ b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
@@ -1,14 +1,14 @@
package brooklyn.demo;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.nosql.cassandra.CassandraCluster;
import brooklyn.entity.proxying.EntitySpecs;
/** Cassandra Application */
-public class MonitoredCassandraClusterExample extends ApplicationBuilder {
+public class MonitoredCassandraClusterExample extends AbstractApplication {
@Override
- protected void doBuild() {
+ public void postConstruct() {
addChild(EntitySpecs.spec(CassandraCluster.class)
.configure("initialSize", "2")
.configure("clusterName", "CassandraDemo")
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
index 4b6dbb1..ee96826 100644
--- a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
+++ b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
@@ -2,7 +2,7 @@ package brooklyn.example.cloudfoundry;
import java.util.List;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.launcher.BrooklynLauncher;
@@ -10,13 +10,13 @@ import brooklyn.util.CommandLineUtil;
import com.google.common.collect.Lists;
-public class MovableCloudFoundryClusterExample extends ApplicationBuilder {
+public class MovableCloudFoundryClusterExample extends AbstractApplication {
public static final String DEFAULT_LOCATION = "cloudfoundry";
public static final String WAR_FILE_URL = "classpath://hello-world-webapp.war";
@Override
- protected void doBuild() {
+ public void postConstruct() {
addChild(EntitySpecs.spec(MovableElasticWebAppCluster.class)
.configure("war", WAR_FILE_URL));
}
@@ -27,7 +27,7 @@ public class MovableCloudFoundryClusterExample extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new MovableCloudFoundryClusterExample().appDisplayName("Movable Web Cluster"))
+ .application(EntitySpecs.appSpec(MovableCloudFoundryClusterExample.class).displayName("Movable Web Cluster"))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
index 014e3c8..3d9b903 100644
--- a/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
+++ b/examples/simple-messaging-pubsub/src/main/java/brooklyn/demo/StandaloneBrokerExample.java
@@ -2,7 +2,7 @@ package brooklyn.demo;
import java.util.List;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.messaging.amqp.AmqpServer;
import brooklyn.entity.messaging.qpid.QpidBroker;
@@ -14,7 +14,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
/** Qpid Broker Application */
-public class StandaloneBrokerExample extends ApplicationBuilder {
+public class StandaloneBrokerExample extends AbstractApplication {
public static final String CUSTOM_CONFIG_PATH = "classpath://custom-config.xml";
public static final String PASSWD_PATH = "classpath://passwd";
@@ -23,7 +23,8 @@ public class StandaloneBrokerExample extends ApplicationBuilder {
public static final String DEFAULT_LOCATION = "localhost";
- protected void doBuild() {
+ @Override
+ public void postConstruct() {
// Configure the Qpid broker entity
QpidBroker broker = addChild(EntitySpecs.spec(QpidBroker.class)
.configure("amqpPort", 5672)
@@ -43,7 +44,7 @@ public class StandaloneBrokerExample extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new StandaloneBrokerExample().appDisplayName("Qpid app"))
+ .application(EntitySpecs.appSpec(StandaloneBrokerExample.class).displayName("Qpid app"))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
index 2290497..10905e1 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/SingleWebServerExample.java
@@ -5,7 +5,7 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.entity.webapp.jboss.JBoss7Server;
@@ -15,14 +15,14 @@ import brooklyn.util.CommandLineUtil;
import com.google.common.collect.Lists;
/** This example starts one web app on 8080, waits for a keypress, then stops it. */
-public class SingleWebServerExample extends ApplicationBuilder {
+public class SingleWebServerExample extends AbstractApplication {
public static final Logger LOG = LoggerFactory.getLogger(SingleWebServerExample.class);
private static final String WAR_PATH = "classpath://hello-world-webapp.war";
@Override
- protected void doBuild() {
+ public void postConstruct() {
addChild(EntitySpecs.spec(JBoss7Server.class)
.configure("war", WAR_PATH)
.configure("httpPort", "8080+"));
@@ -35,7 +35,7 @@ public class SingleWebServerExample extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", "localhost");
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new SingleWebServerExample().appDisplayName("Brooklyn WebApp Cluster with Database example"))
+ .application(EntitySpecs.appSpec(SingleWebServerExample.class).displayName("Brooklyn WebApp Cluster with Database example"))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
index fb9b9f6..5436ee6 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExample.java
@@ -11,7 +11,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.enricher.basic.SensorPropagatingEnricher;
import brooklyn.enricher.basic.SensorTransformingEnricher;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.database.mysql.MySqlNode;
import brooklyn.entity.proxying.EntitySpecs;
@@ -32,7 +32,7 @@ import com.google.common.collect.Lists;
/**
* Launches a 3-tier app with nginx, clustered jboss, and mysql.
**/
-public class WebClusterDatabaseExample extends ApplicationBuilder {
+public class WebClusterDatabaseExample extends AbstractApplication {
public static final Logger LOG = LoggerFactory.getLogger(WebClusterDatabaseExample.class);
@@ -47,7 +47,8 @@ public class WebClusterDatabaseExample extends ApplicationBuilder {
public static final BasicAttributeSensor<Integer> APPSERVERS_COUNT = new BasicAttributeSensor<Integer>(Integer.class,
"appservers.count", "Number of app servers deployed");
- protected void doBuild() {
+ @Override
+ public void postConstruct() {
MySqlNode mysql = addChild(EntitySpecs.spec(MySqlNode.class)
.configure("creationScriptUrl", DB_SETUP_SQL_URL));
@@ -67,10 +68,10 @@ public class WebClusterDatabaseExample extends ApplicationBuilder {
build());
// expose some KPI's
- getApp().addEnricher(SensorPropagatingEnricher.newInstanceListeningTo(web,
+ addEnricher(SensorPropagatingEnricher.newInstanceListeningTo(web,
WebAppServiceConstants.ROOT_URL,
DynamicWebAppCluster.REQUESTS_PER_SECOND_IN_WINDOW));
- getApp().addEnricher(new SensorTransformingEnricher<Integer,Integer>(web,
+ addEnricher(new SensorTransformingEnricher<Integer,Integer>(web,
DynamicWebAppCluster.GROUP_SIZE, APPSERVERS_COUNT, Functions.<Integer>identity()));
}
@@ -80,7 +81,7 @@ public class WebClusterDatabaseExample extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", "localhost");
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new WebClusterDatabaseExample().appDisplayName("Brooklyn WebApp Cluster with Database example"))
+ .application(EntitySpecs.appSpec(WebClusterDatabaseExample.class).displayName("Brooklyn WebApp Cluster with Database example"))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
index 5aa0d3c..ee2652c 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
@@ -7,10 +7,10 @@ import static brooklyn.event.basic.DependentConfiguration.formatString
import org.slf4j.Logger
import org.slf4j.LoggerFactory
-import brooklyn.entity.basic.ApplicationBuilder
+import brooklyn.entity.basic.AbstractApplication
import brooklyn.entity.basic.Entities
-import brooklyn.entity.basic.StartableApplication
import brooklyn.entity.database.mysql.MySqlNode
+import brooklyn.entity.proxying.EntitySpecs
import brooklyn.entity.webapp.ControlledDynamicWebAppCluster
import brooklyn.entity.webapp.DynamicWebAppCluster
import brooklyn.launcher.BrooklynLauncher
@@ -24,7 +24,7 @@ import com.google.common.collect.Lists
* <p>
* This variant of {@link WebClusterDatabaseExample} demonstrates <i>Groovy</i> language conveniences.
**/
-public class WebClusterDatabaseExampleGroovy extends ApplicationBuilder {
+public class WebClusterDatabaseExampleGroovy extends AbstractApplication {
public static final Logger LOG = LoggerFactory.getLogger(WebClusterDatabaseExampleGroovy.class);
@@ -38,7 +38,8 @@ public class WebClusterDatabaseExampleGroovy extends ApplicationBuilder {
public static final String DB_USERNAME = "brooklyn";
public static final String DB_PASSWORD = "br00k11n";
- protected void doBuild() {
+ @Override
+ public void postConstruct() {
MySqlNode mysql = addChild(MySqlNode,
creationScriptUrl: DB_SETUP_SQL_URL);
@@ -63,7 +64,7 @@ public class WebClusterDatabaseExampleGroovy extends ApplicationBuilder {
String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new WebClusterDatabaseExampleGroovy().appDisplayName("Brooklyn WebApp Cluster with Database example"))
+ .application(EntitySpecs.appSpec(WebClusterDatabaseExampleGroovy.class).displayName("Brooklyn WebApp Cluster with Database example"))
.webconsolePort(port)
.location(location)
.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3c0f5e60/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
index 97cb4e9..8e6f670 100644
--- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
+++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterExample.java
@@ -6,7 +6,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.config.BrooklynProperties;
-import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.proxy.nginx.NginxController;
import brooklyn.entity.proxying.EntitySpecs;
@@ -28,7 +28,7 @@ import com.google.common.collect.Lists;
* -Xmx512m -Xms128m -XX:MaxPermSize=256m
* and brooklyn-all jar, and this jar or classes dir, on classpath.
**/
-public class WebClusterExample extends ApplicationBuilder {
+public class WebClusterExample extends AbstractApplication {
public static final Logger LOG = LoggerFactory.getLogger(WebClusterExample.class);
static BrooklynProperties config = BrooklynProperties.Factory.newDefault();
@@ -40,7 +40,8 @@ public class WebClusterExample extends ApplicationBuilder {
private NginxController nginxController;
private ControlledDynamicWebAppCluster web;
- protected void doBuild() {
+ @Override
+ public void postConstruct() {
nginxController = addChild(EntitySpecs.spec(NginxController.class)
//.configure("domain", "webclusterexample.brooklyn.local")
.configure("port", "8000+"));
@@ -67,7 +68,7 @@ public class WebClusterExample extends ApplicationBuilder {
// TODO Want to parse, to handle multiple locations
BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(new WebClusterExample().appDisplayName("Brooklyn WebApp Cluster example"))
+ .application(EntitySpecs.appSpec(WebClusterExample.class).displayName("Brooklyn WebApp Cluster example"))
.webconsolePort(port)
.location(location)
.start();
[50/50] brooklyn-library git commit: Changed version to 0.5.0
Posted by he...@apache.org.
Changed version to 0.5.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/0e094fa8
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/0e094fa8
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/0e094fa8
Branch: refs/heads/0.5.0
Commit: 0e094fa8beea9073d177cb992212a2c04dc06375
Parents: 929ee88
Author: David Toy <d...@vidtoy.co.uk>
Authored: Wed May 8 19:39:51 2013 +0100
Committer: David Toy <d...@vidtoy.co.uk>
Committed: Wed May 8 19:39:51 2013 +0100
----------------------------------------------------------------------
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/database/pom.xml | 2 +-
sandbox/dropwizard/pom.xml | 2 +-
sandbox/mgmt/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/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 +-
25 files changed, 25 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/examples/global-web-fabric/pom.xml
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/pom.xml b/examples/global-web-fabric/pom.xml
index ce6e09a..4647a2e 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/examples/hadoop-and-whirr/pom.xml
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/pom.xml b/examples/hadoop-and-whirr/pom.xml
index 866e197..6438e6f 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index bb82c5f..12acedc 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -15,7 +15,7 @@
<parent>
<groupId>io.brooklyn</groupId>
<artifactId>brooklyn-parent</artifactId>
- <version>0.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/examples/simple-messaging-pubsub/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/pom.xml b/examples/simple-messaging-pubsub/pom.xml
index fc0ed51..6113683 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/examples/simple-nosql-cluster/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/pom.xml b/examples/simple-nosql-cluster/pom.xml
index 4624cfb..eeda641 100644
--- a/examples/simple-nosql-cluster/pom.xml
+++ b/examples/simple-nosql-cluster/pom.xml
@@ -7,7 +7,7 @@
<parent>
<groupId>io.brooklyn.example</groupId>
<artifactId>brooklyn-examples-parent</artifactId>
- <version>0.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/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 ab5c816..ec76efe 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/examples/simple-web-cluster/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/pom.xml b/examples/simple-web-cluster/pom.xml
index 9e4452f..a4961c6 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/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 5da2a51..87b5fd0 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/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 a27a1b0..db24c8e 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/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 ed3690d..7591cde 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/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 07c31fd..12214fd 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/examples/webapps/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/pom.xml b/examples/webapps/pom.xml
index 966ec38..e6be4f5 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/sandbox/database/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/database/pom.xml b/sandbox/database/pom.xml
index 78fa429..e1644a6 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/sandbox/dropwizard/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/dropwizard/pom.xml b/sandbox/dropwizard/pom.xml
index f1b8ada..eb16d5b 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.5.0-SNAPSHOT</version><!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version><!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/sandbox/mgmt/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/mgmt/pom.xml b/sandbox/mgmt/pom.xml
index 3bcc365..ff267aa 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/sandbox/nosql/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/nosql/pom.xml b/sandbox/nosql/pom.xml
index d5f0b1b..116736e 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/sandbox/web-acceptance/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/web-acceptance/pom.xml b/sandbox/web-acceptance/pom.xml
index ec2ec14..fda765b 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/software/database/pom.xml
----------------------------------------------------------------------
diff --git a/software/database/pom.xml b/software/database/pom.xml
index 14c34cb..352c551 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/software/messaging/pom.xml
----------------------------------------------------------------------
diff --git a/software/messaging/pom.xml b/software/messaging/pom.xml
index 7a81336..07755f4 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/software/nosql/pom.xml
----------------------------------------------------------------------
diff --git a/software/nosql/pom.xml b/software/nosql/pom.xml
index aff6491..cdb5d13 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/software/osgi/pom.xml
----------------------------------------------------------------------
diff --git a/software/osgi/pom.xml b/software/osgi/pom.xml
index 8c7f33d..8be98c8 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/software/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/software/webapp/pom.xml b/software/webapp/pom.xml
index 5dca738..1e3f53a 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/usage/qa/pom.xml
----------------------------------------------------------------------
diff --git a/usage/qa/pom.xml b/usage/qa/pom.xml
index eede372..c4b65cb 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.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+ <version>0.5.0</version> <!-- BROOKLYN_VERSION -->
<relativePath>../../pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/usage/qa/start-monitor.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-monitor.sh b/usage/qa/start-monitor.sh
index d03bb3a..e807f2b 100755
--- a/usage/qa/start-monitor.sh
+++ b/usage/qa/start-monitor.sh
@@ -8,7 +8,7 @@
CLASS=brooklyn.qa.longevity.Monitor
# BROOKLYN_VERSION_BELOW
-VERSION=0.5.0-SNAPSHOT
+VERSION=0.5.0
ROOT=$(cd $(dirname $0) && pwd)
cd $ROOT
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0e094fa8/usage/qa/start-webcluster.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-webcluster.sh b/usage/qa/start-webcluster.sh
index 9a9358f..0b5d938 100755
--- a/usage/qa/start-webcluster.sh
+++ b/usage/qa/start-webcluster.sh
@@ -8,7 +8,7 @@
CLASS=brooklyn.qa.longevity.webcluster.WebClusterApp
# BROOKLYN_VERSION_BELOW
-VERSION=0.5.0-SNAPSHOT
+VERSION=0.5.0
ROOT=$(cd $(dirname $0) && pwd)
cd $ROOT
[28/50] brooklyn-library git commit: Move common driver code to
shared parent class
Posted by he...@apache.org.
Move common driver code to shared parent 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/df84b662
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/df84b662
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/df84b662
Branch: refs/heads/0.5.0
Commit: df84b662b5d8dfb757f713ae997065d4a8f7882d
Parents: a24e0e4
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Mar 21 02:22:57 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:07 2013 +0100
----------------------------------------------------------------------
.../kafka/AbstractfKafkaSshDriver.java | 170 +++++++++++++++++++
.../messaging/kafka/KafkaBrokerSshDriver.java | 129 ++------------
.../kafka/KafkaZookeeperSshDriver.java | 129 ++------------
3 files changed, 198 insertions(+), 230 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/df84b662/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
new file mode 100644
index 0000000..f6c7c8d
--- /dev/null
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/AbstractfKafkaSshDriver.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2013 by Cloudsoft Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package brooklyn.entity.messaging.kafka;
+
+import static java.lang.String.format;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.BrooklynVersion;
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.basic.lifecycle.CommonCommands;
+import brooklyn.entity.drivers.downloads.DownloadResolver;
+import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.MutableMap;
+import brooklyn.util.NetworkUtils;
+import brooklyn.util.ResourceUtils;
+import brooklyn.util.jmx.jmxrmi.JmxRmiAgent;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+public abstract class AbstractfKafkaSshDriver extends JavaSoftwareProcessSshDriver {
+
+ private static final Logger log = LoggerFactory.getLogger(KafkaZookeeperSshDriver.class);
+
+ public AbstractfKafkaSshDriver(EntityLocal entity, SshMachineLocation machine) {
+ super(entity, machine);
+ }
+
+ protected abstract Map<String, Integer> getPortMap();
+
+ protected abstract ConfigKey<String> getConfigTemplateKey();
+
+ protected abstract String getConfigFileName();
+
+ protected abstract String getLaunchScriptName();
+
+ protected abstract String getProcessIdentifier();
+
+ private String expandedInstallDir;
+
+ @Override
+ protected String getLogFileLocation() { return getRunDir()+"/console.out"; }
+
+ private String getExpandedInstallDir() {
+ if (expandedInstallDir == null) throw new IllegalStateException("expandedInstallDir is null; most likely install was not called");
+ return expandedInstallDir;
+ }
+
+ @Override
+ public void install() {
+ DownloadResolver resolver = entity.getManagementContext().getEntityDownloadsManager().newDownloader(this);
+ List<String> urls = resolver.getTargets();
+ String saveAs = resolver.getFilename();
+ expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("kafka-%s-src", getVersion()));
+
+ List<String> commands = new LinkedList<String>();
+ commands.addAll(CommonCommands.downloadUrlAs(urls, saveAs));
+ commands.add(CommonCommands.INSTALL_TAR);
+ commands.add("tar xzfv "+saveAs);
+ commands.add("cd "+expandedInstallDir);
+ commands.add("./sbt update");
+ commands.add("./sbt package");
+
+ newScript(INSTALLING)
+ .failOnNonZeroResultCode()
+ .body.append(commands)
+ .execute();
+ }
+
+ @Override
+ public void customize() {
+ NetworkUtils.checkPortsValid(getPortMap());
+ newScript(CUSTOMIZING)
+ .failOnNonZeroResultCode()
+ .body.append(format("cp -R %s/* %s", getExpandedInstallDir(), getRunDir()))
+ .execute();
+
+ String config = entity.getConfig(getConfigTemplateKey());
+ copyTemplate(config, getConfigFileName());
+
+ // Copy JMX agent Jar to server
+ getMachine().copyTo(new ResourceUtils(this).getResourceFromUrl(getJmxRmiAgentJarUrl()), getJmxRmiAgentJarDestinationFilePath());
+ }
+
+ public String getJmxRmiAgentJarBasename() {
+ return "brooklyn-jmxrmi-agent-" + BrooklynVersion.get() + ".jar";
+ }
+
+ public String getJmxRmiAgentJarUrl() {
+ return "classpath://" + getJmxRmiAgentJarBasename();
+ }
+
+ public String getJmxRmiAgentJarDestinationFilePath() {
+ return getRunDir() + "/" + getJmxRmiAgentJarBasename();
+ }
+
+ @Override
+ public void launch() {
+ newScript(ImmutableMap.of("usePidFile", getPidFile()), LAUNCHING)
+ .failOnNonZeroResultCode()
+ .body.append(String.format("nohup ./bin/%s ./%s > console.out 2>&1 &", getLaunchScriptName(), getConfigFileName()))
+ .execute();
+ }
+
+ public String getPidFile() { return getRunDir() + "/kafka.pid"; }
+
+ @Override
+ public boolean isRunning() {
+ return newScript(ImmutableMap.of("usePidFile", getPidFile()), CHECK_RUNNING).execute() == 0;
+ }
+
+ @Override
+ public void stop() {
+ newScript(ImmutableMap.of("usePidFile", false), STOPPING)
+ .body.append(String.format("ps ax | grep %s | awk '{print $1}' | xargs kill", getProcessIdentifier()))
+ .body.append(String.format("ps ax | grep %s | awk '{print $1}' | xargs kill -9", getProcessIdentifier()))
+ .execute();
+ }
+
+ @Override
+ protected Map<String, ?> getJmxJavaSystemProperties() {
+ return MutableMap.<String, Object> builder()
+ .put(JmxRmiAgent.JMX_SERVER_PORT_PROPERTY, getJmxPort())
+ .put(JmxRmiAgent.RMI_REGISTRY_PORT_PROPERTY, getRmiServerPort())
+ .put("com.sun.management.jmxremote.ssl", false)
+ .put("com.sun.management.jmxremote.authenticate", false)
+ .put("java.rmi.server.hostname", getHostname())
+ .build();
+ }
+
+ @Override
+ protected List<String> getJmxJavaConfigOptions() {
+ return ImmutableList.of("-javaagent:" + getJmxRmiAgentJarDestinationFilePath());
+ }
+
+ /**
+ * Use RMI agent to provide JMX.
+ */
+ @Override
+ public Map<String, String> getShellEnvironment() {
+ Map<String, String> orig = super.getShellEnvironment();
+ String kafkaJmxOpts = orig.remove("JAVA_OPTS");
+ return MutableMap.<String, String>builder()
+ .putAll(orig)
+ .put("KAFKA_JMX_OPTS", kafkaJmxOpts)
+ .build();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/df84b662/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
index b3cd0f0..40e7234 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerSshDriver.java
@@ -15,147 +15,46 @@
*/
package brooklyn.entity.messaging.kafka;
-import static java.lang.String.format;
-
-import java.util.LinkedList;
-import java.util.List;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.BrooklynVersion;
-import brooklyn.entity.basic.lifecycle.CommonCommands;
-import brooklyn.entity.drivers.downloads.DownloadResolver;
-import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
+import brooklyn.config.ConfigKey;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.util.MutableMap;
-import brooklyn.util.NetworkUtils;
-import brooklyn.util.ResourceUtils;
-import brooklyn.util.jmx.jmxrmi.JmxRmiAgent;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-public class KafkaBrokerSshDriver extends JavaSoftwareProcessSshDriver implements KafkaBrokerDriver {
- private static final Logger log = LoggerFactory.getLogger(KafkaBrokerSshDriver.class);
-
- private String expandedInstallDir;
+public class KafkaBrokerSshDriver extends AbstractfKafkaSshDriver implements KafkaBrokerDriver {
public KafkaBrokerSshDriver(KafkaBrokerImpl entity, SshMachineLocation machine) {
super(entity, machine);
}
@Override
- protected String getLogFileLocation() { return getRunDir()+"/console.out"; }
-
- @Override
- public Integer getKafkaPort() { return entity.getAttribute(KafkaBroker.KAFKA_PORT); }
-
- private String getExpandedInstallDir() {
- if (expandedInstallDir == null) throw new IllegalStateException("expandedInstallDir is null; most likely install was not called");
- return expandedInstallDir;
- }
-
- @Override
- public void install() {
- DownloadResolver resolver = entity.getManagementContext().getEntityDownloadsManager().newDownloader(this);
- List<String> urls = resolver.getTargets();
- String saveAs = resolver.getFilename();
- expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("kafka-%s-src", getVersion()));
-
- List<String> commands = new LinkedList<String>();
- commands.addAll(CommonCommands.downloadUrlAs(urls, saveAs));
- commands.add(CommonCommands.INSTALL_TAR);
- commands.add("tar xzfv "+saveAs);
- commands.add("cd "+expandedInstallDir);
- commands.add("./sbt update");
- commands.add("./sbt package");
-
- newScript(INSTALLING)
- .failOnNonZeroResultCode()
- .body.append(commands)
- .execute();
- }
-
- @Override
- public void customize() {
- NetworkUtils.checkPortsValid(MutableMap.of("kafkaPort", getKafkaPort()));
- newScript(CUSTOMIZING)
- .failOnNonZeroResultCode()
- .body.append(format("cp -R %s/* %s", getExpandedInstallDir(), getRunDir()))
- .execute();
-
- String serverConfig = entity.getConfig(KafkaBroker.SERVER_CONFIG_TEMPLATE);
- copyTemplate(serverConfig, "server.properties");
-
- // Copy JMX agent Jar to server
- getMachine().copyTo(new ResourceUtils(this).getResourceFromUrl(getJmxRmiAgentJarUrl()), getJmxRmiAgentJarDestinationFilePath());
- }
-
- public String getJmxRmiAgentJarBasename() {
- return "brooklyn-jmxrmi-agent-" + BrooklynVersion.get() + ".jar";
- }
-
- public String getJmxRmiAgentJarUrl() {
- return "classpath://" + getJmxRmiAgentJarBasename();
- }
-
- public String getJmxRmiAgentJarDestinationFilePath() {
- return getRunDir() + "/" + getJmxRmiAgentJarBasename();
- }
-
- @Override
- public void launch() {
- newScript(ImmutableMap.of("usePidFile", getPidFile()), LAUNCHING)
- .failOnNonZeroResultCode()
- .body.append("nohup ./bin/kafka-server-start.sh ./server.properties > console.out 2>&1 &")
- .execute();
+ protected Map<String, Integer> getPortMap() {
+ return MutableMap.of("kafkaPort", getKafkaPort());
}
- public String getPidFile() { return getRunDir() + "/kafka.pid"; }
-
@Override
- public boolean isRunning() {
- return newScript(ImmutableMap.of("usePidFile", getPidFile()), CHECK_RUNNING).execute() == 0;
+ protected ConfigKey<String> getConfigTemplateKey() {
+ return KafkaBroker.SERVER_CONFIG_TEMPLATE;
}
@Override
- public void stop() {
- newScript(ImmutableMap.of("usePidFile", false), STOPPING)
- .body.append("ps ax | grep kafka\\.Kafka | awk '{print $1}' | xargs kill")
- .body.append("ps ax | grep kafka\\.Kafka | awk '{print $1}' | xargs kill -9")
- .execute();
+ protected String getConfigFileName() {
+ return "server.properties";
}
@Override
- protected Map<String, ?> getJmxJavaSystemProperties() {
- return MutableMap.<String, Object> builder()
- .put(JmxRmiAgent.JMX_SERVER_PORT_PROPERTY, getJmxPort())
- .put(JmxRmiAgent.RMI_REGISTRY_PORT_PROPERTY, getRmiServerPort())
- .put("com.sun.management.jmxremote.ssl", false)
- .put("com.sun.management.jmxremote.authenticate", false)
- .put("java.rmi.server.hostname", getHostname())
- .build();
+ protected String getLaunchScriptName() {
+ return "kafka-server-start.sh";
}
@Override
- protected List<String> getJmxJavaConfigOptions() {
- return ImmutableList.of("-javaagent:" + getJmxRmiAgentJarDestinationFilePath());
+ protected String getProcessIdentifier() {
+ return "kafka\\.Kafka";
}
- /**
- * Use RMI agent to provide JMX.
- */
@Override
- public Map<String, String> getShellEnvironment() {
- Map<String, String> orig = super.getShellEnvironment();
- String kafkaJmxOpts = orig.remove("JAVA_OPTS");
- return MutableMap.<String, String>builder()
- .putAll(orig)
- .put("KAFKA_JMX_OPTS", kafkaJmxOpts)
- .build();
+ public Integer getKafkaPort() {
+ return getEntity().getAttribute(KafkaBroker.KAFKA_PORT);
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/df84b662/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
index c62cb0a..a35aab6 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
@@ -15,147 +15,46 @@
*/
package brooklyn.entity.messaging.kafka;
-import static java.lang.String.format;
-
-import java.util.LinkedList;
-import java.util.List;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.BrooklynVersion;
-import brooklyn.entity.basic.lifecycle.CommonCommands;
-import brooklyn.entity.drivers.downloads.DownloadResolver;
-import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
+import brooklyn.config.ConfigKey;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.util.MutableMap;
-import brooklyn.util.NetworkUtils;
-import brooklyn.util.ResourceUtils;
-import brooklyn.util.jmx.jmxrmi.JmxRmiAgent;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-public class KafkaZookeeperSshDriver extends JavaSoftwareProcessSshDriver implements KafkaZookeeperDriver {
- private static final Logger log = LoggerFactory.getLogger(KafkaZookeeperSshDriver.class);
-
- private String expandedInstallDir;
+public class KafkaZookeeperSshDriver extends AbstractfKafkaSshDriver implements KafkaZookeeperDriver {
public KafkaZookeeperSshDriver(KafkaZookeeperImpl entity, SshMachineLocation machine) {
super(entity, machine);
}
@Override
- protected String getLogFileLocation() { return getRunDir()+"/console.out"; }
-
- @Override
- public Integer getZookeeperPort() { return entity.getAttribute(KafkaZookeeper.ZOOKEEPER_PORT); }
-
- private String getExpandedInstallDir() {
- if (expandedInstallDir == null) throw new IllegalStateException("expandedInstallDir is null; most likely install was not called");
- return expandedInstallDir;
- }
-
- @Override
- public void install() {
- DownloadResolver resolver = entity.getManagementContext().getEntityDownloadsManager().newDownloader(this);
- List<String> urls = resolver.getTargets();
- String saveAs = resolver.getFilename();
- expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("kafka-%s-src", getVersion()));
-
- List<String> commands = new LinkedList<String>();
- commands.addAll(CommonCommands.downloadUrlAs(urls, saveAs));
- commands.add(CommonCommands.INSTALL_TAR);
- commands.add("tar xzfv "+saveAs);
- commands.add("cd "+expandedInstallDir);
- commands.add("./sbt update");
- commands.add("./sbt package");
-
- newScript(INSTALLING)
- .failOnNonZeroResultCode()
- .body.append(commands)
- .execute();
- }
-
- @Override
- public void customize() {
- NetworkUtils.checkPortsValid(MutableMap.of("zookeeperPort", getZookeeperPort()));
- newScript(CUSTOMIZING)
- .failOnNonZeroResultCode()
- .body.append(format("cp -R %s/* %s", getExpandedInstallDir(), getRunDir()))
- .execute();
-
- String zookeeperConfig = entity.getConfig(KafkaZookeeper.ZOOKEEPER_CONFIG_TEMPLATE);
- copyTemplate(zookeeperConfig, "zookeeper.properties");
-
- // Copy JMX agent Jar to server
- getMachine().copyTo(new ResourceUtils(this).getResourceFromUrl(getJmxRmiAgentJarUrl()), getJmxRmiAgentJarDestinationFilePath());
- }
-
- public String getJmxRmiAgentJarBasename() {
- return "brooklyn-jmxrmi-agent-" + BrooklynVersion.get() + ".jar";
- }
-
- public String getJmxRmiAgentJarUrl() {
- return "classpath://" + getJmxRmiAgentJarBasename();
- }
-
- public String getJmxRmiAgentJarDestinationFilePath() {
- return getRunDir() + "/" + getJmxRmiAgentJarBasename();
- }
-
- @Override
- public void launch() {
- newScript(ImmutableMap.of("usePidFile", getPidFile()), LAUNCHING)
- .failOnNonZeroResultCode()
- .body.append("nohup ./bin/zookeeper-server-start.sh ./zookeeper.properties > console.out 2>&1 &")
- .execute();
+ protected Map<String, Integer> getPortMap() {
+ return MutableMap.of("zookeeperPort", getZookeeperPort());
}
- public String getPidFile() { return getRunDir() + "/kafka.pid"; }
-
@Override
- public boolean isRunning() {
- return newScript(ImmutableMap.of("usePidFile", getPidFile()), CHECK_RUNNING).execute() == 0;
+ protected ConfigKey<String> getConfigTemplateKey() {
+ return KafkaZookeeper.ZOOKEEPER_CONFIG_TEMPLATE;
}
@Override
- public void stop() {
- newScript(ImmutableMap.of("usePidFile", false), STOPPING)
- .body.append("ps ax | grep quorum\\.QuorumPeerMain | awk '{print $1}' | xargs kill")
- .body.append("ps ax | grep quorum\\.QuorumPeerMain | awk '{print $1}' | xargs kill -9")
- .execute();
+ protected String getConfigFileName() {
+ return "zookeeper.properties";
}
@Override
- protected Map<String, ?> getJmxJavaSystemProperties() {
- return MutableMap.<String, Object> builder()
- .put(JmxRmiAgent.JMX_SERVER_PORT_PROPERTY, getJmxPort())
- .put(JmxRmiAgent.RMI_REGISTRY_PORT_PROPERTY, getRmiServerPort())
- .put("com.sun.management.jmxremote.ssl", false)
- .put("com.sun.management.jmxremote.authenticate", false)
- .put("java.rmi.server.hostname", getHostname())
- .build();
+ protected String getLaunchScriptName() {
+ return "zookeeper-server-start.sh";
}
@Override
- protected List<String> getJmxJavaConfigOptions() {
- return ImmutableList.of("-javaagent:" + getJmxRmiAgentJarDestinationFilePath());
+ protected String getProcessIdentifier() {
+ return "quorum\\.QuorumPeerMain";
}
- /**
- * Use RMI agent to provide JMX.
- */
@Override
- public Map<String, String> getShellEnvironment() {
- Map<String, String> orig = super.getShellEnvironment();
- String kafkaJmxOpts = orig.remove("JAVA_OPTS");
- return MutableMap.<String, String>builder()
- .putAll(orig)
- .put("KAFKA_JMX_OPTS", kafkaJmxOpts)
- .build();
+ public Integer getZookeeperPort() {
+ return getEntity().getAttribute(KafkaZookeeper.ZOOKEEPER_PORT);
}
}
[42/50] brooklyn-library git commit: Fix template reference to
redisPort
Posted by he...@apache.org.
Fix template reference to redisPort
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/79e666f0
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/79e666f0
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/79e666f0
Branch: refs/heads/0.5.0
Commit: 79e666f0174f17828ef275415375d4d98e5f7d20
Parents: e9cb157
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Mon Apr 22 15:46:24 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:44 2013 +0100
----------------------------------------------------------------------
.../java/brooklyn/entity/nosql/redis/RedisStore.java | 2 ++
.../brooklyn/entity/nosql/redis/RedisStoreImpl.java | 14 ++++++++++++--
.../entity/nosql/redis/RedisStoreSshDriver.java | 11 +----------
.../resources/brooklyn/entity/nosql/redis/redis.conf | 4 ++--
.../resources/brooklyn/entity/nosql/redis/slave.conf | 7 +++++--
5 files changed, 22 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/79e666f0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
index 492da2d..3717ffc 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
@@ -41,4 +41,6 @@ public interface RedisStore extends SoftwareProcess, DataStore {
String getAddress();
+ Integer getRedisPort();
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/79e666f0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
index bf6c171..ac8b5aa 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
@@ -1,7 +1,5 @@
package brooklyn.entity.nosql.redis;
-import java.io.ByteArrayInputStream;
-import java.io.File;
import java.util.Map;
import javax.annotation.Nullable;
@@ -14,6 +12,7 @@ import brooklyn.entity.basic.SoftwareProcessImpl;
import brooklyn.event.feed.ssh.SshFeed;
import brooklyn.event.feed.ssh.SshPollConfig;
import brooklyn.event.feed.ssh.SshValueFunctions;
+import brooklyn.location.Location;
import brooklyn.location.MachineLocation;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.util.MutableMap;
@@ -54,8 +53,14 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
connectServiceUpIsRunning();
+ // Find an SshMachineLocation for the UPTIME feed
+ Optional<Location> location = Iterables.tryFind(getLocations(), Predicates.instanceOf(SshMachineLocation.class));
+ if (!location.isPresent()) throw new IllegalStateException("Could not find SshMachineLocation in list of locations");
+ SshMachineLocation machine = (SshMachineLocation) location.get();
+
sshFeed = SshFeed.builder()
.entity(this)
+ .machine(machine)
.poll(new SshPollConfig<Integer>(UPTIME)
.command(getDriver().getRunDir() + "/bin/redis-cli info")
.onError(Functions.constant(-1))
@@ -98,4 +103,9 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
return (machine != null) ? machine.getAddress().getHostAddress() : null;
}
+ @Override
+ public Integer getRedisPort() {
+ return getAttribute(RedisStore.REDIS_PORT);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/79e666f0/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
index 7cbe3c7..9b17057 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
@@ -25,20 +25,11 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
super(entity, machine);
}
- @Override
- public RedisStoreImpl getEntity() {
- return (RedisStoreImpl) super.getEntity();
- }
-
- protected Integer getRedisPort() {
- return getEntity().getAttribute(RedisStore.REDIS_PORT);
- }
-
private String getExpandedInstallDir() {
if (expandedInstallDir == null) throw new IllegalStateException("expandedInstallDir is null; most likely install was not called");
return expandedInstallDir;
}
-
+
@Override
public void install() {
DownloadResolver resolver = Entities.newDownloader(this);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/79e666f0/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
index b2dd5cb..0554eb2 100644
--- a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
+++ b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
@@ -5,8 +5,8 @@ daemonize yes
pidfile ${driver.runDir}/pid.txt
# Set port and optional bind address
-port ${entity.port}
-# bind ${driver.machine.address}
+port ${entity.redisPort?c}
+# bind ${entity.address}
# Configure logging
loglevel verbose
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/79e666f0/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
index b2dd5cb..3a9e64a 100644
--- a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
+++ b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
@@ -5,8 +5,11 @@ daemonize yes
pidfile ${driver.runDir}/pid.txt
# Set port and optional bind address
-port ${entity.port}
-# bind ${driver.machine.address}
+port ${entity.redisPort?c}
+# bind ${entity.address}
+
+# Slave configuration
+slaveof ${entity.master.address} ${entity.master.redisPort?c}
# Configure logging
loglevel verbose
[02/50] brooklyn-library git commit: Deprecate LanguageUtils
Posted by he...@apache.org.
Deprecate LanguageUtils
- brooklyn.util.internal.LanguageUtils is a groovy class
- Did some very minor cleanup, and deprecated it
so we are free to completely change it in 0.6!
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/a5c52c08
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/a5c52c08
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/a5c52c08
Branch: refs/heads/0.5.0
Commit: a5c52c081b6df641708f8ca9efbed4abf4b02bea
Parents: fde9b49
Author: Aled Sage <al...@gmail.com>
Authored: Wed Mar 27 08:19:34 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Mar 27 08:19:34 2013 +0000
----------------------------------------------------------------------
.../brooklyn/mgmt/federated/FederatingManagementContext.groovy | 3 ++-
sandbox/mgmt/src/test/java/example/infinispan/OneA.groovy | 2 --
.../brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java | 4 ++--
.../java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy | 6 +++---
4 files changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a5c52c08/sandbox/mgmt/src/main/java/brooklyn/mgmt/federated/FederatingManagementContext.groovy
----------------------------------------------------------------------
diff --git a/sandbox/mgmt/src/main/java/brooklyn/mgmt/federated/FederatingManagementContext.groovy b/sandbox/mgmt/src/main/java/brooklyn/mgmt/federated/FederatingManagementContext.groovy
index 7623f0a..c85f8d1 100644
--- a/sandbox/mgmt/src/main/java/brooklyn/mgmt/federated/FederatingManagementContext.groovy
+++ b/sandbox/mgmt/src/main/java/brooklyn/mgmt/federated/FederatingManagementContext.groovy
@@ -21,6 +21,7 @@ import brooklyn.management.internal.AbstractManagementContext
import brooklyn.management.internal.CollectionChangeListener
import brooklyn.management.internal.LocalManagementContext
import brooklyn.util.internal.LanguageUtils
+import brooklyn.util.text.Identifiers
public class FederatingManagementContext extends AbstractManagementContext {
@@ -84,7 +85,7 @@ public class FederatingManagementContext extends AbstractManagementContext {
public EntityManager getEntityManager() { return rem.getContext().getEntityManager(); }
public void onApplicationStart(Application app) {
- String remoteNodeUid = LanguageUtils.newUid();
+ String remoteNodeUid = Identifiers.makeRandomId(8);
c.addListener(new NodeStartListener());
c.put(remoteNodeUid, BrooklynManagementNode.WELCOME_MESSAGE);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a5c52c08/sandbox/mgmt/src/test/java/example/infinispan/OneA.groovy
----------------------------------------------------------------------
diff --git a/sandbox/mgmt/src/test/java/example/infinispan/OneA.groovy b/sandbox/mgmt/src/test/java/example/infinispan/OneA.groovy
index 3e090be..59c87fe 100644
--- a/sandbox/mgmt/src/test/java/example/infinispan/OneA.groovy
+++ b/sandbox/mgmt/src/test/java/example/infinispan/OneA.groovy
@@ -6,8 +6,6 @@ import org.infinispan.config.GlobalConfiguration
import org.infinispan.manager.DefaultCacheManager
import org.infinispan.manager.EmbeddedCacheManager
-import brooklyn.util.internal.LanguageUtils;
-
public class OneA {
public static void main(String[] args) throws Exception {
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a5c52c08/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
index dda06b2..0cd3d27 100644
--- a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
+++ b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
@@ -8,7 +8,7 @@ import brooklyn.entity.AbstractEc2LiveTest;
import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.location.Location;
import brooklyn.test.EntityTestUtils;
-import brooklyn.util.internal.LanguageUtils;
+import brooklyn.util.text.Identifiers;
import com.google.common.collect.ImmutableList;
@@ -20,7 +20,7 @@ public class KarafContainerEc2LiveTest extends AbstractEc2LiveTest {
@Override
protected void doTest(Location loc) throws Exception {
KarafContainer karaf = app.createAndManageChild(EntitySpecs.spec(KarafContainer.class)
- .configure("name", LanguageUtils.newUid())
+ .configure("name", Identifiers.makeRandomId(8))
.configure("displayName", "Karaf Test")
.configure("jmxPort", "8099+")
.configure("rmiServerPort", "9099+"));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a5c52c08/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
----------------------------------------------------------------------
diff --git a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
index e046a0f..a30e699 100644
--- a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
+++ b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
@@ -17,8 +17,8 @@ import brooklyn.entity.trait.Startable
import brooklyn.location.MachineProvisioningLocation
import brooklyn.location.basic.LocalhostMachineProvisioningLocation
import brooklyn.test.entity.TestApplication
-import brooklyn.util.internal.LanguageUtils
import brooklyn.util.internal.TimeExtras
+import brooklyn.util.text.Identifiers
public class KarafContainerTest {
static { TimeExtras.init() }
@@ -42,7 +42,7 @@ public class KarafContainerTest {
@Test(groups = ["Integration", "WIP"])
public void canStartupAndShutdown() {
karaf = app.createAndManageChild(EntitySpecs.spec(KarafContainer.class)
- .configure("name", LanguageUtils.newUid())
+ .configure("name", Identifiers.makeRandomId(8))
.configure("displayName", "Karaf Test")
.configure("jmxPort", "8099+")
.configure("rmiServerPort", "9099+"));
@@ -64,7 +64,7 @@ public class KarafContainerTest {
@Test(groups = ["Integration", "WIP"])
public void testCanInstallAndUninstallBundle() {
karaf = app.createAndManageChild(EntitySpecs.spec(KarafContainer.class)
- .configure("name", LanguageUtils.newUid())
+ .configure("name", Identifiers.makeRandomId(8))
.configure("displayName", "Karaf Test")
.configure("jmxPort", "8099+")
.configure("rmiServerPort", "9099+"));
[03/50] brooklyn-library git commit: Fix WebAppIntegrationTest
Posted by he...@apache.org.
Fix WebAppIntegrationTest
- ensureTomcatIsShutdown needs dependsOnMethod="shutdownApp",
otherwise fails because nothing previously asked tomcat
to shutdown.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/2a28206a
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/2a28206a
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/2a28206a
Branch: refs/heads/0.5.0
Commit: 2a28206ac5c56350a4e9d3c9edee09ee24fcbd51
Parents: a5c52c0
Author: Aled Sage <al...@gmail.com>
Authored: Wed Mar 27 08:37:32 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Mar 27 08:37:32 2013 +0000
----------------------------------------------------------------------
.../entity/webapp/WebAppIntegrationTest.groovy | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2a28206a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
index 80a0da7..f9414d1 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
@@ -90,7 +90,7 @@ public class WebAppIntegrationTest {
}
}
- @AfterMethod(alwaysRun=true)
+ @AfterMethod(alwaysRun=true, dependsOnMethods="shutdownApp")
public void ensureTomcatIsShutDown() {
Socket shutdownSocket = null;
SocketException gotException = null;
@@ -110,17 +110,17 @@ public class WebAppIntegrationTest {
.run();
if (socketClosed == false) {
- log.error "Tomcat did not shut down - this is a failure of the last test run";
- log.warn "I'm sending a message to the Tomcat shutdown port";
- OutputStreamWriter writer = new OutputStreamWriter(shutdownSocket.getOutputStream());
- writer.write("SHUTDOWN\r\n");
- writer.flush();
- writer.close();
- shutdownSocket.close();
- throw new Exception("Last test run did not shut down Tomcat")
+// log.error("Tomcat did not shut down - this is a failure of the last test run");
+// log.warn("I'm sending a message to the Tomcat shutdown port {}", shutdownPort);
+// OutputStreamWriter writer = new OutputStreamWriter(shutdownSocket.getOutputStream());
+// writer.write("SHUTDOWN\r\n");
+// writer.flush();
+// writer.close();
+// shutdownSocket.close();
+ throw new Exception("Last test run did not shut down Tomcat entity "+entity+" (port "+shutdownPort+")");
}
} else {
- log.info "Cannot shutdown, because shutdown-port not set for $entity";
+ log.info("Cannot shutdown, because shutdown-port not set for {}", entity);
}
}
[26/50] brooklyn-library git commit: Fix port check and sensor name
and use RMI agent for JMX in zookeeper
Posted by he...@apache.org.
Fix port check and sensor name and use RMI agent for JMX in zookeeper
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/a24e0e4b
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/a24e0e4b
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/a24e0e4b
Branch: refs/heads/0.5.0
Commit: a24e0e4b8e4b41ac7458778ed0c2532cfbfbf53d
Parents: ea32c5a
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Mar 21 01:50:47 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:07 2013 +0100
----------------------------------------------------------------------
.../entity/messaging/kafka/KafkaBroker.java | 2 +-
.../entity/messaging/kafka/KafkaBrokerImpl.java | 12 +----
.../messaging/kafka/KafkaClusterImpl.java | 4 +-
.../messaging/kafka/KafkaZookeeperImpl.java | 10 +----
.../kafka/KafkaZookeeperSshDriver.java | 46 ++++++++++++++++++--
.../entity/messaging/qpid/QpidBrokerImpl.java | 11 +----
6 files changed, 50 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a24e0e4b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
index 01fa424..33cb7e0 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBroker.java
@@ -43,7 +43,7 @@ public interface KafkaBroker extends SoftwareProcess, MessageBroker, UsesJmx, Ka
String.class, "kafka.config.server", "Server configuration template (in freemarker format)", "classpath://brooklyn/entity/messaging/kafka/server.properties");
@SetFromFlag("zookeeper")
- BasicConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicConfigKey<KafkaZookeeper>(KafkaZookeeper.class, "Kafka zookeeper entity");
+ BasicConfigKey<KafkaZookeeper> ZOOKEEPER = new BasicConfigKey<KafkaZookeeper>(KafkaZookeeper.class, "kafka.broker.zookeeper", "Kafka zookeeper entity");
AttributeSensor<Integer> BROKER_ID = new BasicAttributeSensor<Integer>(Integer.class, "kafka.broker.id", "Kafka unique broker ID");
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a24e0e4b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index ed9ae0c..4dd253e 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -76,7 +76,7 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
@Override
public KafkaZookeeper getZookeeper() { return getConfig(ZOOKEEPER); }
- public KafkaTopic createTopic(Map properties) {
+ public KafkaTopic createTopic(Map<?, ?> properties) {
KafkaTopic result = new KafkaTopic(properties, this);
Entities.manage(result);
result.create();
@@ -84,18 +84,10 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
}
@Override
- public Class getDriverInterface() {
+ public Class<?> getDriverInterface() {
return KafkaBrokerDriver.class;
}
- @Override
- protected Collection<Integer> getRequiredOpenPorts() {
- Set<Integer> ports = Sets.newLinkedHashSet(super.getRequiredOpenPorts());
- ports.add(getAttribute(KAFKA_PORT));
- log.debug("getRequiredOpenPorts detected expanded ports {} for {}", ports, this);
- return ports;
- }
-
private ObjectName socketServerStatsMbean = JmxHelper.createObjectName("kafka:type=kafka.SocketServerStats");
private volatile FunctionFeed functionFeed;
private volatile JmxFeed jmxFeed;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a24e0e4b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
index 969a140..efc14fc 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
@@ -76,11 +76,11 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
if (zookeeper == null) {
EntitySpec<KafkaZookeeper> zookeeperSpec = getAttribute(ZOOKEEPER_SPEC);
if (zookeeperSpec == null) {
- log.debug("creating controller using default spec for {}", this);
+ log.debug("creating zookeeper using default spec for {}", this);
zookeeperSpec = BasicEntitySpec.newInstance(KafkaZookeeper.class);
setAttribute(ZOOKEEPER_SPEC, zookeeperSpec);
} else {
- log.debug("creating controller using custom spec for {}", this);
+ log.debug("creating zookeeper using custom spec for {}", this);
}
zookeeper = getEntityManager().createEntity(WrappingEntitySpec.newInstance(zookeeperSpec).parent(this));
if (Entities.isManaged(this)) Entities.manage(zookeeper);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a24e0e4b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
index 8d9d4f4..0554011 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
@@ -67,18 +67,10 @@ public class KafkaZookeeperImpl extends SoftwareProcessImpl implements KafkaZook
public String getHostname() { return getAttribute(HOSTNAME); }
@Override
- public Class getDriverInterface() {
+ public Class<?> getDriverInterface() {
return KafkaZookeeperDriver.class;
}
- @Override
- protected Collection<Integer> getRequiredOpenPorts() {
- Set<Integer> ports = Sets.newLinkedHashSet(super.getRequiredOpenPorts());
- ports.add(getAttribute(ZOOKEEPER_PORT));
- log.debug("getRequiredOpenPorts detected expanded ports {} for {}", ports, this);
- return ports;
- }
-
private ObjectName zookeeperMbean = JmxHelper.createObjectName("org.apache.ZooKeeperService:name0=StandaloneServer_port-1");
private volatile FunctionFeed functionFeed;
private volatile JmxFeed jmxFeed;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a24e0e4b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
index bbaaa0d..c62cb0a 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperSshDriver.java
@@ -24,13 +24,17 @@ import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.BrooklynVersion;
import brooklyn.entity.basic.lifecycle.CommonCommands;
import brooklyn.entity.drivers.downloads.DownloadResolver;
import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.util.MutableMap;
import brooklyn.util.NetworkUtils;
+import brooklyn.util.ResourceUtils;
+import brooklyn.util.jmx.jmxrmi.JmxRmiAgent;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
public class KafkaZookeeperSshDriver extends JavaSoftwareProcessSshDriver implements KafkaZookeeperDriver {
@@ -83,8 +87,23 @@ public class KafkaZookeeperSshDriver extends JavaSoftwareProcessSshDriver implem
.body.append(format("cp -R %s/* %s", getExpandedInstallDir(), getRunDir()))
.execute();
- String serverConfig = entity.getConfig(KafkaZookeeper.ZOOKEEPER_CONFIG_TEMPLATE);
- copyTemplate(serverConfig, "zookeeper.properties");
+ String zookeeperConfig = entity.getConfig(KafkaZookeeper.ZOOKEEPER_CONFIG_TEMPLATE);
+ copyTemplate(zookeeperConfig, "zookeeper.properties");
+
+ // Copy JMX agent Jar to server
+ getMachine().copyTo(new ResourceUtils(this).getResourceFromUrl(getJmxRmiAgentJarUrl()), getJmxRmiAgentJarDestinationFilePath());
+ }
+
+ public String getJmxRmiAgentJarBasename() {
+ return "brooklyn-jmxrmi-agent-" + BrooklynVersion.get() + ".jar";
+ }
+
+ public String getJmxRmiAgentJarUrl() {
+ return "classpath://" + getJmxRmiAgentJarBasename();
+ }
+
+ public String getJmxRmiAgentJarDestinationFilePath() {
+ return getRunDir() + "/" + getJmxRmiAgentJarBasename();
}
@Override
@@ -111,10 +130,31 @@ public class KafkaZookeeperSshDriver extends JavaSoftwareProcessSshDriver implem
}
@Override
+ protected Map<String, ?> getJmxJavaSystemProperties() {
+ return MutableMap.<String, Object> builder()
+ .put(JmxRmiAgent.JMX_SERVER_PORT_PROPERTY, getJmxPort())
+ .put(JmxRmiAgent.RMI_REGISTRY_PORT_PROPERTY, getRmiServerPort())
+ .put("com.sun.management.jmxremote.ssl", false)
+ .put("com.sun.management.jmxremote.authenticate", false)
+ .put("java.rmi.server.hostname", getHostname())
+ .build();
+ }
+
+ @Override
+ protected List<String> getJmxJavaConfigOptions() {
+ return ImmutableList.of("-javaagent:" + getJmxRmiAgentJarDestinationFilePath());
+ }
+
+ /**
+ * Use RMI agent to provide JMX.
+ */
+ @Override
public Map<String, String> getShellEnvironment() {
Map<String, String> orig = super.getShellEnvironment();
+ String kafkaJmxOpts = orig.remove("JAVA_OPTS");
return MutableMap.<String, String>builder()
- .put("KAFKA_JMX_OPTS", orig.get("JAVA_OPTS"))
+ .putAll(orig)
+ .put("KAFKA_JMX_OPTS", kafkaJmxOpts)
.build();
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a24e0e4b/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 441e996..938e1e6 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
@@ -99,18 +99,9 @@ public class QpidBrokerImpl extends JMSBroker<QpidQueue, QpidTopic> implements Q
}
@Override
- protected Collection<Integer> getRequiredOpenPorts() {
- Set<Integer> ports = Sets.newLinkedHashSet(super.getRequiredOpenPorts());
- ports.add(getAttribute(AMQP_PORT));
- ports.add(getAttribute(HTTP_MANAGEMENT_PORT));
- log.debug("getRequiredOpenPorts detected expanded (qpid) ports {} for {}", ports, this);
- return ports;
- }
-
- @Override
protected void connectSensors() {
String serverInfoMBeanName = "org.apache.qpid:type=ServerInformation,name=ServerInformation";
-
+
jmxFeed = JmxFeed.builder()
.entity(this)
.period(500, TimeUnit.MILLISECONDS)
[11/50] brooklyn-library git commit: Convert
MonitoredCassandraClusterExample to java
Posted by he...@apache.org.
Convert MonitoredCassandraClusterExample to 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/8990ab7c
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/8990ab7c
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/8990ab7c
Branch: refs/heads/0.5.0
Commit: 8990ab7c3cffc8edb37cd7156f3a313a897c5a0a
Parents: bccb14f
Author: Aled Sage <al...@gmail.com>
Authored: Thu Mar 28 16:44:07 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Apr 1 12:41:40 2013 +0100
----------------------------------------------------------------------
.../MonitoredCassandraClusterExample.groovy | 22 --------------------
.../demo/MonitoredCassandraClusterExample.java | 20 ++++++++++++++++++
2 files changed, 20 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8990ab7c/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.groovy
----------------------------------------------------------------------
diff --git a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.groovy b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.groovy
deleted file mode 100644
index f20be57..0000000
--- a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-package brooklyn.demo
-
-import brooklyn.entity.basic.ApplicationBuilder
-import brooklyn.entity.nosql.cassandra.CassandraCluster
-import brooklyn.entity.proxying.EntitySpecs
-
-/** Cassandra Application */
-public class MonitoredCassandraClusterExample extends ApplicationBuilder {
-
- /**
- * For overriding, to create and wire together entities.
- */
- protected void doBuild() {
- addChild(EntitySpecs.spec(CassandraCluster.class)
- .configure("initialSize", "2")
- .configure("clusterName", "CassandraDemo")
- .configure("jmxPort", "11099+")
- .configure("rmiServerPort", "9001+")
- .configure("thriftPort", "9160+"));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8990ab7c/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
new file mode 100644
index 0000000..3c1a05f
--- /dev/null
+++ b/examples/monitored-cassandra-cluster/src/main/java/brooklyn/demo/MonitoredCassandraClusterExample.java
@@ -0,0 +1,20 @@
+package brooklyn.demo;
+
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.nosql.cassandra.CassandraCluster;
+import brooklyn.entity.proxying.EntitySpecs;
+
+/** Cassandra Application */
+public class MonitoredCassandraClusterExample extends ApplicationBuilder {
+
+ @Override
+ protected void doBuild() {
+ addChild(EntitySpecs.spec(CassandraCluster.class)
+ .configure("initialSize", "2")
+ .configure("clusterName", "CassandraDemo")
+ .configure("jmxPort", "11099+")
+ .configure("rmiServerPort", "9001+")
+ .configure("thriftPort", "9160+"));
+ }
+
+}
[22/50] brooklyn-library git commit: Wait for JMX availability before
setting SERVICE_UP
Posted by he...@apache.org.
Wait for JMX availability before setting 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/2ca3ea75
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/2ca3ea75
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/2ca3ea75
Branch: refs/heads/0.5.0
Commit: 2ca3ea75ca987d2e42388999ab734557d791b439
Parents: c143706
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Mar 20 20:08:36 2013 +0000
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Fri Apr 19 10:36:06 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/messaging/kafka/Kafka.java | 1 -
.../entity/messaging/kafka/KafkaBrokerImpl.java | 28 +++++++++++++++++---
.../messaging/kafka/KafkaZookeeperImpl.java | 25 +++++++++++++++--
.../messaging/kafka/KafkaIntegrationTest.groovy | 2 --
4 files changed, 47 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2ca3ea75/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
index 7f26f8e..a0e4eef 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/Kafka.java
@@ -17,7 +17,6 @@ package brooklyn.entity.messaging.kafka;
import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.SoftwareProcess;
-import brooklyn.event.basic.BasicAttributeSensor;
import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
import brooklyn.event.basic.BasicConfigKey;
import brooklyn.util.flags.SetFromFlag;
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2ca3ea75/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index ae21118..0abdf45 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -15,12 +15,15 @@
*/
package brooklyn.entity.messaging.kafka;
+import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,12 +32,13 @@ import brooklyn.entity.Entity;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.SoftwareProcessImpl;
import brooklyn.entity.messaging.MessageBroker;
-import brooklyn.event.basic.BasicAttributeSensor;
import brooklyn.event.feed.function.FunctionFeed;
import brooklyn.event.feed.function.FunctionPollConfig;
import brooklyn.event.feed.jmx.JmxAttributePollConfig;
import brooklyn.event.feed.jmx.JmxFeed;
+import brooklyn.event.feed.jmx.JmxHelper;
import brooklyn.util.MutableMap;
+import brooklyn.util.exceptions.Exceptions;
import com.google.common.base.Functions;
import com.google.common.base.Objects.ToStringHelper;
@@ -93,13 +97,29 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
return ports;
}
+ private ObjectName socketServerStatsMbean = JmxHelper.createObjectName("kafka:type=kafka.SocketServerStats");
private volatile FunctionFeed functionFeed;
private volatile JmxFeed jmxFeed;
@Override
- protected void connectSensors() {
- String socketServerStatsMbean = "kafka:type=kafka.SocketServerStats";
+ public void waitForServiceUp(long duration, TimeUnit units) {
+ super.waitForServiceUp(duration, units);
+
+ // Wait for the MBean to exist
+ JmxHelper helper = null;
+ try {
+ helper = new JmxHelper(this);
+ helper.connect();
+ helper.assertMBeanExistsEventually(socketServerStatsMbean, units.toMillis(duration));
+ } catch (IOException e) {
+ throw Exceptions.propagate(e);
+ } finally {
+ if (helper != null) helper.disconnect();
+ }
+ }
+ @Override
+ protected void connectSensors() {
functionFeed = FunctionFeed.builder()
.entity(this)
.poll(new FunctionPollConfig<Object, Boolean>(SERVICE_UP)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2ca3ea75/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
index d941411..a572a75 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/kafka/KafkaZookeeperImpl.java
@@ -15,12 +15,15 @@
*/
package brooklyn.entity.messaging.kafka;
+import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
+import javax.management.ObjectName;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,7 +34,9 @@ import brooklyn.event.feed.function.FunctionFeed;
import brooklyn.event.feed.function.FunctionPollConfig;
import brooklyn.event.feed.jmx.JmxAttributePollConfig;
import brooklyn.event.feed.jmx.JmxFeed;
+import brooklyn.event.feed.jmx.JmxHelper;
import brooklyn.util.MutableMap;
+import brooklyn.util.exceptions.Exceptions;
import com.google.common.base.Function;
import com.google.common.base.Functions;
@@ -76,13 +81,29 @@ public class KafkaZookeeperImpl extends SoftwareProcessImpl implements KafkaZook
return ports;
}
+ private ObjectName zookeeperMbean = JmxHelper.createObjectName("org.apache.ZooKeeperService:name0=StandaloneServer_port-1");
private volatile FunctionFeed functionFeed;
private volatile JmxFeed jmxFeed;
@Override
- protected void connectSensors() {
- String zookeeperMbean = "org.apache.ZooKeeperService:name0=StandaloneServer_port-1";
+ public void waitForServiceUp(long duration, TimeUnit units) {
+ super.waitForServiceUp(duration, units);
+
+ // Wait for the MBean to exist
+ JmxHelper helper = null;
+ try {
+ helper = new JmxHelper(this);
+ helper.connect();
+ helper.assertMBeanExistsEventually(zookeeperMbean, units.toMillis(duration));
+ } catch (IOException e) {
+ throw Exceptions.propagate(e);
+ } finally {
+ if (helper != null) helper.disconnect();
+ }
+ }
+ @Override
+ protected void connectSensors() {
functionFeed = FunctionFeed.builder()
.entity(this)
.poll(new FunctionPollConfig<Object, Boolean>(SERVICE_UP)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2ca3ea75/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
index cbfb410..89f5773 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.groovy
@@ -117,8 +117,6 @@ public class KafkaIntegrationTest {
Entities.dumpInfo(cluster);
- Thread.sleep(5000l);
-
KafkaSupport support = new KafkaSupport(cluster.getZookeeper());
support.sendMessage("brooklyn", "TEST_MESSAGE")
List<String> messages = support.getMessage("brooklyn");
[37/50] brooklyn-library git commit: Merge pull request #673 from
pveentjer/removecloudfoundry
Posted by he...@apache.org.
Merge pull request #673 from pveentjer/removecloudfoundry
Removed cloud foundry module since it is broken
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/4b5d145d
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/4b5d145d
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/4b5d145d
Branch: refs/heads/0.5.0
Commit: 4b5d145d77e9e3677632db463fa91427604a3558
Parents: d99e086 33dcec8
Author: Aled Sage <al...@gmail.com>
Authored: Mon Apr 22 03:00:12 2013 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Apr 22 03:00:12 2013 -0700
----------------------------------------------------------------------
examples/global-web-fabric/README.txt | 11 +-
.../brooklyn/demo/GlobalWebFabricExample.java | 13 +-
.../whirr/WebFabricWithHadoopExample.java | 19 +--
examples/pom.xml | 1 -
examples/portable-cloudfoundry/.gitignore | 2 -
examples/portable-cloudfoundry/README.txt | 14 --
examples/portable-cloudfoundry/pom.xml | 72 -----------
.../MovableCloudFoundryClusterExample.java | 37 ------
.../MovableElasticWebAppCluster.java | 58 ---------
.../MovableElasticWebAppClusterImpl.groovy | 127 -------------------
.../cloudfoundry/MovableEntityTrait.java | 21 ---
.../src/main/resources/logback.xml | 5 -
12 files changed, 4 insertions(+), 376 deletions(-)
----------------------------------------------------------------------
[45/50] brooklyn-library git commit: Added more sensors from the
`redis-cli info stats` command
Posted by he...@apache.org.
Added more sensors from the `redis-cli info stats` command
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/dc04ab27
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/dc04ab27
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/dc04ab27
Branch: refs/heads/0.5.0
Commit: dc04ab27150c392ee417af27134eb885269fb1e3
Parents: 657047f
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Tue Apr 23 00:34:33 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:45 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/RedisClusterImpl.java | 15 +++-
.../entity/nosql/redis/RedisShardImpl.java | 4 +-
.../entity/nosql/redis/RedisSlaveImpl.java | 4 +-
.../brooklyn/entity/nosql/redis/RedisStore.java | 8 +++
.../entity/nosql/redis/RedisStoreDriver.java | 3 +-
.../entity/nosql/redis/RedisStoreImpl.java | 73 +++++++++++++++-----
.../entity/nosql/redis/RedisStoreSshDriver.java | 2 +-
7 files changed, 81 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc04ab27/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
index 6a5e6ff..eda1614 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
@@ -23,13 +23,13 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
public RedisClusterImpl() {
this(MutableMap.of(), null);
}
- public RedisClusterImpl(Map properties) {
+ public RedisClusterImpl(Map<?, ?> properties) {
this(properties, null);
}
public RedisClusterImpl(Entity parent) {
this(MutableMap.of(), parent);
}
- public RedisClusterImpl(Map properties, Entity parent) {
+ public RedisClusterImpl(Map<?, ?> properties, Entity parent) {
super(properties, parent);
}
@@ -43,7 +43,7 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
.configure(DynamicCluster.MEMBER_SPEC, EntitySpecs.spec(RedisSlave.class).configure(RedisSlave.MASTER, master)));
slaves.start(locations);
- setAttribute(Startable.SERVICE_UP, true);
+ setAttribute(Startable.SERVICE_UP, calculateServiceUp());
}
@Override
@@ -58,4 +58,13 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
public void restart() {
throw new UnsupportedOperationException();
}
+
+ protected boolean calculateServiceUp() {
+ boolean up = false;
+ for (Entity member : slaves.getMembers()) {
+ if (Boolean.TRUE.equals(member.getAttribute(SERVICE_UP))) up = true;
+ }
+ return up;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc04ab27/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java
index 0eee09f..8b03903 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisShardImpl.java
@@ -10,13 +10,13 @@ public class RedisShardImpl extends AbstractEntity implements RedisShard {
public RedisShardImpl() {
this(MutableMap.of(), null);
}
- public RedisShardImpl(Map properties) {
+ public RedisShardImpl(Map<?, ?> properties) {
this(properties, null);
}
public RedisShardImpl(Entity parent) {
this(MutableMap.of(), parent);
}
- public RedisShardImpl(Map properties, Entity parent) {
+ public RedisShardImpl(Map<?, ?> properties, Entity parent) {
super(properties, parent);
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc04ab27/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
index c0718b9..e205fb2 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
@@ -15,13 +15,13 @@ public class RedisSlaveImpl extends RedisStoreImpl implements RedisSlave {
public RedisSlaveImpl() {
this(MutableMap.of(), null);
}
- public RedisSlaveImpl(Map properties) {
+ public RedisSlaveImpl(Map<?, ?> properties) {
this(properties, null);
}
public RedisSlaveImpl(Entity parent) {
this(MutableMap.of(), parent);
}
- public RedisSlaveImpl(Map properties, Entity parent) {
+ public RedisSlaveImpl(Map<?, ?> properties, Entity parent) {
super(properties, parent);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc04ab27/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
index 3717ffc..a972c5a 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
@@ -39,6 +39,14 @@ public interface RedisStore extends SoftwareProcess, DataStore {
AttributeSensor<Integer> UPTIME = new BasicAttributeSensor<Integer>(Integer.class, "redis.uptime", "Redis uptime in seconds");
+ // See http://redis.io/commands/info for details of all information available
+ AttributeSensor<Integer> TOTAL_CONNECTIONS_RECEIVED = new BasicAttributeSensor<Integer>(Integer.class, "redis.connections.received.total", "Total number of connections accepted by the server");
+ AttributeSensor<Integer> TOTAL_COMMANDS_PROCESSED = new BasicAttributeSensor<Integer>(Integer.class, "redis.commands.processed.total", "Total number of commands processed by the server");
+ AttributeSensor<Integer> EXPIRED_KEYS = new BasicAttributeSensor<Integer>(Integer.class, "redis.keys.expired", "Total number of key expiration events");
+ AttributeSensor<Integer> EVICTED_KEYS = new BasicAttributeSensor<Integer>(Integer.class, "redis.keys.evicted", "Number of evicted keys due to maxmemory limit");
+ AttributeSensor<Integer> KEYSPACE_HITS = new BasicAttributeSensor<Integer>(Integer.class, "redis.keyspace.hits", "Number of successful lookup of keys in the main dictionary");
+ AttributeSensor<Integer> KEYSPACE_MISSES = new BasicAttributeSensor<Integer>(Integer.class, "redis.keyspace.misses", "Number of failed lookup of keys in the main dictionary");
+
String getAddress();
Integer getRedisPort();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc04ab27/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreDriver.java
index c0d57b4..d8a1610 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreDriver.java
@@ -3,6 +3,7 @@ package brooklyn.entity.nosql.redis;
import brooklyn.entity.basic.SoftwareProcessDriver;
public interface RedisStoreDriver extends SoftwareProcessDriver {
-
+
String getRunDir();
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc04ab27/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
index ac8b5aa..a47c0ac 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
@@ -11,6 +11,7 @@ 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.event.feed.ssh.SshValueFunctions;
import brooklyn.location.Location;
import brooklyn.location.MachineLocation;
@@ -26,8 +27,6 @@ import com.google.common.collect.Iterables;
/**
* An entity that represents a Redis key-value store service.
- *
- * TODO add sensors with Redis statistics using INFO command
*/
public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
protected static final Logger LOG = LoggerFactory.getLogger(RedisStore.class);
@@ -37,16 +36,16 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
public RedisStoreImpl() {
this(MutableMap.of(), null);
}
- public RedisStoreImpl(Map properties) {
+ public RedisStoreImpl(Map<?, ?> properties) {
this(properties, null);
}
public RedisStoreImpl(Entity parent) {
this(MutableMap.of(), parent);
}
- public RedisStoreImpl(Map properties, Entity parent) {
+ public RedisStoreImpl(Map<?, ?> properties, Entity parent) {
super(properties, parent);
}
-
+
@Override
protected void connectSensors() {
super.connectSensors();
@@ -57,29 +56,65 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
Optional<Location> location = Iterables.tryFind(getLocations(), Predicates.instanceOf(SshMachineLocation.class));
if (!location.isPresent()) throw new IllegalStateException("Could not find SshMachineLocation in list of locations");
SshMachineLocation machine = (SshMachineLocation) location.get();
+ String statsCommand = getDriver().getRunDir() + "/bin/redis-cli info stats";
sshFeed = SshFeed.builder()
.entity(this)
.machine(machine)
.poll(new SshPollConfig<Integer>(UPTIME)
- .command(getDriver().getRunDir() + "/bin/redis-cli info")
+ .command(getDriver().getRunDir() + "/bin/redis-cli info server")
+ .onError(Functions.constant(-1))
+ .onSuccess(infoFunction("uptime_in_seconds")))
+ .poll(new SshPollConfig<Integer>(TOTAL_CONNECTIONS_RECEIVED)
+ .command(statsCommand)
+ .onError(Functions.constant(-1))
+ .onSuccess(infoFunction("total_connections_received")))
+ .poll(new SshPollConfig<Integer>(TOTAL_COMMANDS_PROCESSED)
+ .command(statsCommand)
+ .onError(Functions.constant(-1))
+ .onSuccess(infoFunction("total_commands_processed")))
+ .poll(new SshPollConfig<Integer>(EXPIRED_KEYS)
+ .command(statsCommand)
+ .onError(Functions.constant(-1))
+ .onSuccess(infoFunction("expired_keys")))
+ .poll(new SshPollConfig<Integer>(EVICTED_KEYS)
+ .command(statsCommand)
.onError(Functions.constant(-1))
- .onSuccess(Functions.compose(new Function<String, Integer>(){
- @Override
- public Integer apply(@Nullable String input) {
- Optional<String> line = Iterables.tryFind(Splitter.on('\n').split(input), Predicates.containsPattern("uptime_in_seconds:"));
- if (line.isPresent()) {
- String data = line.get().trim();
- int colon = data.indexOf(":");
- return Integer.parseInt(data.substring(colon + 1));
- } else {
- throw new IllegalStateException();
- }
- }
- }, SshValueFunctions.stdout())))
+ .onSuccess(infoFunction("evicted_keys")))
+ .poll(new SshPollConfig<Integer>(KEYSPACE_HITS)
+ .command(statsCommand)
+ .onError(Functions.constant(-1))
+ .onSuccess(infoFunction("keyspace_hits")))
+ .poll(new SshPollConfig<Integer>(KEYSPACE_MISSES)
+ .command(statsCommand)
+ .onError(Functions.constant(-1))
+ .onSuccess(infoFunction("keyspace_misses")))
.build();
}
+ /**
+ * Create a {@link Function} to retrieve a particular field value from a {@code redis-cli info}
+ * command.
+ *
+ * @param field the info field to retrieve and convert
+ * @return a new function that converts a {@link SshPollValue} to an {@link Integer}
+ */
+ private static Function<SshPollValue, Integer> infoFunction(final String field) {
+ return Functions.compose(new Function<String, Integer>() {
+ @Override
+ public Integer apply(@Nullable String input) {
+ Optional<String> line = Iterables.tryFind(Splitter.on('\n').split(input), Predicates.containsPattern(field + ":"));
+ if (line.isPresent()) {
+ String data = line.get().trim();
+ int colon = data.indexOf(":");
+ return Integer.parseInt(data.substring(colon + 1));
+ } else {
+ throw new IllegalStateException("Data for field "+field+" not found: "+input);
+ }
+ }
+ }, SshValueFunctions.stdout());
+ }
+
@Override
public void disconnectSensors() {
super.disconnectSensors();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/dc04ab27/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
index 9b17057..16dc0d9 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
@@ -71,7 +71,7 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
.body.append("./bin/redis-server redis.conf")
.execute();
}
-
+
@Override
public boolean isRunning() {
[34/50] brooklyn-library git commit: Removal of all Cloud Foundry
references in the code and in the poms
Posted by he...@apache.org.
Removal of all Cloud Foundry references in the code and in the poms
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/754897f6
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/754897f6
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/754897f6
Branch: refs/heads/0.5.0
Commit: 754897f674e1b65db9009b5fc354c5d15227b53d
Parents: 74e4016
Author: Peter Veentjer <al...@gmail.com>
Authored: Fri Apr 19 14:49:20 2013 +0300
Committer: Peter Veentjer <al...@gmail.com>
Committed: Fri Apr 19 14:49:20 2013 +0300
----------------------------------------------------------------------
.../brooklyn/demo/GlobalWebFabricExample.java | 13 +-
.../whirr/WebFabricWithHadoopExample.java | 19 +--
examples/pom.xml | 1 -
examples/portable-cloudfoundry/.gitignore | 2 -
examples/portable-cloudfoundry/README.txt | 14 --
examples/portable-cloudfoundry/pom.xml | 72 -----------
.../MovableCloudFoundryClusterExample.java | 37 ------
.../MovableElasticWebAppCluster.java | 58 ---------
.../MovableElasticWebAppClusterImpl.groovy | 127 -------------------
.../cloudfoundry/MovableEntityTrait.java | 21 ---
.../src/main/resources/logback.xml | 5 -
11 files changed, 3 insertions(+), 366 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
index 774affa..c6c92f9 100644
--- a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
+++ b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.java
@@ -10,15 +10,12 @@ import org.slf4j.LoggerFactory;
import brooklyn.config.StringConfigMap;
import brooklyn.entity.basic.AbstractApplication;
-import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.dns.geoscaling.GeoscalingDnsService;
import brooklyn.entity.group.DynamicFabric;
import brooklyn.entity.proxy.AbstractController;
import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.entity.webapp.ElasticJavaWebAppService;
-import brooklyn.event.basic.DependentConfiguration;
-import brooklyn.extras.cloudfoundry.CloudFoundryJavaWebAppCluster;
import brooklyn.launcher.BrooklynLauncher;
import brooklyn.location.basic.PortRanges;
import brooklyn.util.CommandLineUtil;
@@ -36,9 +33,7 @@ public class GlobalWebFabricExample extends AbstractApplication {
static final List<String> DEFAULT_LOCATIONS = ImmutableList.of(
"aws-ec2:eu-west-1",
"aws-ec2:ap-southeast-1",
- "aws-ec2:us-west-1"
-// "cloudfoundry:https://api.aws.af.cm/",
- );
+ "aws-ec2:us-west-1" );
@Override
public void init() {
@@ -59,11 +54,7 @@ public class GlobalWebFabricExample extends AbstractApplication {
.configure(ElasticJavaWebAppService.ROOT_WAR, WAR_PATH)
//load-balancer instances must run on 80 to work with GeoDNS (default is 8000)
- .configure(AbstractController.PROXY_HTTP_PORT, PortRanges.fromInteger(80))
-
- //CloudFoundry requires to be told what URL it should listen to, which is chosen by the GeoDNS service
- .configure(CloudFoundryJavaWebAppCluster.HOSTNAME_TO_USE_FOR_URL,
- DependentConfiguration.attributeWhenReady(geoDns, Attributes.HOSTNAME)));
+ .configure(AbstractController.PROXY_HTTP_PORT, PortRanges.fromInteger(80)));
//tell GeoDNS what to monitor
geoDns.setTargetEntityProvider(webFabric);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/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 11916a1..ab3e052 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
@@ -3,7 +3,6 @@ package brooklyn.extras.whirr;
import static com.google.common.base.Preconditions.checkNotNull;
import java.io.File;
-import java.io.IOException;
import java.io.StringReader;
import java.net.InetAddress;
import java.net.URI;
@@ -11,11 +10,6 @@ import java.util.Collection;
import java.util.List;
import java.util.Set;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.util.EntityUtils;
import org.apache.whirr.service.hadoop.HadoopCluster;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,7 +18,6 @@ import brooklyn.config.StringConfigMap;
import brooklyn.entity.Entity;
import brooklyn.entity.Group;
import brooklyn.entity.basic.AbstractApplication;
-import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.DynamicGroup;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.StartableApplication;
@@ -37,10 +30,8 @@ import brooklyn.entity.webapp.ElasticJavaWebAppService;
import brooklyn.entity.webapp.jboss.JBoss7Server;
import brooklyn.event.SensorEvent;
import brooklyn.event.SensorEventListener;
-import brooklyn.event.basic.DependentConfiguration;
import brooklyn.event.feed.http.HttpPollValue;
import brooklyn.event.feed.http.HttpPolls;
-import brooklyn.extras.cloudfoundry.CloudFoundryJavaWebAppCluster;
import brooklyn.extras.whirr.hadoop.WhirrHadoopCluster;
import brooklyn.launcher.BrooklynLauncher;
import brooklyn.location.Location;
@@ -75,12 +66,7 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
//web locations
"aws-ec2:eu-west-1",
"aws-ec2:ap-southeast-1",
- "aws-ec2:us-west-1"
-
- // cloudfoundry seems to have a timeout in upload time
- // (in any case we don't have a clean way to initiate the proxy settings in there)
-// "cloudfoundry:https://api.aws.af.cm/",
- );
+ "aws-ec2:us-west-1");
public static final String WAR_PATH = "classpath://hello-world-hadoop-webapp.war";
@@ -119,9 +105,6 @@ public class WebFabricWithHadoopExample extends AbstractApplication implements S
.configure(ElasticJavaWebAppService.ROOT_WAR, WAR_PATH)
//load-balancer instances must run on 80 to work with GeoDNS (default is 8000)
.configure(AbstractController.PROXY_HTTP_PORT, PortRanges.fromInteger(80))
- //CloudFoundry requires to be told what URL it should listen to, which is chosen by the GeoDNS service
- .configure(CloudFoundryJavaWebAppCluster.HOSTNAME_TO_USE_FOR_URL,
- DependentConfiguration.attributeWhenReady(geoDns, Attributes.HOSTNAME))
);
// .policy(AutoScalerPolicy.builder()
// .metric(DynamicWebAppCluster.AVERAGE_REQUESTS_PER_SECOND)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index 3048876..bb82c5f 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -35,7 +35,6 @@
<module>simple-web-cluster</module>
<module>global-web-fabric</module>
<module>hadoop-and-whirr</module>
- <module>portable-cloudfoundry</module>
<module>simple-messaging-pubsub</module>
<module>simple-nosql-cluster</module>
</modules>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/.gitignore
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/.gitignore b/examples/portable-cloudfoundry/.gitignore
deleted file mode 100644
index 20738a7..0000000
--- a/examples/portable-cloudfoundry/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-brooklyn-example-portable-cloudfoundry/
-brooklyn-example-portable-cloudfoundry.tar.gz
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/README.txt
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/README.txt b/examples/portable-cloudfoundry/README.txt
deleted file mode 100644
index f2d49f0..0000000
--- a/examples/portable-cloudfoundry/README.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Instructions for running examples
-=================================
-
-The commands below assume that the `brooklyn` script is already on your $PATH, and you are in the "examples" directory:
-
- cd portable-cloudfoundry
- export BROOKLYN_CLASSPATH=$(pwd)/target/classes
-
- # Launches a web-app in VMware's cloudfoundry
- brooklyn launch --app brooklyn.example.cloudfoundry.MovableCloudFoundryClusterExample --location localhost
-
----
-
-For more information, please visit: http://brooklyncentral.github.com/use/examples/portable-cloudfoundry/
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/pom.xml
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/pom.xml b/examples/portable-cloudfoundry/pom.xml
deleted file mode 100644
index 1dde430..0000000
--- a/examples/portable-cloudfoundry/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <packaging>jar</packaging>
- <artifactId>brooklyn-example-portable-cloudfoundry</artifactId>
- <name>Brooklyn Portable CloudFoundry Example</name>
-
- <parent>
- <groupId>io.brooklyn.example</groupId>
- <artifactId>brooklyn-examples-parent</artifactId>
- <version>0.5.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <dependencies>
- <dependency>
- <groupId>io.brooklyn</groupId>
- <artifactId>brooklyn-all</artifactId>
- <version>${project.version}</version>
- <classifier>with-dependencies</classifier>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <!-- copy the WAR so it is available on the classpath for programmatic deployment -->
- <executions>
- <execution>
- <id>copy</id>
- <phase>process-classes</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- <configuration>
- <artifactItems>
- <artifactItem>
- <!-- this can fail in eclipse trying to copy _from_ target/classes.
- see http://jira.codehaus.org/browse/MDEP-259 -->
- <groupId>${project.groupId}</groupId>
- <artifactId>brooklyn-example-hello-world-webapp</artifactId>
- <version>${project.version}</version>
- <type>war</type>
- <overWrite>true</overWrite>
- <outputDirectory>target/classes</outputDirectory>
- <destFileName>hello-world-webapp.war</destFileName>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <artifactId>maven-clean-plugin</artifactId>
- <configuration>
- <filesets>
- <fileset>
- <directory>${project.basedir}</directory>
- <includes>
- <include>${project.artifactId}/</include>
- <include>brooklyn*.log</include>
- <include>brooklyn*.log.*</include>
- <include>stacktrace.log</include>
- </includes>
- </fileset>
- </filesets>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
-</project>
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
deleted file mode 100644
index 3b30d1e..0000000
--- a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableCloudFoundryClusterExample.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package brooklyn.example.cloudfoundry;
-
-import java.util.List;
-
-import brooklyn.entity.basic.AbstractApplication;
-import brooklyn.entity.basic.Entities;
-import brooklyn.entity.proxying.EntitySpecs;
-import brooklyn.launcher.BrooklynLauncher;
-import brooklyn.util.CommandLineUtil;
-
-import com.google.common.collect.Lists;
-
-public class MovableCloudFoundryClusterExample extends AbstractApplication {
-
- public static final String DEFAULT_LOCATION = "cloudfoundry";
- public static final String WAR_FILE_URL = "classpath://hello-world-webapp.war";
-
- @Override
- public void init() {
- addChild(EntitySpecs.spec(MovableElasticWebAppCluster.class)
- .configure("war", WAR_FILE_URL));
- }
-
- public static void main(String[] argv) {
- List<String> args = Lists.newArrayList(argv);
- String port = CommandLineUtil.getCommandLineOption(args, "--port", "8081+");
- String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
-
- BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(EntitySpecs.appSpec(MovableCloudFoundryClusterExample.class).displayName("Movable Web Cluster"))
- .webconsolePort(port)
- .location(location)
- .start();
-
- Entities.dumpInfo(launcher.getApplications());
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java
deleted file mode 100644
index 95d74fa..0000000
--- a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppCluster.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package brooklyn.example.cloudfoundry;
-
-import java.util.Collection;
-
-import brooklyn.config.ConfigKey;
-import brooklyn.entity.Effector;
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.Description;
-import brooklyn.entity.basic.MethodEffector;
-import brooklyn.entity.basic.NamedParameter;
-import brooklyn.entity.proxying.ImplementedBy;
-import brooklyn.entity.trait.Startable;
-import brooklyn.entity.webapp.JavaWebAppService;
-import brooklyn.event.basic.BasicAttributeSensor;
-import brooklyn.event.basic.BasicConfigKey;
-import brooklyn.util.flags.SetFromFlag;
-
-@ImplementedBy(MovableElasticWebAppClusterImpl.class)
-public interface MovableElasticWebAppCluster extends Entity, Startable, MovableEntityTrait {
-
- // this advertises that this config key is easily available on this entity,
- // either by passing (war: "classpath://...") in the constructor or by setConfig(ROOT_WAR).
- // as a config variable, it will be inherited by children, so the children web app entities will pick it up.
- @SetFromFlag("war")
- public static final ConfigKey<String> ROOT_WAR = JavaWebAppService.ROOT_WAR;
-
- @SetFromFlag("ttl")
- public static final BasicConfigKey<Long> TIME_TO_LIVE_SECONDS = new BasicConfigKey<Long>(
- Long.class, "movable.time.to.live", "Time to keep demoted cluster alive (should exceed GeoDNS TTL; default 0)", 0L);
-
- public static final BasicAttributeSensor<String> PRIMARY_SVC_ENTITY_ID = new BasicAttributeSensor<String>(
- String.class, "movable.primary.id", "Entity ID of primary web-app service");
-
- public static final BasicAttributeSensor<Collection<String>> SECONDARY_SVC_ENTITY_IDS = new BasicAttributeSensor(
- Collection.class, "movable.secondary.ids", "Entity IDs of secondary web-app services");
-
- public static final Effector<String> CREATE_SECONDARY_IN_LOCATION = new MethodEffector<String>(MovableElasticWebAppCluster.class, "createSecondaryInLocation");
- public static final Effector<String> PROMOTE_SECONDARY = new MethodEffector<String>(MovableElasticWebAppCluster.class, "promoteSecondary");
- public static final Effector<String> DESTROY_SECONDARY = new MethodEffector<String>(MovableElasticWebAppCluster.class, "destroySecondary");
-
- /** creates a new secondary instance, in the given location, returning the ID of the secondary created and started */
- @Description("create a new secondary instance in the given location")
- public String createSecondaryInLocation(
- @NamedParameter("location") @Description("the location where to start the secondary") String l);
-
- /** promotes the indicated secondary,
- * returning the ID of the former-primary which has been demoted */
- @Description("promote the indicated secondary to primary (demoting the existing primary)")
- public String promoteSecondary(
- @NamedParameter("idOfSecondaryToPromote") @Description("ID of secondary entity to promote")
- String idOfSecondaryToPromote);
-
- /** destroys the indicated secondary */
- @Description("destroy the indicated secondary")
- public void destroySecondary(
- @NamedParameter("idOfSecondaryToDestroy") @Description("ID of secondary entity to destroy")
- String idOfSecondaryToDestroy);
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppClusterImpl.groovy
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppClusterImpl.groovy b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppClusterImpl.groovy
deleted file mode 100644
index 599f0b8..0000000
--- a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableElasticWebAppClusterImpl.groovy
+++ /dev/null
@@ -1,127 +0,0 @@
-package brooklyn.example.cloudfoundry
-
-import org.jclouds.cloudstack.options.AddClusterOptions;
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-
-import brooklyn.entity.Effector
-import brooklyn.entity.Entity
-import brooklyn.entity.basic.AbstractEntity
-import brooklyn.entity.basic.ApplicationBuilder;
-import brooklyn.entity.basic.Entities
-import brooklyn.entity.basic.EntityLocal
-import brooklyn.entity.trait.Startable
-import brooklyn.entity.trait.StartableMethods
-import brooklyn.entity.webapp.ElasticJavaWebAppService
-import brooklyn.location.Location
-import brooklyn.location.basic.LocationRegistry
-import brooklyn.management.EntityManager
-import brooklyn.util.task.Tasks
-
-import com.google.common.collect.Iterables
-
-public class MovableElasticWebAppClusterImpl extends AbstractEntity implements MovableElasticWebAppCluster {
-
- public static final Logger log = LoggerFactory.getLogger(MovableElasticWebAppClusterImpl.class);
-
- public MovableElasticWebAppClusterImpl() {
- }
-
- /**
- * @deprecated since 0.5; use {@link EntityManager#createEntity(EntitySpec) or {@link ApplicationBuilder#addChild(EntitySpec)}
- */
- @Deprecated
- public MovableElasticWebAppClusterImpl(Map flags, Entity parent) {
- super(flags, parent);
- }
-
- @Override
- public void start(Collection<? extends Location> locations) {
- if (!getChildren().isEmpty()) {
- log.debug("Starting $this; it already has children, so start on children is being invoked")
- StartableMethods.start(this, locations);
- } else {
- Entity svc = createClusterIn( Iterables.getOnlyElement(locations) );
- log.debug("Starting $this; no children, so created $svc and now starting it")
- if (svc in Startable) ((Startable)svc).start(locations);
- setAttribute(PRIMARY_SVC_ENTITY_ID, svc.id)
- }
- }
-
- public EntityLocal createClusterIn(Location location) {
- //TODO the policy
-// app.web.cluster.addPolicy(app.policy)
- EntityLocal result = new ElasticJavaWebAppService.Factory()
- .newFactoryForLocation(location)
- .newEntity([:], this);
- Entities.manage(result);
- return result;
- }
-
- @Override
- public void stop() {
- StartableMethods.stop(this);
- }
-
- @Override
- public void restart() {
- StartableMethods.restart(this);
- }
-
- /*
- * "move" consists of creating a secondary (call it Y),
- * promoting this one (Y) swapping it for the old-primary (call it X),
- * then destroying the old-primary-now-secondary (X)
- */
-
- @Override
- public String createSecondaryInLocation(String l) {
- Location location = new LocationRegistry().resolve(l);
- Entity svc = createClusterIn(location);
- Entities.start(svc, [location]);
- setAttribute(SECONDARY_SVC_ENTITY_IDS, (getAttribute(SECONDARY_SVC_ENTITY_IDS) ?: []) + svc.id);
- return svc.id;
- }
-
- @Override
- public String promoteSecondary(String idOfSecondaryToPromote) {
- Collection<String> currentSecondaryIds = getAttribute(SECONDARY_SVC_ENTITY_IDS)
- if (!currentSecondaryIds.contains(idOfSecondaryToPromote))
- throw new IllegalStateException("Cannot promote unknown secondary $idOfSecondaryToPromote "+
- "(available secondaries are $currentSecondaryIds)");
-
- String primaryId = getAttribute(PRIMARY_SVC_ENTITY_ID);
-
- setAttribute(PRIMARY_SVC_ENTITY_ID, idOfSecondaryToPromote);
- currentSecondaryIds.remove(idOfSecondaryToPromote);
- currentSecondaryIds << primaryId;
- setAttribute(SECONDARY_SVC_ENTITY_IDS, currentSecondaryIds);
- return primaryId;
- }
-
- @Override
- public void destroySecondary(String idOfSecondaryToDestroy) {
- Collection<String> currentSecondaryIds = getAttribute(SECONDARY_SVC_ENTITY_IDS)
- if (!currentSecondaryIds.contains(idOfSecondaryToDestroy))
- throw new IllegalStateException("Cannot promote unknown secondary $idOfSecondaryToDestroy "+
- "(available secondaries are $currentSecondaryIds)");
-
- currentSecondaryIds.remove(idOfSecondaryToDestroy);
- setAttribute(SECONDARY_SVC_ENTITY_IDS, currentSecondaryIds);
-
- Entity secondary = getEntityManager().getEntity(idOfSecondaryToDestroy);
- Entities.destroy(secondary);
- }
-
- @Override
- public String move(String location) {
- String newPrimary = createSecondaryInLocation(location);
- String oldPrimary = promoteSecondary(newPrimary);
- long ttl = getConfig(TIME_TO_LIVE_SECONDS);
- if (ttl>0)
- Tasks.withBlockingDetails("waiting for TTL to destroy old primary") { Thread.sleep(ttl*1000); }
- destroySecondary(oldPrimary);
- return newPrimary;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableEntityTrait.java
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableEntityTrait.java b/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableEntityTrait.java
deleted file mode 100644
index 5f5afe2..0000000
--- a/examples/portable-cloudfoundry/src/main/java/brooklyn/example/cloudfoundry/MovableEntityTrait.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package brooklyn.example.cloudfoundry;
-
-import brooklyn.entity.Effector;
-import brooklyn.entity.basic.Description;
-import brooklyn.entity.basic.MethodEffector;
-import brooklyn.entity.basic.NamedParameter;
-
-public interface MovableEntityTrait {
-
- Effector<String> MOVE = new MethodEffector<String>(MovableEntityTrait.class, "move");
-
- /** Effectively move the entity to the new location.
- * A new entity may be created (and the old destroyed) to effect this.
- * @param location the new location where the entity should running
- * @return the entity ID of the primary entity (after the move) in the specified location */
- @Description("Effectively move the entity to the new location.")
- public String move(
- @NamedParameter("location") @Description("The new location where the entity should be running")
- String location);
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/754897f6/examples/portable-cloudfoundry/src/main/resources/logback.xml
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/src/main/resources/logback.xml b/examples/portable-cloudfoundry/src/main/resources/logback.xml
deleted file mode 100644
index 25f3755..0000000
--- a/examples/portable-cloudfoundry/src/main/resources/logback.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<configuration>
-
- <include resource="brooklyn/logback-default.xml"/>
-
-</configuration>
[17/50] brooklyn-library git commit: Add jemalloc library to
installed packages for Redis
Posted by he...@apache.org.
Add jemalloc library to installed packages for Redis
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/49d15bb5
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/49d15bb5
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/49d15bb5
Branch: refs/heads/0.5.0
Commit: 49d15bb588fab02f0794f00c3a01434502457fad
Parents: 32a6eba
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Wed Apr 10 15:27:39 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 10 15:28:33 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/RedisStoreSshDriver.java | 17 +----------------
1 file changed, 1 insertion(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/49d15bb5/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
index b3b4b23..6efccdb 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
@@ -45,25 +45,10 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
String saveAs = resolver.getFilename();
expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("redis-%s", getVersion()));
- /*
- * FIXME On jenkins releng3 box, needed to explicitly install jemalloc:
- * wget http://www.canonware.com/download/jemalloc/jemalloc-3.3.0.tar.bz2
- * tar -xvjpf jemalloc-3.3.0.tar.bz2
- * cd jemalloc-3.3.0
- * ./configure
- * make
- * sudo make install
- * cd ..
- *
- * cd redis-2.6.7
- * make distclean
- * cd deps; make hiredis lua jemalloc linenoise; cd ..
- * "make LDFLAGS="-all-static"
- */
-
List<String> commands = ImmutableList.<String>builder()
.addAll(CommonCommands.downloadUrlAs(urls, saveAs))
.add(CommonCommands.INSTALL_TAR)
+ .add(CommonCommands.installPackage(MutableMap.of("apt", "libjemalloc-dev", "yum", "jemalloc-devel", "port", null, "brew", null), null))
.add("tar xzfv " + saveAs)
.add(format("cd redis-%s", getVersion()))
.add("make distclean")
[10/50] brooklyn-library git commit: Override
AbstractApplication.init()
Posted by he...@apache.org.
Override AbstractApplication.init()
- AbstractApplication.init() logs warning that the method will be
most likely be deprecated in a future release.
- Override init() in sub-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/23a5c988
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/23a5c988
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/23a5c988
Branch: refs/heads/0.5.0
Commit: 23a5c988559482705aaacc795eb7e325cabea19c
Parents: 3c0588c
Author: Aled Sage <al...@gmail.com>
Authored: Thu Mar 28 14:52:48 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Mar 29 09:37:57 2013 +0000
----------------------------------------------------------------------
.../main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java | 4 ----
.../java/brooklyn/web/console/test/TestApplication.groovy | 5 +++++
.../src/test/java/brooklyn/entity/webapp/JBossExample.groovy | 7 ++++++-
3 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/23a5c988/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 898a410..df88bb9 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
@@ -17,7 +17,6 @@ import brooklyn.enricher.basic.SensorPropagatingEnricher;
import brooklyn.enricher.basic.SensorTransformingEnricher;
import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.Entities;
-import brooklyn.entity.basic.EntityLocal;
import brooklyn.entity.basic.StartableApplication;
import brooklyn.entity.database.mysql.MySqlNode;
import brooklyn.entity.group.DynamicCluster;
@@ -35,7 +34,6 @@ import brooklyn.launcher.BrooklynLauncher;
import brooklyn.location.basic.PortRanges;
import brooklyn.policy.autoscaling.AutoScalerPolicy;
import brooklyn.util.CommandLineUtil;
-import brooklyn.util.text.StringFunctions;
import com.google.common.base.Functions;
import com.google.common.collect.Lists;
@@ -91,8 +89,6 @@ public class WebClusterDatabaseExampleApp extends AbstractApplication implements
@Override
public void init() {
- super.init();
-
MySqlNode mysql = addChild(
EntitySpecs.spec(MySqlNode.class)
.configure(MySqlNode.CREATION_SCRIPT_URL, getConfig(DB_SETUP_SQL_URL)));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/23a5c988/sandbox/web-acceptance/src/test/java/brooklyn/web/console/test/TestApplication.groovy
----------------------------------------------------------------------
diff --git a/sandbox/web-acceptance/src/test/java/brooklyn/web/console/test/TestApplication.groovy b/sandbox/web-acceptance/src/test/java/brooklyn/web/console/test/TestApplication.groovy
index 08285ff..046756b 100644
--- a/sandbox/web-acceptance/src/test/java/brooklyn/web/console/test/TestApplication.groovy
+++ b/sandbox/web-acceptance/src/test/java/brooklyn/web/console/test/TestApplication.groovy
@@ -60,6 +60,11 @@ class TestApplication extends AbstractApplication {
setAttribute(CHILDREN, getChildren().size())
}
+ @Override
+ public void init() {
+ // no-op
+ }
+
public <T> Task<T> invoke(Effector<T> eff, Map<String, ?> parameters) {
return null //To change body of implemented methods use File | Settings | File Templates.
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/23a5c988/software/webapp/src/test/java/brooklyn/entity/webapp/JBossExample.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/JBossExample.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/JBossExample.groovy
index 2b4dc4e..253463c 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/JBossExample.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/JBossExample.groovy
@@ -14,8 +14,13 @@ import brooklyn.location.basic.LocalhostMachineProvisioningLocation
@Deprecated
class JBossExample extends AbstractApplication {
- JBoss7Server s = new JBoss7ServerImpl(this, httpPort: "8080+", war:"classpath://hello-world.war");
+ JBoss7Server s;
+ @Override
+ public void init() {
+ s = new JBoss7ServerImpl(this, httpPort: "8080+", war:"classpath://hello-world.war");
+ }
+
public static void main(String[] args) {
def ex = new JBossExample();
ex.start( [ new LocalhostMachineProvisioningLocation(name:'london') ] )
[19/50] brooklyn-library git commit: Merge pull request #659 from
aledsage/cherrypick/AbstractController-memento-fix
Posted by he...@apache.org.
Merge pull request #659 from aledsage/cherrypick/AbstractController-memento-fix
Fix memento/rebind of AbstractController (0.5)
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/74e40168
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/74e40168
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/74e40168
Branch: refs/heads/0.5.0
Commit: 74e401681d544ff942b7bfc151c03c0b2c37c586
Parents: 227e33d 4181d27
Author: Peter Veentjer <al...@gmail.com>
Authored: Wed Apr 10 23:56:19 2013 -0700
Committer: Peter Veentjer <al...@gmail.com>
Committed: Wed Apr 10 23:56:19 2013 -0700
----------------------------------------------------------------------
.../main/java/brooklyn/entity/proxy/AbstractControllerImpl.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
[15/50] brooklyn-library git commit: Fix memento/rebind of
AbstractController
Posted by he...@apache.org.
Fix memento/rebind of AbstractController
- serverPoolTargets has entities as keys, so needed to fix
MementoTransformer.transformIdsToEntities so it converted
keys and values correctly.
- Can revisit this in the future for instead using serialised
form of an entity-ref, rather than just String perhaps.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/4181d279
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/4181d279
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/4181d279
Branch: refs/heads/0.5.0
Commit: 4181d279daa424b5fb873518aa8717f2274c78b7
Parents: 32a6eba
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 10 13:01:17 2013 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Apr 10 14:34:36 2013 +0100
----------------------------------------------------------------------
.../main/java/brooklyn/entity/proxy/AbstractControllerImpl.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4181d279/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 86f80ab..4585013 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -33,6 +33,7 @@ import com.google.common.base.Function;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.net.HostAndPort;
+import com.google.common.reflect.TypeToken;
/**
* Represents a controller mechanism for a {@link Cluster}.
@@ -359,7 +360,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
// TODO If pool-target entity couldn't be resolved, then serverPoolAddresses and serverPoolTargets
// will be out-of-sync (for ever more?)
serverPoolAddresses.addAll((Collection<String>) memento.getCustomField("serverPoolAddresses"));
- serverPoolTargets.putAll(MementoTransformer.transformIdsToEntities(rebindContext, memento.getCustomField("serverPoolTargets"), Map.class, true));
+ serverPoolTargets.putAll(MementoTransformer.transformIdsToEntities(rebindContext, memento.getCustomField("serverPoolTargets"), new TypeToken<Map<Entity,String>>() {}, true));
}
};
}
[06/50] brooklyn-library git commit: Merge pull request #629 from
aledsage/fix/groovy-to-java
Posted by he...@apache.org.
Merge pull request #629 from aledsage/fix/groovy-to-java
convert groovy to 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/ca73363f
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/ca73363f
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/ca73363f
Branch: refs/heads/0.5.0
Commit: ca73363f60e8fd72b0e4312fed81e50a4a1aa596
Parents: 3d9e3cc 09491e0
Author: Aled Sage <al...@gmail.com>
Authored: Wed Mar 27 05:16:56 2013 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Mar 27 05:16:56 2013 -0700
----------------------------------------------------------------------
.../MovableElasticWebAppCluster.java | 3 +-
.../java/brooklyn/entity/messaging/Topic.groovy | 28 --
.../java/brooklyn/entity/messaging/Topic.java | 28 ++
.../entity/messaging/amqp/AmqpExchange.groovy | 23 --
.../entity/messaging/amqp/AmqpExchange.java | 24 ++
.../entity/messaging/amqp/AmqpServer.groovy | 34 ---
.../entity/messaging/amqp/AmqpServer.java | 34 +++
.../entity/dns/AbstractGeoDnsService.java | 12 +-
.../entity/dns/AbstractGeoDnsServiceImpl.groovy | 237 -----------------
.../entity/dns/AbstractGeoDnsServiceImpl.java | 253 +++++++++++++++++++
.../geoscaling/GeoscalingDnsServiceImpl.groovy | 150 -----------
.../geoscaling/GeoscalingDnsServiceImpl.java | 168 ++++++++++++
.../brooklyn/entity/proxy/ProxySslConfig.groovy | 78 ------
.../brooklyn/entity/proxy/ProxySslConfig.java | 128 ++++++++++
.../webapp/DynamicWebAppClusterImpl.groovy | 78 ------
.../entity/webapp/DynamicWebAppClusterImpl.java | 107 ++++++++
.../entity/webapp/JavaWebAppService.groovy | 19 --
.../entity/webapp/JavaWebAppService.java | 24 ++
18 files changed, 774 insertions(+), 654 deletions(-)
----------------------------------------------------------------------
[14/50] brooklyn-library git commit: Deletes
ApplicationBuilder.Builder
Posted by he...@apache.org.
Deletes ApplicationBuilder.Builder
- Removes the Builder
- Adds ApplicationBuilder.newManagedApp(...) for use
by 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/576b649c
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/576b649c
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/576b649c
Branch: refs/heads/0.5.0
Commit: 576b649cdea5dc5d26edbe6759da1aea47d0d753
Parents: 8990ab7
Author: Aled Sage <al...@gmail.com>
Authored: Thu Mar 28 16:12:39 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Apr 1 12:41:41 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/database/mysql/MySqlIntegrationTest.groovy | 2 +-
.../entity/database/postgresql/PostgreSqlIntegrationTest.groovy | 2 +-
.../brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java | 2 +-
.../entity/messaging/activemq/ActiveMQIntegrationTest.groovy | 2 +-
.../java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.groovy | 2 +-
.../brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy | 2 +-
.../brooklyn/entity/nosql/cassandra/AbstractCassandraNodeTest.java | 2 +-
.../brooklyn/entity/nosql/cassandra/CassandraClusterLiveTest.java | 2 +-
.../brooklyn/entity/nosql/couchdb/AbstractCouchDBNodeTest.java | 2 +-
.../java/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java | 2 +-
.../src/test/java/brooklyn/entity/nosql/mongodb/MongoDbTest.java | 2 +-
.../test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy | 2 +-
.../test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy | 2 +-
.../entity/dns/geoscaling/GeoscalingIntegrationTest.groovy | 2 +-
.../webapp/src/test/java/brooklyn/entity/proxy/UrlMappingTest.java | 2 +-
.../brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java | 2 +-
.../entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy | 2 +-
.../java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy | 2 +-
.../brooklyn/entity/proxy/nginx/NginxLightIntegrationTest.java | 2 +-
.../brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java | 2 +-
.../entity/proxy/nginx/NginxUrlMappingIntegrationTest.groovy | 2 +-
.../brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.groovy | 2 +-
.../brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java | 2 +-
.../java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy | 2 +-
.../test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java | 2 +-
.../webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java | 2 +-
.../brooklyn/entity/webapp/jboss/Jboss7ServerIntegrationTest.java | 2 +-
.../entity/webapp/jboss/Jboss7ServerRebindIntegrationTest.java | 2 +-
.../brooklyn/entity/webapp/tomcat/TomcatServerIntegrationTest.java | 2 +-
29 files changed, 29 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.groovy b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.groovy
index e3d8f2d..30829c9 100644
--- a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.groovy
+++ b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.groovy
@@ -28,7 +28,7 @@ public class MySqlIntegrationTest {
@BeforeMethod(alwaysRun = true)
public void before() {
- tapp = ApplicationBuilder.builder(TestApplication.class).manage();
+ tapp = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.groovy b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.groovy
index 2f5ed6b..2fc9949 100644
--- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.groovy
+++ b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.groovy
@@ -25,7 +25,7 @@ public class PostgreSqlIntegrationTest {
@BeforeMethod(alwaysRun = true)
public void before() {
- tapp = ApplicationBuilder.builder(TestApplication.class).manage();
+ tapp = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun = true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java
index 71d90bc..8e8e305 100644
--- a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java
+++ b/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java
@@ -31,7 +31,7 @@ public class RubyRepIntegrationTest {
@BeforeMethod(alwaysRun = true)
public void setUp() {
- tapp = ApplicationBuilder.builder(TestApplication.class).manage();
+ tapp = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun = true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
index d41b9c0..f50de0c 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.groovy
@@ -43,7 +43,7 @@ public class ActiveMQIntegrationTest {
@BeforeMethod(groups = "Integration")
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = new LocalhostMachineProvisioningLocation()
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.groovy
index a4ea657..55e6673 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.groovy
@@ -45,7 +45,7 @@ public class QpidIntegrationTest {
public void setup() {
String workingDir = System.getProperty("user.dir");
println workingDir
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = new LocalhostMachineProvisioningLocation()
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
index b41a82a..94aeb0f 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.groovy
@@ -54,7 +54,7 @@ public class RabbitIntegrationTest {
@BeforeMethod(groups = "Integration")
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = new LocalhostMachineProvisioningLocation()
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/AbstractCassandraNodeTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/AbstractCassandraNodeTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/AbstractCassandraNodeTest.java
index 1e6b12f..0d9adc9 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/AbstractCassandraNodeTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/AbstractCassandraNodeTest.java
@@ -32,7 +32,7 @@ public class AbstractCassandraNodeTest {
@BeforeMethod(alwaysRun = true)
public void setup() throws Exception {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = new LocalhostMachineProvisioningLocation();
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/CassandraClusterLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/CassandraClusterLiveTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/CassandraClusterLiveTest.java
index c0f9f85..22fbc51 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/CassandraClusterLiveTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/cassandra/CassandraClusterLiveTest.java
@@ -46,7 +46,7 @@ class CassandraClusterLiveTest {
@BeforeMethod(alwaysRun = true)
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = app.getManagementContext().getLocationRegistry().resolve(provider);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/AbstractCouchDBNodeTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/AbstractCouchDBNodeTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/AbstractCouchDBNodeTest.java
index 7c14ba1..4509881 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/AbstractCouchDBNodeTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/couchdb/AbstractCouchDBNodeTest.java
@@ -44,7 +44,7 @@ public class AbstractCouchDBNodeTest {
@BeforeMethod(alwaysRun = true)
public void setup() throws Exception {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = new LocalhostMachineProvisioningLocation();
// testLocation = app.managementContext.locationRegistry.resolve("named:test");
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/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 ce6d694..eee4caa 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
@@ -58,7 +58,7 @@ class CouchDBClusterLiveTest {
@BeforeMethod(alwaysRun = true)
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
testLocation = app.getManagementContext().getLocationRegistry().resolve(provider);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/nosql/src/test/java/brooklyn/entity/nosql/mongodb/MongoDbTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/mongodb/MongoDbTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/mongodb/MongoDbTest.java
index 4d2a4c0..3ab7aaf 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/mongodb/MongoDbTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/mongodb/MongoDbTest.java
@@ -35,7 +35,7 @@ public class MongoDbTest {
@BeforeMethod(alwaysRun=true)
public void setUp() throws Exception {
localhostProvisioningLocation = new LocalhostMachineProvisioningLocation();
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
----------------------------------------------------------------------
diff --git a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
index a30e699..e06440c 100644
--- a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
+++ b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.groovy
@@ -29,7 +29,7 @@ public class KarafContainerTest {
@BeforeMethod(alwaysRun=true)
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy
index f71322e..bba6b3b 100644
--- a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.groovy
@@ -63,7 +63,7 @@ public class AbstractGeoDnsServiceTest {
@BeforeMethod(alwaysRun=true)
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
fabric = app.createAndManageChild(EntitySpecs.spec(DynamicFabric.class)
.configure("factory", { properties -> new TestEntityImpl(properties) }));
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy
index 750db2e..bae975f 100644
--- a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.groovy
@@ -36,7 +36,7 @@ class GeoscalingIntegrationTest {
@Test(groups=["Integration"])
public void testRoutesToExpectedLocation() {
- TestApplication app = ApplicationBuilder.builder(TestApplication.class).manage();
+ TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class);
TestEntity target = app.createAndManageChild(EntitySpecs.spec(TestEntity.class));
target.setAttribute(Attributes.HOSTNAME,addr.getHostName())
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/UrlMappingTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/UrlMappingTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/UrlMappingTest.java
index ef856fd..85ed58d 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/UrlMappingTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/UrlMappingTest.java
@@ -49,7 +49,7 @@ public class UrlMappingTest {
mementoDir = Files.createTempDir();
managementContext = RebindTestUtils.newPersistingManagementContext(mementoDir, classLoader);
- app = ApplicationBuilder.builder(TestApplication.class).manage(managementContext);
+ app = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext);
EntityFactory<StubAppServer> serverFactory = new BasicConfigurableEntityFactory<StubAppServer>(StubAppServer.class);
cluster = app.createAndManageChild(EntitySpecs.spec(DynamicCluster.class)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
index 17c0aa8..bad05f2 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
@@ -62,7 +62,7 @@ public class NginxClusterIntegrationTest {
war = checkNotNull(getClass().getClassLoader().getResource("hello-world.war"), "hello-world.war not on classpath");
localhostProvisioningLoc = new LocalhostMachineProvisioningLocation(MutableMap.of("address", "localhost"));
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
urlMappings = app.createAndManageChild(EntitySpecs.spec(BasicGroup.class)
.configure("childrenAsMembers", true));
entityManager = app.getManagementContext().getEntityManager();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
index cd6d5a2..0265f52 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
@@ -42,7 +42,7 @@ public class NginxHttpsSslIntegrationTest {
@BeforeMethod(alwaysRun=true)
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
index 4ea4fe0..282b7dc 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
@@ -39,7 +39,7 @@ public class NginxIntegrationTest {
@BeforeMethod(alwaysRun=true)
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxLightIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxLightIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxLightIntegrationTest.java
index 2916205..5b87e12 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxLightIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxLightIntegrationTest.java
@@ -39,7 +39,7 @@ public class NginxLightIntegrationTest {
@BeforeMethod
public void setup() {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
index ad11bdf..05d6577 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
@@ -65,7 +65,7 @@ public class NginxRebindIntegrationTest {
mementoDir = Files.createTempDir();
origManagementContext = RebindTestUtils.newPersistingManagementContext(mementoDir, classLoader);
- origApp = ApplicationBuilder.builder(TestApplication.class).manage(origManagementContext);
+ origApp = ApplicationBuilder.newManagedApp(TestApplication.class, origManagementContext);
localhostProvisioningLocation = new LocalhostMachineProvisioningLocation();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.groovy
index ca910f7..3bc2804 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.groovy
@@ -58,7 +58,7 @@ public class NginxUrlMappingIntegrationTest {
war = getClass().getClassLoader().getResource("hello-world.war")
assertNotNull(war, "Unable to locate hello-world.war resource");
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
urlMappingsGroup = app.createAndManageChild(EntitySpecs.spec(BasicGroup.class)
.configure("childrenAsMembers", true));
entityManager = app.getManagementContext().getEntityManager();
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.groovy
index ab87cbd..da48c8f 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.groovy
@@ -44,7 +44,7 @@ public class NginxWebClusterEc2LiveTest {
ImmutableMap.of("brooklyn.location.jclouds.aws-ec2.image-id", "us-east-1/ami-2342a94a"));
loc = managementContext.getLocationRegistry().resolve("aws-ec2:us-east-1")
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
Entities.startManagement(app, managementContext)
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/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 ca36302..1af049d 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
@@ -48,7 +48,7 @@ public class ControlledDynamicWebAppClusterTest {
String warPath = "hello-world.war";
warUrl = getClass().getClassLoader().getResource(warPath);
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
loc = new LocalhostMachineProvisioningLocation();
locs = ImmutableList.of(loc);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/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 374ad74..2bcb46e 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.groovy
@@ -38,7 +38,7 @@ public class DynamicWebAppClusterTest {
@BeforeMethod(alwaysRun=true)
public void setUp() throws Exception {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
}
@AfterMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
index 1f7cc8d..93eb96d 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
@@ -39,7 +39,7 @@ public class DynamicWebAppFabricTest {
@BeforeMethod(alwaysRun=true)
public void setUp() throws Exception {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
loc1 = new SimulatedLocation();
loc2 = new SimulatedLocation();
locs = ImmutableList.of(loc1, loc2);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
index 84f82c5..4b13d26 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
@@ -63,7 +63,7 @@ public class DynamicWebAppClusterRebindIntegrationTest {
origManagementContext = RebindTestUtils.newPersistingManagementContext(mementoDir, classLoader);
localhostProvisioningLocation = new LocalhostMachineProvisioningLocation();
- origApp = ApplicationBuilder.builder(TestApplication.class).manage(origManagementContext);
+ origApp = ApplicationBuilder.newManagedApp(TestApplication.class, origManagementContext);
}
@AfterMethod(groups = "Integration", alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerIntegrationTest.java
index 465d887..6634198 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerIntegrationTest.java
@@ -49,7 +49,7 @@ public class Jboss7ServerIntegrationTest {
warUrl = getClass().getClassLoader().getResource(warPath);
localhostProvisioningLocation = new LocalhostMachineProvisioningLocation();
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
keystoreFile = createTemporaryKeyStore("myname", "mypass");
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerRebindIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerRebindIntegrationTest.java
index 786a41b..64834ea 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerRebindIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerRebindIntegrationTest.java
@@ -62,7 +62,7 @@ public class Jboss7ServerRebindIntegrationTest {
origManagementContext = RebindTestUtils.newPersistingManagementContext(mementoDir, classLoader);
localhostProvisioningLocation = new LocalhostMachineProvisioningLocation();
- origApp = ApplicationBuilder.builder(TestApplication.class).manage(origManagementContext);
+ origApp = ApplicationBuilder.newManagedApp(TestApplication.class, origManagementContext);
}
@AfterMethod(groups = "Integration", alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/576b649c/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerIntegrationTest.java
index 48793fe..9a06f1c 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerIntegrationTest.java
@@ -55,7 +55,7 @@ public class TomcatServerIntegrationTest {
public void detectFailureIfTomcatCantBindToPort() throws Exception {
ServerSocket listener = new ServerSocket(DEFAULT_HTTP_PORT);
try {
- app = ApplicationBuilder.builder(TestApplication.class).manage();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
tc = app.createAndManageChild(EntitySpecs.spec(TomcatServer.class).configure("httpPort",DEFAULT_HTTP_PORT));
try {
[35/50] brooklyn-library git commit: Removed most of the cloud
foundry stuff from the docs
Posted by he...@apache.org.
Removed most of the cloud foundry stuff from the docs
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/33dcec81
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/33dcec81
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/33dcec81
Branch: refs/heads/0.5.0
Commit: 33dcec810de9b77959b356aab671b4568c6adedb
Parents: 754897f
Author: Peter Veentjer <al...@gmail.com>
Authored: Fri Apr 19 14:59:45 2013 +0300
Committer: Peter Veentjer <al...@gmail.com>
Committed: Fri Apr 19 14:59:45 2013 +0300
----------------------------------------------------------------------
examples/global-web-fabric/README.txt | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/33dcec81/examples/global-web-fabric/README.txt
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/README.txt b/examples/global-web-fabric/README.txt
index 700145c..f2e017e 100644
--- a/examples/global-web-fabric/README.txt
+++ b/examples/global-web-fabric/README.txt
@@ -9,9 +9,6 @@ and you are in this directory. Adjust to taste for other configurations.
# Launch the app in aws-ec2 regions eu-west-1 and us-east-1
brooklyn launch --app brooklyn.demo.GlobalWebFabricExample --location "aws-ec2:eu-west-1,aws-ec2:us-east-1"
- # Launch the app in aws-ec2 regions eu-west-1 and us-east-1, and use an AppFog cloudfoundry account in AWS US-West
- brooklyn launch --app brooklyn.demo.GlobalWebFabricExample --location "aws-ec2:eu-west-1,aws-ec2:us-east-1,cloudfoundry:https://api.aws.af.cm/"
-
---
The aws-ec2 credentials are retrieved from ~/.brooklyn/brooklyn.properties
@@ -20,10 +17,4 @@ This file should contain something like:
brooklyn.jclouds.aws-ec2.identity=AKA50M30N3S1DFR0MAW55
brooklyn.jclouds.aws-ec2.credential=aT0Ps3cr3tC0D3wh1chAW5w1llG1V3y0uTOus333
-Brooklyn defaults to using ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub.
-
-For Cloud Foundry you must have an AppFog account set up and the CloudFoundry client configured and on the path.
-
----
-
-For more information, please visit: http://brooklyncentral.github.com/use/examples/global-web-fabric/
+Brooklyn defaults to using ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub.
\ No newline at end of file
[48/50] brooklyn-library git commit: Fix MySqlLiveRackspaceTest
Posted by he...@apache.org.
Fix MySqlLiveRackspaceTest
- brooklynProps.put should take string values, rather than
a list.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/0d9ee800
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/0d9ee800
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/0d9ee800
Branch: refs/heads/0.5.0
Commit: 0d9ee800f7864c475ce80218c9d481978c329202
Parents: 8d1b5d2
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 17 14:40:16 2013 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Apr 25 11:24:43 2013 +0100
----------------------------------------------------------------------
.../brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.groovy | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0d9ee800/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.groovy b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.groovy
index f1a374e..e8b1598 100644
--- a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.groovy
+++ b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.groovy
@@ -72,7 +72,7 @@ public class MySqlLiveRackspaceTest extends MySqlIntegrationTest {
BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newDefault();
brooklynProperties.put("brooklyn.jclouds.cloudservers-uk.image-name-regex", osRegex);
brooklynProperties.remove("brooklyn.jclouds.cloudservers-uk.image-id");
- brooklynProperties.put("inboundPorts", [22, 3306]);
+ brooklynProperties.put("inboundPorts", "22, 3306");
LocationRegistry locationRegistry = new LocationRegistry(brooklynProperties);
JcloudsLocation jcloudsLocation = (JcloudsLocation) locationRegistry.resolve("cloudservers-uk");