You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ri...@apache.org on 2015/08/07 19:53:41 UTC

[08/10] incubator-brooklyn git commit: Merge remote-tracking branch 'upstream/master' into fix/redis-cluster-stop

Merge remote-tracking branch 'upstream/master' into fix/redis-cluster-stop

Fixing conflicts from package renames


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

Branch: refs/heads/master
Commit: dd4087abd53225f39dfb27db7c9d094ae3146fd4
Parents: 891c818 0efc1e3
Author: Mike Zaccardo <mi...@cloudsoftcorp.com>
Authored: Thu Aug 6 13:57:19 2015 -0400
Committer: Mike Zaccardo <mi...@cloudsoftcorp.com>
Committed: Thu Aug 6 13:57:19 2015 -0400

----------------------------------------------------------------------
 .../entity/basic/BasicStartableImpl.java        |  58 +-
 .../entity/basic/ServiceStateLogic.java         |   7 +-
 .../java/brooklyn/enricher/EnrichersTest.java   |  30 +-
 .../brooklyn/entity/basic/AttributeMapTest.java |  19 +-
 .../entity/basic/BasicStartableTest.java        |  33 +-
 .../entity/basic/EntityLocationsTest.java       |  25 +-
 .../entity/basic/EntitySubscriptionTest.java    |  40 +-
 .../brooklyn/entity/basic/EntityTypeTest.java   |  35 +-
 .../entity/group/DynamicClusterTest.java        |   8 +-
 .../policy/basic/PolicySubscriptionTest.java    |  23 +-
 .../basic/RecordingSensorEventListener.java     | 115 +++
 .../nosql-cassandra/cassandra.include.md        |   4 +-
 docs/guide/ops/catalog/index.md                 |   4 +-
 .../src/main/assembly/scripts/start.sh          |   2 +-
 .../brooklyn/demo/CumulusRDFApplication.java    |  11 +-
 .../demo/HighAvailabilityCassandraCluster.java  |   5 +-
 .../brooklyn/demo/ResilientMongoDbApp.java      |   5 +-
 .../brooklyn/demo/RiakClusterExample.java       |   5 +-
 .../brooklyn/demo/SimpleCassandraCluster.java   |   3 +-
 .../brooklyn/demo/SimpleCouchDBCluster.java     |   3 +-
 .../brooklyn/demo/SimpleMongoDBReplicaSet.java  |   5 +-
 .../brooklyn/demo/SimpleRedisCluster.java       |   3 +-
 .../brooklyn/demo/WideAreaCassandraCluster.java |  11 +-
 .../brooklyn/demo/ha-cassandra-cluster.yaml     |   4 +-
 .../brooklyn/demo/simple-cassandra-cluster.yaml |   2 +-
 .../demo/wide-area-cassandra-cluster.yaml       |   8 +-
 .../brooklyn/demo/NodeJsTodoApplication.java    |   3 +-
 .../apache/brooklyn/demo/nodejs-riak-todo.yaml  |   2 +-
 .../org/apache/brooklyn/demo/nodejs-todo.yaml   |   2 +-
 .../brooklyn/entity/salt/SaltStackMaster.java   |   2 +-
 .../nosql/hazelcast/HazelcastCluster.java       |   2 +-
 .../entity/nosql/hazelcast/HazelcastNode.java   |   2 +-
 software/nosql/pom.xml                          |  28 +-
 .../nosql/cassandra/CassandraCluster.java       |  30 -
 .../nosql/cassandra/CassandraClusterImpl.java   |  27 -
 .../nosql/cassandra/CassandraDatacenter.java    | 214 ----
 .../cassandra/CassandraDatacenterImpl.java      | 625 ------------
 .../entity/nosql/cassandra/CassandraFabric.java |  80 --
 .../nosql/cassandra/CassandraFabricImpl.java    | 395 --------
 .../entity/nosql/cassandra/CassandraNode.java   | 231 -----
 .../nosql/cassandra/CassandraNodeDriver.java    |  47 -
 .../nosql/cassandra/CassandraNodeImpl.java      | 594 -----------
 .../nosql/cassandra/CassandraNodeSshDriver.java | 420 --------
 .../entity/nosql/cassandra/TokenGenerator.java  |  49 -
 .../entity/nosql/cassandra/TokenGenerators.java | 192 ----
 .../nosql/couchbase/CouchbaseCluster.java       | 134 ---
 .../nosql/couchbase/CouchbaseClusterImpl.java   | 597 -----------
 .../entity/nosql/couchbase/CouchbaseNode.java   | 159 ---
 .../nosql/couchbase/CouchbaseNodeDriver.java    |  41 -
 .../nosql/couchbase/CouchbaseNodeImpl.java      | 269 -----
 .../nosql/couchbase/CouchbaseNodeSshDriver.java | 512 ----------
 .../nosql/couchbase/CouchbaseSyncGateway.java   |  75 --
 .../couchbase/CouchbaseSyncGatewayDriver.java   |  27 -
 .../couchbase/CouchbaseSyncGatewayImpl.java     |  82 --
 .../CouchbaseSyncGatewaySshDriver.java          | 167 ----
 .../entity/nosql/couchdb/CouchDBCluster.java    |  48 -
 .../nosql/couchdb/CouchDBClusterImpl.java       |  51 -
 .../entity/nosql/couchdb/CouchDBNode.java       |  66 --
 .../entity/nosql/couchdb/CouchDBNodeDriver.java |  37 -
 .../entity/nosql/couchdb/CouchDBNodeImpl.java   | 106 --
 .../nosql/couchdb/CouchDBNodeSshDriver.java     | 153 ---
 .../elasticsearch/ElasticSearchCluster.java     |  40 -
 .../elasticsearch/ElasticSearchClusterImpl.java |  45 -
 .../nosql/elasticsearch/ElasticSearchNode.java  |  88 --
 .../elasticsearch/ElasticSearchNodeDriver.java  |  25 -
 .../elasticsearch/ElasticSearchNodeImpl.java    | 110 --
 .../ElasticSearchNodeSshDriver.java             | 139 ---
 .../nosql/mongodb/AbstractMongoDBServer.java    |  61 --
 .../nosql/mongodb/AbstractMongoDBSshDriver.java | 175 ----
 .../entity/nosql/mongodb/MongoDBClient.java     |  65 --
 .../nosql/mongodb/MongoDBClientDriver.java      |  25 -
 .../entity/nosql/mongodb/MongoDBClientImpl.java |  43 -
 .../nosql/mongodb/MongoDBClientSshDriver.java   | 147 ---
 .../nosql/mongodb/MongoDBClientSupport.java     | 263 -----
 .../entity/nosql/mongodb/MongoDBDriver.java     |  24 -
 .../entity/nosql/mongodb/MongoDBReplicaSet.java |  84 --
 .../nosql/mongodb/MongoDBReplicaSetImpl.java    | 404 --------
 .../entity/nosql/mongodb/MongoDBServer.java     | 152 ---
 .../entity/nosql/mongodb/MongoDBServerImpl.java | 214 ----
 .../entity/nosql/mongodb/MongoDBSshDriver.java  |  57 --
 .../entity/nosql/mongodb/ReplicaSetConfig.java  | 278 ------
 .../nosql/mongodb/ReplicaSetMemberStatus.java   |  66 --
 .../sharding/CoLocatedMongoDBRouter.java        |  59 --
 .../sharding/CoLocatedMongoDBRouterImpl.java    |  70 --
 .../mongodb/sharding/MongoDBConfigServer.java   |  27 -
 .../sharding/MongoDBConfigServerCluster.java    |  35 -
 .../MongoDBConfigServerClusterImpl.java         |  57 --
 .../sharding/MongoDBConfigServerDriver.java     |  25 -
 .../sharding/MongoDBConfigServerImpl.java       |  36 -
 .../sharding/MongoDBConfigServerSshDriver.java  |  43 -
 .../nosql/mongodb/sharding/MongoDBRouter.java   |  51 -
 .../mongodb/sharding/MongoDBRouterCluster.java  |  54 -
 .../sharding/MongoDBRouterClusterImpl.java      | 101 --
 .../mongodb/sharding/MongoDBRouterDriver.java   |  25 -
 .../mongodb/sharding/MongoDBRouterImpl.java     |  85 --
 .../sharding/MongoDBRouterSshDriver.java        |  52 -
 .../mongodb/sharding/MongoDBShardCluster.java   |  27 -
 .../sharding/MongoDBShardClusterImpl.java       | 179 ----
 .../sharding/MongoDBShardedDeployment.java      | 102 --
 .../sharding/MongoDBShardedDeploymentImpl.java  | 147 ---
 .../entity/nosql/redis/RedisCluster.java        |  41 -
 .../entity/nosql/redis/RedisClusterImpl.java    | 151 ---
 .../brooklyn/entity/nosql/redis/RedisShard.java |  26 -
 .../entity/nosql/redis/RedisShardImpl.java      |  26 -
 .../brooklyn/entity/nosql/redis/RedisSlave.java |  42 -
 .../entity/nosql/redis/RedisSlaveImpl.java      |  34 -
 .../brooklyn/entity/nosql/redis/RedisStore.java |  69 --
 .../entity/nosql/redis/RedisStoreDriver.java    |  27 -
 .../entity/nosql/redis/RedisStoreImpl.java      | 154 ---
 .../entity/nosql/redis/RedisStoreSshDriver.java | 131 ---
 .../brooklyn/entity/nosql/riak/RiakCluster.java |  65 --
 .../entity/nosql/riak/RiakClusterImpl.java      | 264 -----
 .../brooklyn/entity/nosql/riak/RiakNode.java    | 238 -----
 .../entity/nosql/riak/RiakNodeDriver.java       |  48 -
 .../entity/nosql/riak/RiakNodeImpl.java         | 306 ------
 .../entity/nosql/riak/RiakNodeSshDriver.java    | 614 ------------
 .../brooklyn/entity/nosql/solr/SolrServer.java  |  81 --
 .../entity/nosql/solr/SolrServerDriver.java     |  30 -
 .../entity/nosql/solr/SolrServerImpl.java       |  75 --
 .../entity/nosql/solr/SolrServerSshDriver.java  | 158 ---
 .../nosql/cassandra/CassandraCluster.java       |  30 +
 .../nosql/cassandra/CassandraClusterImpl.java   |  27 +
 .../nosql/cassandra/CassandraDatacenter.java    | 215 ++++
 .../cassandra/CassandraDatacenterImpl.java      | 625 ++++++++++++
 .../entity/nosql/cassandra/CassandraFabric.java |  80 ++
 .../nosql/cassandra/CassandraFabricImpl.java    | 395 ++++++++
 .../entity/nosql/cassandra/CassandraNode.java   | 231 +++++
 .../nosql/cassandra/CassandraNodeDriver.java    |  47 +
 .../nosql/cassandra/CassandraNodeImpl.java      | 594 +++++++++++
 .../nosql/cassandra/CassandraNodeSshDriver.java | 420 ++++++++
 .../entity/nosql/cassandra/TokenGenerator.java  |  49 +
 .../entity/nosql/cassandra/TokenGenerators.java | 192 ++++
 .../nosql/couchbase/CouchbaseCluster.java       | 134 +++
 .../nosql/couchbase/CouchbaseClusterImpl.java   | 597 +++++++++++
 .../entity/nosql/couchbase/CouchbaseNode.java   | 159 +++
 .../nosql/couchbase/CouchbaseNodeDriver.java    |  41 +
 .../nosql/couchbase/CouchbaseNodeImpl.java      | 269 +++++
 .../nosql/couchbase/CouchbaseNodeSshDriver.java | 512 ++++++++++
 .../nosql/couchbase/CouchbaseSyncGateway.java   |  75 ++
 .../couchbase/CouchbaseSyncGatewayDriver.java   |  27 +
 .../couchbase/CouchbaseSyncGatewayImpl.java     |  82 ++
 .../CouchbaseSyncGatewaySshDriver.java          | 167 ++++
 .../entity/nosql/couchdb/CouchDBCluster.java    |  48 +
 .../nosql/couchdb/CouchDBClusterImpl.java       |  51 +
 .../entity/nosql/couchdb/CouchDBNode.java       |  66 ++
 .../entity/nosql/couchdb/CouchDBNodeDriver.java |  37 +
 .../entity/nosql/couchdb/CouchDBNodeImpl.java   | 106 ++
 .../nosql/couchdb/CouchDBNodeSshDriver.java     | 153 +++
 .../elasticsearch/ElasticSearchCluster.java     |  40 +
 .../elasticsearch/ElasticSearchClusterImpl.java |  45 +
 .../nosql/elasticsearch/ElasticSearchNode.java  |  88 ++
 .../elasticsearch/ElasticSearchNodeDriver.java  |  25 +
 .../elasticsearch/ElasticSearchNodeImpl.java    | 110 ++
 .../ElasticSearchNodeSshDriver.java             | 139 +++
 .../nosql/mongodb/AbstractMongoDBServer.java    |  61 ++
 .../nosql/mongodb/AbstractMongoDBSshDriver.java | 175 ++++
 .../entity/nosql/mongodb/MongoDBClient.java     |  65 ++
 .../nosql/mongodb/MongoDBClientDriver.java      |  25 +
 .../entity/nosql/mongodb/MongoDBClientImpl.java |  43 +
 .../nosql/mongodb/MongoDBClientSshDriver.java   | 147 +++
 .../nosql/mongodb/MongoDBClientSupport.java     | 263 +++++
 .../entity/nosql/mongodb/MongoDBDriver.java     |  24 +
 .../entity/nosql/mongodb/MongoDBReplicaSet.java |  84 ++
 .../nosql/mongodb/MongoDBReplicaSetImpl.java    | 404 ++++++++
 .../entity/nosql/mongodb/MongoDBServer.java     | 152 +++
 .../entity/nosql/mongodb/MongoDBServerImpl.java | 214 ++++
 .../entity/nosql/mongodb/MongoDBSshDriver.java  |  57 ++
 .../entity/nosql/mongodb/ReplicaSetConfig.java  | 278 ++++++
 .../nosql/mongodb/ReplicaSetMemberStatus.java   |  66 ++
 .../sharding/CoLocatedMongoDBRouter.java        |  59 ++
 .../sharding/CoLocatedMongoDBRouterImpl.java    |  70 ++
 .../mongodb/sharding/MongoDBConfigServer.java   |  28 +
 .../sharding/MongoDBConfigServerCluster.java    |  35 +
 .../MongoDBConfigServerClusterImpl.java         |  57 ++
 .../sharding/MongoDBConfigServerDriver.java     |  25 +
 .../sharding/MongoDBConfigServerImpl.java       |  36 +
 .../sharding/MongoDBConfigServerSshDriver.java  |  44 +
 .../nosql/mongodb/sharding/MongoDBRouter.java   |  52 +
 .../mongodb/sharding/MongoDBRouterCluster.java  |  54 +
 .../sharding/MongoDBRouterClusterImpl.java      | 101 ++
 .../mongodb/sharding/MongoDBRouterDriver.java   |  25 +
 .../mongodb/sharding/MongoDBRouterImpl.java     |  86 ++
 .../sharding/MongoDBRouterSshDriver.java        |  52 +
 .../mongodb/sharding/MongoDBShardCluster.java   |  27 +
 .../sharding/MongoDBShardClusterImpl.java       | 179 ++++
 .../sharding/MongoDBShardedDeployment.java      | 103 ++
 .../sharding/MongoDBShardedDeploymentImpl.java  | 147 +++
 .../entity/nosql/redis/RedisCluster.java        |  41 +
 .../entity/nosql/redis/RedisClusterImpl.java    | 151 +++
 .../brooklyn/entity/nosql/redis/RedisShard.java |  26 +
 .../entity/nosql/redis/RedisShardImpl.java      |  26 +
 .../brooklyn/entity/nosql/redis/RedisSlave.java |  42 +
 .../entity/nosql/redis/RedisSlaveImpl.java      |  34 +
 .../brooklyn/entity/nosql/redis/RedisStore.java |  69 ++
 .../entity/nosql/redis/RedisStoreDriver.java    |  27 +
 .../entity/nosql/redis/RedisStoreImpl.java      | 154 +++
 .../entity/nosql/redis/RedisStoreSshDriver.java | 131 +++
 .../brooklyn/entity/nosql/riak/RiakCluster.java |  65 ++
 .../entity/nosql/riak/RiakClusterImpl.java      | 264 +++++
 .../brooklyn/entity/nosql/riak/RiakNode.java    | 238 +++++
 .../entity/nosql/riak/RiakNodeDriver.java       |  48 +
 .../entity/nosql/riak/RiakNodeImpl.java         | 306 ++++++
 .../entity/nosql/riak/RiakNodeSshDriver.java    | 614 ++++++++++++
 .../brooklyn/entity/nosql/solr/SolrServer.java  |  81 ++
 .../entity/nosql/solr/SolrServerDriver.java     |  30 +
 .../entity/nosql/solr/SolrServerImpl.java       |  75 ++
 .../entity/nosql/solr/SolrServerSshDriver.java  | 158 +++
 .../entity/nosql/cassandra/cassandra-1.2.yaml   | 644 ------------
 .../entity/nosql/cassandra/cassandra-2.0.yaml   | 688 -------------
 .../cassandra/cassandra-multicloud-snitch.jar   | Bin 4729 -> 0 bytes
 .../cassandra/cassandra-multicloud-snitch.txt   |  33 -
 .../nosql/cassandra/cassandra-rackdc.properties |   6 -
 .../entity/nosql/couchbase/pillowfight.yaml     |  77 --
 .../brooklyn/entity/nosql/couchdb/couch.ini     |  17 -
 .../brooklyn/entity/nosql/couchdb/couch.uri     |   2 -
 .../entity/nosql/mongodb/default-mongod.conf    |   7 -
 .../brooklyn/entity/nosql/mongodb/default.conf  |   2 -
 .../brooklyn/entity/nosql/redis/redis.conf      |  13 -
 .../brooklyn/entity/nosql/redis/slave.conf      |  16 -
 .../brooklyn/entity/nosql/riak/app.config       | 353 -------
 .../nosql/riak/riak-cluster-with-solr.yaml      |  35 -
 .../brooklyn/entity/nosql/riak/riak-mac.conf    | 494 ---------
 .../nosql/riak/riak-with-webapp-cluster.yaml    |  42 -
 .../entity/nosql/riak/riak-with-webapp.yaml     |  36 -
 .../brooklyn/entity/nosql/riak/riak.conf        | 494 ---------
 .../brooklyn/entity/nosql/riak/riak.md          |  67 --
 .../brooklyn/entity/nosql/riak/riak.png         | Bin 110651 -> 0 bytes
 .../brooklyn/entity/nosql/riak/vm.args          |  64 --
 .../brooklyn/entity/nosql/solr/solr.xml         |  19 -
 .../entity/nosql/cassandra/cassandra-1.2.yaml   | 644 ++++++++++++
 .../entity/nosql/cassandra/cassandra-2.0.yaml   | 688 +++++++++++++
 .../cassandra/cassandra-multicloud-snitch.jar   | Bin 0 -> 4729 bytes
 .../cassandra/cassandra-multicloud-snitch.txt   |  33 +
 .../nosql/cassandra/cassandra-rackdc.properties |   6 +
 .../entity/nosql/couchbase/pillowfight.yaml     |  77 ++
 .../brooklyn/entity/nosql/couchdb/couch.ini     |  17 +
 .../brooklyn/entity/nosql/couchdb/couch.uri     |   2 +
 .../entity/nosql/mongodb/default-mongod.conf    |   7 +
 .../brooklyn/entity/nosql/mongodb/default.conf  |   2 +
 .../brooklyn/entity/nosql/redis/redis.conf      |  13 +
 .../brooklyn/entity/nosql/redis/slave.conf      |  16 +
 .../brooklyn/entity/nosql/riak/app.config       | 353 +++++++
 .../nosql/riak/riak-cluster-with-solr.yaml      |  35 +
 .../brooklyn/entity/nosql/riak/riak-mac.conf    | 494 +++++++++
 .../nosql/riak/riak-with-webapp-cluster.yaml    |  42 +
 .../entity/nosql/riak/riak-with-webapp.yaml     |  36 +
 .../apache/brooklyn/entity/nosql/riak/riak.conf | 494 +++++++++
 .../apache/brooklyn/entity/nosql/riak/riak.md   |  67 ++
 .../apache/brooklyn/entity/nosql/riak/riak.png  | Bin 0 -> 110651 bytes
 .../apache/brooklyn/entity/nosql/riak/vm.args   |  64 ++
 .../apache/brooklyn/entity/nosql/solr/solr.xml  |  19 +
 .../cassandra/AbstractCassandraNodeTest.java    |  41 -
 .../entity/nosql/cassandra/AstyanaxSupport.java | 330 ------
 .../CassandraDatacenterIntegrationTest.java     | 149 ---
 .../cassandra/CassandraDatacenterLiveTest.java  | 308 ------
 ...assandraDatacenterRebindIntegrationTest.java |  97 --
 .../cassandra/CassandraDatacenterTest.java      | 233 -----
 .../nosql/cassandra/CassandraFabricTest.java    | 184 ----
 .../cassandra/CassandraNodeEc2LiveTest.java     |  50 -
 .../cassandra/CassandraNodeIntegrationTest.java | 190 ----
 .../nosql/cassandra/CassandraNodeLiveTest.java  |  74 --
 .../cassandra/NonNegTokenGeneratorTest.java     | 117 ---
 .../cassandra/PosNegTokenGeneratorTest.java     |  58 --
 .../nosql/couchbase/CouchbaseOfflineTest.java   |  62 --
 .../CouchbaseSyncGatewayEc2LiveTest.java        | 137 ---
 .../nosql/couchdb/AbstractCouchDBNodeTest.java  |  59 --
 .../nosql/couchdb/CouchDBClusterLiveTest.java   |  90 --
 .../nosql/couchdb/CouchDBNodeEc2LiveTest.java   |  49 -
 .../couchdb/CouchDBNodeIntegrationTest.java     |  66 --
 .../nosql/couchdb/CouchDBNodeLiveTest.java      |  74 --
 .../entity/nosql/couchdb/JcouchdbSupport.java   |  77 --
 .../ElasticSearchClusterIntegrationTest.java    | 128 ---
 .../ElasticSearchNodeIntegrationTest.java       | 112 ---
 .../nosql/mongodb/MongoDBEc2LiveTest.java       |  54 -
 .../nosql/mongodb/MongoDBIntegrationTest.java   |  91 --
 .../mongodb/MongoDBRebindIntegrationTest.java   |  60 --
 .../mongodb/MongoDBReplicaSetEc2LiveTest.java   |  96 --
 .../MongoDBReplicaSetIntegrationTest.java       | 206 ----
 .../mongodb/MongoDBRestartIntegrationTest.java  |  42 -
 .../nosql/mongodb/MongoDBSoftLayerLiveTest.java |  56 --
 .../entity/nosql/mongodb/MongoDBTestHelper.java | 124 ---
 .../nosql/mongodb/ReplicaSetConfigTest.java     | 239 -----
 .../MongoDBConfigServerIntegrationTest.java     |  66 --
 .../MongoDBShardedDeploymentEc2LiveTest.java    |  83 --
 ...MongoDBShardedDeploymentIntegrationTest.java | 129 ---
 .../entity/nosql/redis/JedisSupport.java        |  74 --
 .../redis/RedisClusterIntegrationTest.java      | 109 --
 .../entity/nosql/redis/RedisEc2LiveTest.java    |  66 --
 .../nosql/redis/RedisIntegrationTest.java       | 119 ---
 .../nosql/riak/RiakClusterEc2LiveTest.java      |  74 --
 .../entity/nosql/riak/RiakNodeEc2LiveTest.java  |  51 -
 .../riak/RiakNodeGoogleComputeLiveTest.java     |  62 --
 .../nosql/riak/RiakNodeIntegrationTest.java     |  64 --
 .../nosql/riak/RiakNodeSoftlayerLiveTest.java   |  45 -
 .../nosql/solr/AbstractSolrServerTest.java      |  41 -
 .../entity/nosql/solr/SolrJSupport.java         |  66 --
 .../nosql/solr/SolrServerEc2LiveTest.java       |  66 --
 .../nosql/solr/SolrServerIntegrationTest.java   |  84 --
 .../entity/nosql/solr/SolrServerLiveTest.java   |  89 --
 .../cassandra/AbstractCassandraNodeTest.java    |  42 +
 .../entity/nosql/cassandra/AstyanaxSupport.java | 331 ++++++
 .../CassandraDatacenterIntegrationTest.java     | 151 +++
 .../cassandra/CassandraDatacenterLiveTest.java  | 310 ++++++
 ...assandraDatacenterRebindIntegrationTest.java |  99 ++
 .../cassandra/CassandraDatacenterTest.java      | 235 +++++
 .../nosql/cassandra/CassandraFabricTest.java    | 186 ++++
 .../cassandra/CassandraNodeEc2LiveTest.java     |  51 +
 .../cassandra/CassandraNodeIntegrationTest.java | 191 ++++
 .../nosql/cassandra/CassandraNodeLiveTest.java  |  75 ++
 .../cassandra/NonNegTokenGeneratorTest.java     | 116 +++
 .../cassandra/PosNegTokenGeneratorTest.java     |  57 ++
 .../nosql/couchbase/CouchbaseOfflineTest.java   |  63 ++
 .../CouchbaseSyncGatewayEc2LiveTest.java        | 140 +++
 .../nosql/couchdb/AbstractCouchDBNodeTest.java  |  60 ++
 .../nosql/couchdb/CouchDBClusterLiveTest.java   |  92 ++
 .../nosql/couchdb/CouchDBNodeEc2LiveTest.java   |  50 +
 .../couchdb/CouchDBNodeIntegrationTest.java     |  67 ++
 .../nosql/couchdb/CouchDBNodeLiveTest.java      |  75 ++
 .../entity/nosql/couchdb/JcouchdbSupport.java   |  78 ++
 .../ElasticSearchClusterIntegrationTest.java    | 130 +++
 .../ElasticSearchNodeIntegrationTest.java       | 113 +++
 .../nosql/mongodb/MongoDBEc2LiveTest.java       |  56 ++
 .../nosql/mongodb/MongoDBIntegrationTest.java   |  92 ++
 .../mongodb/MongoDBRebindIntegrationTest.java   |  61 ++
 .../mongodb/MongoDBReplicaSetEc2LiveTest.java   |  98 ++
 .../MongoDBReplicaSetIntegrationTest.java       | 208 ++++
 .../mongodb/MongoDBRestartIntegrationTest.java  |  43 +
 .../nosql/mongodb/MongoDBSoftLayerLiveTest.java |  57 ++
 .../entity/nosql/mongodb/MongoDBTestHelper.java | 126 +++
 .../nosql/mongodb/ReplicaSetConfigTest.java     | 240 +++++
 .../MongoDBConfigServerIntegrationTest.java     |  67 ++
 .../MongoDBShardedDeploymentEc2LiveTest.java    |  86 ++
 ...MongoDBShardedDeploymentIntegrationTest.java | 135 +++
 .../entity/nosql/redis/JedisSupport.java        |  77 ++
 .../redis/RedisClusterIntegrationTest.java      | 112 +++
 .../entity/nosql/redis/RedisEc2LiveTest.java    |  67 ++
 .../nosql/redis/RedisIntegrationTest.java       | 120 +++
 .../nosql/riak/RiakClusterEc2LiveTest.java      |  76 ++
 .../entity/nosql/riak/RiakNodeEc2LiveTest.java  |  52 +
 .../riak/RiakNodeGoogleComputeLiveTest.java     |  64 ++
 .../nosql/riak/RiakNodeIntegrationTest.java     |  65 ++
 .../nosql/riak/RiakNodeSoftlayerLiveTest.java   |  46 +
 .../nosql/solr/AbstractSolrServerTest.java      |  42 +
 .../entity/nosql/solr/SolrJSupport.java         |  67 ++
 .../nosql/solr/SolrServerEc2LiveTest.java       |  67 ++
 .../nosql/solr/SolrServerIntegrationTest.java   |  85 ++
 .../entity/nosql/solr/SolrServerLiveTest.java   |  90 ++
 ...lledDynamicWebAppClusterIntegrationTest.java |  13 +-
 .../ControlledDynamicWebAppClusterTest.java     |  38 +-
 .../com/acme/sample/brooklyn/SampleMain.java    |   2 +-
 .../camp/brooklyn/BrooklynCampConstants.java    |  50 -
 .../camp/brooklyn/BrooklynCampPlatform.java     |  76 --
 .../BrooklynCampPlatformLauncherAbstract.java   |  73 --
 .../BrooklynCampPlatformLauncherNoServer.java   |  36 -
 .../camp/brooklyn/BrooklynCampReservedKeys.java |  29 -
 .../camp/brooklyn/YamlLauncherAbstract.java     | 133 ---
 .../camp/brooklyn/YamlLauncherNoServer.java     |  39 -
 .../BrooklynAssemblyTemplateInstantiator.java   | 282 ------
 .../BrooklynComponentTemplateResolver.java      | 491 ---------
 .../BrooklynEntityDecorationResolver.java       | 181 ----
 .../spi/creation/BrooklynEntityMatcher.java     | 193 ----
 .../creation/BrooklynYamlLocationResolver.java  | 142 ---
 .../creation/BrooklynYamlTypeInstantiator.java  | 208 ----
 .../spi/creation/EntitySpecConfiguration.java   |  58 --
 .../service/BrooklynServiceTypeResolver.java    |  72 --
 .../service/CatalogServiceTypeResolver.java     |  78 --
 .../service/ChefServiceTypeResolver.java        |  62 --
 .../service/JavaServiceTypeResolver.java        |  39 -
 .../creation/service/ServiceTypeResolver.java   |  73 --
 .../spi/dsl/BrooklynDslDeferredSupplier.java    |  99 --
 .../spi/dsl/BrooklynDslInterpreter.java         | 188 ----
 .../camp/brooklyn/spi/dsl/DslUtils.java         |  44 -
 .../spi/dsl/methods/BrooklynDslCommon.java      | 302 ------
 .../brooklyn/spi/dsl/methods/DslComponent.java  | 320 ------
 .../camp/brooklyn/spi/dsl/parse/DslParser.java  | 144 ---
 .../spi/dsl/parse/FunctionWithArgs.java         |  57 --
 .../brooklyn/spi/dsl/parse/QuotedString.java    |  49 -
 .../lookup/AbstractBrooklynResourceLookup.java  |  36 -
 .../lookup/AbstractTemplateBrooklynLookup.java  |  62 --
 .../spi/lookup/AssemblyBrooklynLookup.java      |  69 --
 .../lookup/AssemblyTemplateBrooklynLookup.java  |  70 --
 .../brooklyn/spi/lookup/BrooklynUrlLookup.java  |  38 -
 .../lookup/PlatformComponentBrooklynLookup.java |  61 --
 ...PlatformComponentTemplateBrooklynLookup.java |  59 --
 .../platform/BrooklynImmutableCampPlatform.java | 107 --
 .../camp/brooklyn/BrooklynCampConstants.java    |  50 +
 .../camp/brooklyn/BrooklynCampPlatform.java     |  78 ++
 .../BrooklynCampPlatformLauncherAbstract.java   |  73 ++
 .../BrooklynCampPlatformLauncherNoServer.java   |  36 +
 .../camp/brooklyn/BrooklynCampReservedKeys.java |  29 +
 .../camp/brooklyn/YamlLauncherAbstract.java     | 133 +++
 .../camp/brooklyn/YamlLauncherNoServer.java     |  39 +
 .../BrooklynAssemblyTemplateInstantiator.java   | 283 ++++++
 .../BrooklynComponentTemplateResolver.java      | 490 +++++++++
 .../BrooklynEntityDecorationResolver.java       | 180 ++++
 .../spi/creation/BrooklynEntityMatcher.java     | 193 ++++
 .../creation/BrooklynYamlLocationResolver.java  | 142 +++
 .../creation/BrooklynYamlTypeInstantiator.java  | 208 ++++
 .../spi/creation/EntitySpecConfiguration.java   |  58 ++
 .../service/BrooklynServiceTypeResolver.java    |  71 ++
 .../service/CatalogServiceTypeResolver.java     |  78 ++
 .../service/ChefServiceTypeResolver.java        |  61 ++
 .../service/JavaServiceTypeResolver.java        |  39 +
 .../creation/service/ServiceTypeResolver.java   |  73 ++
 .../spi/dsl/BrooklynDslDeferredSupplier.java    |  99 ++
 .../spi/dsl/BrooklynDslInterpreter.java         | 188 ++++
 .../camp/brooklyn/spi/dsl/DslUtils.java         |  44 +
 .../spi/dsl/methods/BrooklynDslCommon.java      | 301 ++++++
 .../brooklyn/spi/dsl/methods/DslComponent.java  | 320 ++++++
 .../camp/brooklyn/spi/dsl/parse/DslParser.java  | 144 +++
 .../spi/dsl/parse/FunctionWithArgs.java         |  57 ++
 .../brooklyn/spi/dsl/parse/QuotedString.java    |  49 +
 .../lookup/AbstractBrooklynResourceLookup.java  |  36 +
 .../lookup/AbstractTemplateBrooklynLookup.java  |  62 ++
 .../spi/lookup/AssemblyBrooklynLookup.java      |  69 ++
 .../lookup/AssemblyTemplateBrooklynLookup.java  |  70 ++
 .../brooklyn/spi/lookup/BrooklynUrlLookup.java  |  38 +
 .../lookup/PlatformComponentBrooklynLookup.java |  61 ++
 ...PlatformComponentTemplateBrooklynLookup.java |  59 ++
 .../platform/BrooklynImmutableCampPlatform.java | 109 ++
 ...lyn.spi.creation.service.ServiceTypeResolver |  22 -
 ...lyn.spi.creation.service.ServiceTypeResolver |  22 +
 .../camp/brooklyn/AbstractYamlRebindTest.java   | 206 ----
 .../camp/brooklyn/AbstractYamlTest.java         | 182 ----
 .../io/brooklyn/camp/brooklyn/AppYamlTest.java  | 119 ---
 .../BrooklynYamlTypeInstantiatorTest.java       |  76 --
 .../camp/brooklyn/ByonLocationsYamlTest.java    | 281 ------
 .../camp/brooklyn/DslAndRebindYamlTest.java     | 245 -----
 .../brooklyn/EmptySoftwareProcessYamlTest.java  | 103 --
 .../EnrichersSlightlySimplerYamlTest.java       | 134 ---
 .../camp/brooklyn/EnrichersYamlTest.java        | 257 -----
 .../brooklyn/EntitiesYamlIntegrationTest.java   |  71 --
 .../camp/brooklyn/EntitiesYamlTest.java         | 919 -----------------
 ...aWebAppWithDslYamlRebindIntegrationTest.java | 125 ---
 .../brooklyn/JavaWebAppsIntegrationTest.java    | 272 -----
 .../camp/brooklyn/JavaWebAppsMatchingTest.java  | 144 ---
 .../camp/brooklyn/LocationsYamlTest.java        | 285 ------
 .../camp/brooklyn/MapReferenceYamlTest.java     | 130 ---
 .../brooklyn/camp/brooklyn/ObjectsYamlTest.java | 280 ------
 .../camp/brooklyn/PoliciesYamlTest.java         | 215 ----
 .../camp/brooklyn/ReferencedYamlTest.java       | 180 ----
 .../brooklyn/ReferencingYamlTestEntity.java     |  66 --
 .../brooklyn/ReferencingYamlTestEntityImpl.java |  25 -
 .../brooklyn/ReloadBrooklynPropertiesTest.java  |  87 --
 .../camp/brooklyn/TestEntityWithInitConfig.java |  35 -
 .../brooklyn/TestEntityWithInitConfigImpl.java  |  59 --
 .../camp/brooklyn/TestReferencingEnricher.java  |  34 -
 .../camp/brooklyn/TestReferencingPolicy.java    |  34 -
 .../TestSensorAndEffectorInitializer.java       |  86 --
 .../brooklyn/VanillaBashNetcatYamlTest.java     | 113 ---
 .../io/brooklyn/camp/brooklyn/WrapAppTest.java  |  93 --
 .../catalog/AbstractCatalogXmlTest.java         | 109 --
 .../CatalogOsgiVersionMoreEntityTest.java       | 261 -----
 .../brooklyn/catalog/CatalogXmlOsgiTest.java    |  37 -
 .../brooklyn/catalog/CatalogXmlVersionTest.java |  58 --
 .../brooklyn/catalog/CatalogYamlCombiTest.java  | 145 ---
 .../brooklyn/catalog/CatalogYamlEntityTest.java | 781 ---------------
 .../catalog/CatalogYamlLocationTest.java        | 248 -----
 .../brooklyn/catalog/CatalogYamlPolicyTest.java | 196 ----
 .../brooklyn/catalog/CatalogYamlRebindTest.java | 132 ---
 .../catalog/CatalogYamlTemplateTest.java        |  96 --
 .../catalog/CatalogYamlVersioningTest.java      | 258 -----
 .../camp/brooklyn/catalog/TestBasicApp.java     |  27 -
 .../camp/brooklyn/catalog/TestBasicAppImpl.java |  24 -
 .../camp/brooklyn/spi/dsl/DslParseTest.java     |  79 --
 .../camp/brooklyn/AbstractYamlRebindTest.java   | 208 ++++
 .../camp/brooklyn/AbstractYamlTest.java         | 184 ++++
 .../brooklyn/camp/brooklyn/AppYamlTest.java     | 119 +++
 .../BrooklynYamlTypeInstantiatorTest.java       |  75 ++
 .../camp/brooklyn/ByonLocationsYamlTest.java    | 281 ++++++
 .../camp/brooklyn/DslAndRebindYamlTest.java     | 245 +++++
 .../brooklyn/EmptySoftwareProcessYamlTest.java  | 103 ++
 .../EnrichersSlightlySimplerYamlTest.java       | 134 +++
 .../camp/brooklyn/EnrichersYamlTest.java        | 257 +++++
 .../brooklyn/EntitiesYamlIntegrationTest.java   |  71 ++
 .../camp/brooklyn/EntitiesYamlTest.java         | 919 +++++++++++++++++
 ...aWebAppWithDslYamlRebindIntegrationTest.java | 125 +++
 .../brooklyn/JavaWebAppsIntegrationTest.java    | 275 +++++
 .../camp/brooklyn/JavaWebAppsMatchingTest.java  | 146 +++
 .../camp/brooklyn/LocationsYamlTest.java        | 285 ++++++
 .../camp/brooklyn/MapReferenceYamlTest.java     | 130 +++
 .../brooklyn/camp/brooklyn/ObjectsYamlTest.java | 280 ++++++
 .../camp/brooklyn/PoliciesYamlTest.java         | 215 ++++
 .../camp/brooklyn/ReferencedYamlTest.java       | 180 ++++
 .../brooklyn/ReferencingYamlTestEntity.java     |  66 ++
 .../brooklyn/ReferencingYamlTestEntityImpl.java |  25 +
 .../brooklyn/ReloadBrooklynPropertiesTest.java  |  89 ++
 .../camp/brooklyn/TestEntityWithInitConfig.java |  35 +
 .../brooklyn/TestEntityWithInitConfigImpl.java  |  59 ++
 .../camp/brooklyn/TestReferencingEnricher.java  |  34 +
 .../camp/brooklyn/TestReferencingPolicy.java    |  34 +
 .../TestSensorAndEffectorInitializer.java       |  86 ++
 .../brooklyn/VanillaBashNetcatYamlTest.java     | 114 +++
 .../brooklyn/camp/brooklyn/WrapAppTest.java     |  93 ++
 .../catalog/AbstractCatalogXmlTest.java         | 109 ++
 .../CatalogOsgiVersionMoreEntityTest.java       | 262 +++++
 .../brooklyn/catalog/CatalogXmlOsgiTest.java    |  37 +
 .../brooklyn/catalog/CatalogXmlVersionTest.java |  58 ++
 .../brooklyn/catalog/CatalogYamlCombiTest.java  | 143 +++
 .../brooklyn/catalog/CatalogYamlEntityTest.java | 780 +++++++++++++++
 .../catalog/CatalogYamlLocationTest.java        | 247 +++++
 .../brooklyn/catalog/CatalogYamlPolicyTest.java | 195 ++++
 .../brooklyn/catalog/CatalogYamlRebindTest.java | 132 +++
 .../catalog/CatalogYamlTemplateTest.java        |  95 ++
 .../catalog/CatalogYamlVersioningTest.java      | 257 +++++
 .../camp/brooklyn/catalog/TestBasicApp.java     |  27 +
 .../camp/brooklyn/catalog/TestBasicAppImpl.java |  24 +
 .../camp/brooklyn/spi/dsl/DslParseTest.java     |  79 ++
 .../more-entities-osgi-catalog-scan.yaml        |  32 -
 .../more-entity-v1-called-v1-osgi-catalog.yaml  |  27 -
 .../catalog/more-entity-v1-osgi-catalog.yaml    |  27 -
 ...more-entity-v1-with-policy-osgi-catalog.yaml |  29 -
 .../catalog/more-entity-v2-osgi-catalog.yaml    |  28 -
 .../more-policies-osgi-catalog-scan.yaml        |  32 -
 .../catalog/simple-policy-osgi-catalog.yaml     |  27 -
 .../more-entities-osgi-catalog-scan.yaml        |  32 +
 .../more-entity-v1-called-v1-osgi-catalog.yaml  |  27 +
 .../catalog/more-entity-v1-osgi-catalog.yaml    |  27 +
 ...more-entity-v1-with-policy-osgi-catalog.yaml |  29 +
 .../catalog/more-entity-v2-osgi-catalog.yaml    |  28 +
 .../more-policies-osgi-catalog-scan.yaml        |  32 +
 .../catalog/simple-policy-osgi-catalog.yaml     |  27 +
 .../camp/src/test/resources/simple-catalog.xml  |   2 +-
 .../resources/test-entity-with-init-config.yaml |   2 +-
 .../resources/test-referencing-enrichers.yaml   |  26 +-
 .../resources/test-referencing-entities.yaml    |  12 +-
 .../resources/test-referencing-policies.yaml    |  26 +-
 usage/cli/pom.xml                               |   6 +-
 .../main/java/brooklyn/cli/AbstractMain.java    | 253 -----
 .../main/java/brooklyn/cli/CloudExplorer.java   | 381 -------
 .../src/main/java/brooklyn/cli/ItemLister.java  | 272 -----
 usage/cli/src/main/java/brooklyn/cli/Main.java  | 986 ------------------
 .../java/brooklyn/cli/lister/ClassFinder.java   | 153 ---
 .../brooklyn/cli/lister/ItemDescriptors.java    | 173 ----
 .../org/apache/brooklyn/cli/AbstractMain.java   | 253 +++++
 .../org/apache/brooklyn/cli/CloudExplorer.java  | 381 +++++++
 .../org/apache/brooklyn/cli/ItemLister.java     | 272 +++++
 .../main/java/org/apache/brooklyn/cli/Main.java | 997 +++++++++++++++++++
 .../apache/brooklyn/cli/lister/ClassFinder.java | 153 +++
 .../brooklyn/cli/lister/ItemDescriptors.java    | 173 ++++
 .../main/resources/brooklyn/default.catalog.bom |   2 +-
 .../cli/src/test/java/brooklyn/cli/CliTest.java | 604 -----------
 .../brooklyn/cli/CloudExplorerLiveTest.java     | 209 ----
 .../java/org/apache/brooklyn/cli/CliTest.java   | 611 ++++++++++++
 .../brooklyn/cli/CloudExplorerLiveTest.java     | 210 ++++
 .../resources/example-app-app-location.yaml     |   2 +-
 .../resources/example-app-entity-location.yaml  |   2 +-
 .../test/resources/example-app-no-location.yaml |   2 +-
 usage/dist/src/main/dist/bin/brooklyn           |   2 +-
 usage/dist/src/main/dist/bin/brooklyn.bat       |   2 +-
 usage/dist/src/main/dist/bin/brooklyn.ps1       |   2 +-
 .../apache/brooklyn/cli/CliIntegrationTest.java |   2 +-
 .../brooklyn/launcher/BrooklynLauncher.java     |   4 +-
 .../camp/BrooklynCampPlatformLauncher.java      |   5 +-
 .../launcher/camp/SimpleYamlLauncher.java       |   4 +-
 .../blueprints/AbstractBlueprintTest.java       |   2 +-
 .../src/test/resources/cassandra-blueprint.yaml |   2 +-
 .../resources/couchbase-cluster-singleNode.yaml |   2 +-
 .../src/test/resources/couchbase-cluster.yaml   |   2 +-
 .../src/test/resources/couchbase-node.yaml      |   2 +-
 .../couchbase-replication-w-pillowfight.yaml    |   6 +-
 .../src/test/resources/couchbase-w-loadgen.yaml |   4 +-
 .../test/resources/couchbase-w-pillowfight.yaml |   4 +-
 .../src/test/resources/mongo-blueprint.yaml     |   2 +-
 .../resources/mongo-client-single-server.yaml   |   4 +-
 .../src/test/resources/mongo-scripts.yaml       |   4 +-
 .../src/test/resources/mongo-sharded.yaml       |   4 +-
 .../mongo-single-server-blueprint.yaml          |   2 +-
 usage/launcher/src/test/resources/playing.yaml  |   2 +-
 .../SoftlayerObtainPrivateLiveTest.java         | 225 -----
 .../SoftlayerObtainPrivateLiveTest.java         | 225 +++++
 .../ApplicationResourceIntegrationTest.java     |   4 +-
 .../brooklyn/rest/BrooklynRestApiLauncher.java  |   4 +-
 .../brooklyn/rest/HaMasterCheckFilterTest.java  |   2 +-
 .../ApplicationResourceIntegrationTest.java     |   2 +-
 .../rest/resources/CatalogResourceTest.java     |   6 +-
 .../rest/testing/BrooklynRestApiTest.java       |   2 +-
 577 files changed, 35062 insertions(+), 34855 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dd4087ab/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
