You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/08/05 00:40:31 UTC
[1/4] incubator-brooklyn git commit: Add basic sensors to RedisCluster
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master 60af015b7 -> f517b66c2
Add basic sensors to RedisCluster
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/731a1113
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/731a1113
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/731a1113
Branch: refs/heads/master
Commit: 731a1113e975782ca42d20da36359774d2946a02
Parents: d90a8bf
Author: Mike Zaccardo <mi...@cloudsoftcorp.com>
Authored: Fri Jul 31 17:33:16 2015 -0400
Committer: Mike Zaccardo <mi...@cloudsoftcorp.com>
Committed: Fri Jul 31 17:33:16 2015 -0400
----------------------------------------------------------------------
.../entity/group/DynamicClusterTest.java | 14 ++++++
.../entity/nosql/redis/RedisClusterImpl.java | 49 ++++++++++++++------
2 files changed, 50 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/731a1113/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java b/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
index 947068d..1d144a0 100644
--- a/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
+++ b/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
@@ -122,6 +122,20 @@ public class DynamicClusterTest extends BrooklynAppUnitTestSupport {
if (Exceptions.getFirstThrowableOfType(e, IllegalStateException.class) == null) throw e;
}
}
+
+ @Test
+ public void startThenStopThenStartWithNewLocationFails() throws Exception {
+ DynamicCluster cluster = app.createAndManageChild(EntitySpec.create(DynamicCluster.class)
+ .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(TestEntity.class)));
+ try {
+ cluster.start(ImmutableList.of(loc));
+ cluster.stop();
+ cluster.start(ImmutableList.of(loc2));
+ fail();
+ } catch (Exception e) {
+ if (Exceptions.getFirstThrowableOfType(e, IllegalStateException.class) == null) throw e;
+ }
+ }
@Test
public void startMethodFailsIfLocationsParameterHasMoreThanOneElement() throws Exception {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/731a1113/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 cfa186a..0da5155 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
@@ -20,49 +20,73 @@ package brooklyn.entity.nosql.redis;
import java.util.Collection;
+import brooklyn.enricher.Enrichers;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.group.DynamicCluster;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.trait.Startable;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.Sensors;
import brooklyn.location.Location;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
- protected RedisStore master;
- protected DynamicCluster slaves;
+ private AttributeSensor<RedisStore> MASTER = Sensors.newSensor(RedisStore.class, "redis.master");
+ private AttributeSensor<DynamicCluster> SLAVES = Sensors.newSensor(DynamicCluster.class, "redis.slaves");
public RedisClusterImpl() {
}
@Override
public RedisStore getMaster() {
- return master;
+ return getAttribute(MASTER);
}
@Override
public DynamicCluster getSlaves() {
- return slaves;
+ return getAttribute(SLAVES);
}
@Override
public void start(Collection<? extends Location> locations) {
- master = addChild(EntitySpec.create(RedisStore.class));
+ RedisStore master = getMaster();
+ if (master == null) {
+ master = addChild(EntitySpec.create(RedisStore.class));
+ setAttribute(MASTER, master);
+ }
+
Entities.manage(master);
- master.start(locations);
+ master.invoke(RedisStore.START, ImmutableMap.<String, Object>of("locations", ImmutableList.copyOf(locations))).getUnchecked();
- slaves = addChild(EntitySpec.create(DynamicCluster.class)
- .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(RedisSlave.class).configure(RedisSlave.MASTER, master)));
- slaves.start(locations);
+ DynamicCluster slaves = getSlaves();
+ if (slaves == null) {
+ slaves = addChild(EntitySpec.create(DynamicCluster.class)
+ .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(RedisSlave.class).configure(RedisSlave.MASTER, master)));
+ setAttribute(SLAVES, slaves);
+ }
+
+ slaves.invoke(DynamicCluster.START, ImmutableMap.<String, Object>of("locations", ImmutableList.copyOf(locations))).getUnchecked();
setAttribute(Startable.SERVICE_UP, calculateServiceUp());
+
+ addEnricher(Enrichers.builder()
+ .propagating(RedisStore.HOSTNAME, RedisStore.ADDRESS, RedisStore.SUBNET_HOSTNAME, RedisStore.SUBNET_ADDRESS, RedisStore.REDIS_PORT)
+ .from(master)
+ .build());
}
@Override
public void stop() {
- if (slaves != null) slaves.stop();
- if (master != null) master.stop();
+ DynamicCluster slaves = getSlaves();
+ RedisStore master = getMaster();
+
+ if (slaves != null) slaves.invoke(DynamicCluster.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
+ if (master != null) master.invoke(RedisStore.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
setAttribute(Startable.SERVICE_UP, false);
}
@@ -74,10 +98,9 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
protected boolean calculateServiceUp() {
boolean up = false;
- for (Entity member : slaves.getMembers()) {
+ for (Entity member : getSlaves().getMembers()) {
if (Boolean.TRUE.equals(member.getAttribute(SERVICE_UP))) up = true;
}
return up;
}
-
}
[3/4] incubator-brooklyn git commit: Address PR comments
Posted by al...@apache.org.
Address PR comments
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/4ce06368
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/4ce06368
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/4ce06368
Branch: refs/heads/master
Commit: 4ce0636890098fb3195f2719597ae296c341d44c
Parents: 8cfe58e
Author: Mike Zaccardo <mi...@cloudsoftcorp.com>
Authored: Tue Aug 4 11:52:01 2015 -0400
Committer: Mike Zaccardo <mi...@cloudsoftcorp.com>
Committed: Tue Aug 4 11:52:01 2015 -0400
----------------------------------------------------------------------
.../entity/nosql/redis/RedisClusterImpl.java | 29 ++++++++++----------
1 file changed, 14 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4ce06368/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 e46ce65..89ca43c 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
@@ -21,21 +21,22 @@ package brooklyn.entity.nosql.redis;
import java.util.Collection;
import brooklyn.enricher.Enrichers;
-import brooklyn.entity.Entity;
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.entity.trait.Startable;
import brooklyn.event.AttributeSensor;
import brooklyn.event.basic.Sensors;
import brooklyn.location.Location;
+import brooklyn.util.collections.QuorumCheck.QuorumChecks;
import brooklyn.util.exceptions.Exceptions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
@@ -55,6 +56,7 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
return getAttribute(SLAVES);
}
+ @Override
public void init() {
super.init();
@@ -70,6 +72,16 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
.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) {
@@ -82,8 +94,6 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
ServiceProblemsLogic.updateProblemsIndicator(this, START, "Start failed with error: "+e);
ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
throw Exceptions.propagate(e);
- } finally {
- setAttribute(Startable.SERVICE_UP, calculateServiceUp());
}
}
@@ -105,8 +115,6 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
ServiceProblemsLogic.updateProblemsIndicator(this, STOP, "Stop failed with error: "+e);
ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
throw Exceptions.propagate(e);
- } finally {
- setAttribute(Startable.SERVICE_UP, calculateServiceUp());
}
}
@@ -119,13 +127,4 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
public void restart() {
throw new UnsupportedOperationException();
}
-
- private boolean calculateServiceUp() {
- if (!Boolean.TRUE.equals(getMaster().getAttribute(SERVICE_UP))) return false;
-
- for (Entity member : getSlaves().getMembers())
- if (!Boolean.TRUE.equals(member.getAttribute(SERVICE_UP))) return false;
-
- return true;
- }
}
[2/4] incubator-brooklyn git commit: Address PR comments
Posted by al...@apache.org.
Address PR comments
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/8cfe58e5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/8cfe58e5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/8cfe58e5
Branch: refs/heads/master
Commit: 8cfe58e52c031126489a46a89872cd2c9c696552
Parents: 731a111
Author: Mike Zaccardo <mi...@cloudsoftcorp.com>
Authored: Mon Aug 3 13:55:11 2015 -0400
Committer: Mike Zaccardo <mi...@cloudsoftcorp.com>
Committed: Mon Aug 3 13:55:11 2015 -0400
----------------------------------------------------------------------
.../entity/nosql/redis/RedisClusterImpl.java | 91 +++++++++++++-------
1 file changed, 58 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8cfe58e5/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 0da5155..e46ce65 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,21 +23,24 @@ import java.util.Collection;
import brooklyn.enricher.Enrichers;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.AbstractEntity;
-import brooklyn.entity.basic.Entities;
+import brooklyn.entity.basic.Lifecycle;
+import brooklyn.entity.basic.ServiceStateLogic;
+import brooklyn.entity.basic.ServiceStateLogic.ServiceProblemsLogic;
import brooklyn.entity.group.DynamicCluster;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.trait.Startable;
import brooklyn.event.AttributeSensor;
import brooklyn.event.basic.Sensors;
import brooklyn.location.Location;
+import brooklyn.util.exceptions.Exceptions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
- private AttributeSensor<RedisStore> MASTER = Sensors.newSensor(RedisStore.class, "redis.master");
- private AttributeSensor<DynamicCluster> SLAVES = Sensors.newSensor(DynamicCluster.class, "redis.slaves");
+ private static AttributeSensor<RedisStore> MASTER = Sensors.newSensor(RedisStore.class, "redis.master");
+ private static AttributeSensor<DynamicCluster> SLAVES = Sensors.newSensor(DynamicCluster.class, "redis.slaves");
public RedisClusterImpl() {
}
@@ -51,44 +54,65 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
public DynamicCluster getSlaves() {
return getAttribute(SLAVES);
}
+
+ 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
public void start(Collection<? extends Location> locations) {
- RedisStore master = getMaster();
- if (master == null) {
- master = addChild(EntitySpec.create(RedisStore.class));
- setAttribute(MASTER, master);
+ 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);
+ } finally {
+ setAttribute(Startable.SERVICE_UP, calculateServiceUp());
}
+ }
- Entities.manage(master);
+ 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();
- if (slaves == null) {
- slaves = addChild(EntitySpec.create(DynamicCluster.class)
- .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(RedisSlave.class).configure(RedisSlave.MASTER, master)));
- setAttribute(SLAVES, slaves);
- }
-
slaves.invoke(DynamicCluster.START, ImmutableMap.<String, Object>of("locations", ImmutableList.copyOf(locations))).getUnchecked();
-
- setAttribute(Startable.SERVICE_UP, calculateServiceUp());
-
- addEnricher(Enrichers.builder()
- .propagating(RedisStore.HOSTNAME, RedisStore.ADDRESS, RedisStore.SUBNET_HOSTNAME, RedisStore.SUBNET_ADDRESS, RedisStore.REDIS_PORT)
- .from(master)
- .build());
}
@Override
public void stop() {
- DynamicCluster slaves = getSlaves();
- RedisStore master = getMaster();
-
- if (slaves != null) slaves.invoke(DynamicCluster.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
- if (master != null) master.invoke(RedisStore.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
+ 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);
+ } finally {
+ setAttribute(Startable.SERVICE_UP, calculateServiceUp());
+ }
+ }
- setAttribute(Startable.SERVICE_UP, false);
+ private void doStop() {
+ getSlaves().invoke(DynamicCluster.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
+ getMaster().invoke(RedisStore.STOP, ImmutableMap.<String, Object>of()).getUnchecked();
}
@Override
@@ -96,11 +120,12 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
throw new UnsupportedOperationException();
}
- protected boolean calculateServiceUp() {
- boolean up = false;
- for (Entity member : getSlaves().getMembers()) {
- if (Boolean.TRUE.equals(member.getAttribute(SERVICE_UP))) up = true;
- }
- return up;
+ private boolean calculateServiceUp() {
+ if (!Boolean.TRUE.equals(getMaster().getAttribute(SERVICE_UP))) return false;
+
+ for (Entity member : getSlaves().getMembers())
+ if (!Boolean.TRUE.equals(member.getAttribute(SERVICE_UP))) return false;
+
+ return true;
}
}
[4/4] incubator-brooklyn git commit: This closes #782
Posted by al...@apache.org.
This closes #782
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f517b66c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f517b66c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f517b66c
Branch: refs/heads/master
Commit: f517b66c246401c7bc55c4905d714c3ba8691c58
Parents: 60af015 4ce0636
Author: Aled Sage <al...@gmail.com>
Authored: Tue Aug 4 23:40:33 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Aug 4 23:40:33 2015 +0100
----------------------------------------------------------------------
.../entity/group/DynamicClusterTest.java | 14 +++
.../entity/nosql/redis/RedisClusterImpl.java | 99 +++++++++++++++-----
2 files changed, 87 insertions(+), 26 deletions(-)
----------------------------------------------------------------------