----------------------------------------------------------------------
diff --cc software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
index 0000000,39c9dbe..4dd8fd0
mode 000000,100644..100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
@@@ -1,0 -1,130 +1,151 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you 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 org.apache.brooklyn.entity.nosql.redis;
+ 
+ import java.util.Collection;
++import java.util.List;
+ 
+ import brooklyn.enricher.Enrichers;
+ import brooklyn.entity.basic.AbstractEntity;
+ import brooklyn.entity.basic.Lifecycle;
+ import brooklyn.entity.basic.ServiceStateLogic;
+ import brooklyn.entity.basic.ServiceStateLogic.ComputeServiceIndicatorsFromChildrenAndMembers;
+ import brooklyn.entity.basic.ServiceStateLogic.ServiceProblemsLogic;
+ import brooklyn.entity.group.DynamicCluster;
+ import brooklyn.entity.proxying.EntitySpec;
+ import brooklyn.event.AttributeSensor;
+ import brooklyn.event.basic.Sensors;
+ import brooklyn.location.Location;
+ import brooklyn.util.collections.QuorumCheck.QuorumChecks;
++import brooklyn.util.exceptions.CompoundRuntimeException;
+ import brooklyn.util.exceptions.Exceptions;
+ 
+ import com.google.common.collect.ImmutableList;
+ import com.google.common.collect.ImmutableMap;
+ import com.google.common.collect.ImmutableSet;
++import com.google.common.collect.Lists;
+ 
+ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
+ 
 -    private static AttributeSensor<RedisStore> MASTER = Sensors.newSensor(RedisStore.class, "redis.master");
 -    private static AttributeSensor<DynamicCluster> SLAVES = Sensors.newSensor(DynamicCluster.class, "redis.slaves");
++    private static final AttributeSensor<RedisStore> MASTER = Sensors.newSensor(RedisStore.class, "redis.master");
++    private static final AttributeSensor<DynamicCluster> SLAVES = Sensors.newSensor(DynamicCluster.class, "redis.slaves");
+ 
+     public RedisClusterImpl() {
+     }
+ 
+     @Override
+     public RedisStore getMaster() {
+         return getAttribute(MASTER);
+     }
+     
+     @Override
+     public DynamicCluster getSlaves() {
+         return getAttribute(SLAVES);
+     }
+ 
+     @Override
+     public void init() {
+         super.init();
+ 
+         RedisStore master = addChild(EntitySpec.create(RedisStore.class));
+         setAttribute(MASTER, master);
+ 
+         DynamicCluster slaves = addChild(EntitySpec.create(DynamicCluster.class)
+                 .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(RedisSlave.class).configure(RedisSlave.MASTER, master)));
+         setAttribute(SLAVES, slaves);
+ 
+         addEnricher(Enrichers.builder()
+                 .propagating(RedisStore.HOSTNAME, RedisStore.ADDRESS, RedisStore.SUBNET_HOSTNAME, RedisStore.SUBNET_ADDRESS, RedisStore.REDIS_PORT)
+                 .from(master)
+                 .build());
+     }
+ 
+     @Override
+     protected void initEnrichers() {
+         super.initEnrichers();
+         ServiceStateLogic.newEnricherFromChildrenUp().
+             checkChildrenOnly().
+             requireUpChildren(QuorumChecks.all()).
+             configure(ComputeServiceIndicatorsFromChildrenAndMembers.IGNORE_ENTITIES_WITH_THESE_SERVICE_STATES, ImmutableSet.<Lifecycle>of()).
+             addTo(this);
+     }
+     
+     @Override
+     public void start(Collection<? extends Location> locations) {
+         ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
+         ServiceProblemsLogic.clearProblemsIndicator(this, START);
+         try {
+             doStart(locations);
+             ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
+         } catch (Exception e) {
+             ServiceProblemsLogic.updateProblemsIndicator(this, START, "Start failed with error: "+e);
+             ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
+             throw Exceptions.propagate(e);
+         }
+     }
+ 
+     private void doStart(Collection<? extends Location> locations) {
+         RedisStore master = getMaster();
+         master.invoke(RedisStore.START, ImmutableMap.<String, Object>of("locations", ImmutableList.copyOf(locations))).getUnchecked();
+ 
+         DynamicCluster slaves = getSlaves();
+         slaves.invoke(DynamicCluster.START, ImmutableMap.<String, Object>of("locations", ImmutableList.copyOf(locations))).getUnchecked();
+     }
+ 
+     @Override
+     public void stop() {
+         ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
+         try {
+             doStop();
+             ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);
+         } catch (Exception e) {
+             ServiceProblemsLogic.updateProblemsIndicator(this, STOP, "Stop failed with error: "+e);
+             ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
+             throw Exceptions.propagate(e);
+         }
+     }
+ 
+     private void doStop() {
 -        getSlaves().invoke(DynamicCluster.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
 -        getMaster().invoke(RedisStore.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
++        StringBuilder message = new StringBuilder();
++        List<Exception> exceptions = Lists.newLinkedList();
++
++        try {
++            getSlaves().invoke(DynamicCluster.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
++        } catch (Exception e) {
++            message.append("Failed to stop Redis slaves");
++            exceptions.add(e);
++        }
++
++        try {
++            getMaster().invoke(RedisStore.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
++        } catch (Exception e) {
++            message.append((message.length() == 0) ? "Failed to stop Redis master" : " and master");
++            exceptions.add(e);
++        }
++
++        if (!exceptions.isEmpty()) {
++            throw new CompoundRuntimeException(message.toString(), exceptions);
++        }
+     }
+ 
+     @Override
+     public void restart() {
+         throw new UnsupportedOperationException();
+     }
+ }