Repository: incubator-brooklyn Updated Branches: refs/heads/master c2494dce8 -> f29b3fb10
Prevent DynamicCluster NPE when subclasses have not called super.init() Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a8f191f7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a8f191f7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a8f191f7 Branch: refs/heads/master Commit: a8f191f71f1b08c5c0888761c66436184655879c Parents: c2494dc Author: Sam Corbett <[email protected]> Authored: Tue Oct 20 13:11:05 2015 +0100 Committer: Sam Corbett <[email protected]> Committed: Tue Oct 20 13:11:05 2015 +0100 ---------------------------------------------------------------------- .../entity/group/DynamicClusterImpl.java | 20 +++++++++++++++----- .../nosql/mongodb/MongoDBReplicaSetImpl.java | 1 + 2 files changed, 16 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a8f191f7/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java index 51708da..ac79dd6 100644 --- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java +++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java @@ -170,7 +170,15 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus @Override public void init() { super.init(); - sensors().set(NEXT_CLUSTER_MEMBER_ID, new NextClusterMemberIdSupplier()); + initialiseMemberId(); + } + + private void initialiseMemberId() { + synchronized (mutex) { + if (sensors().get(NEXT_CLUSTER_MEMBER_ID) == null) { + sensors().set(NEXT_CLUSTER_MEMBER_ID, new NextClusterMemberIdSupplier()); + } + } } @Override @@ -778,11 +786,13 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus } @Override - public Entity addNode(Location loc, Map<?,?> extraFlags) { - Map<?,?> createFlags = MutableMap.builder() + public Entity addNode(Location loc, Map<?, ?> extraFlags) { + // In case subclasses are foolish and do not call super.init() when overriding. + initialiseMemberId(); + Map<?, ?> createFlags = MutableMap.builder() .putAll(getCustomChildFlags()) .putAll(extraFlags) - .put(CLUSTER_MEMBER_ID, getAttribute(NEXT_CLUSTER_MEMBER_ID).get()) + .put(CLUSTER_MEMBER_ID, sensors().get(NEXT_CLUSTER_MEMBER_ID).get()) .build(); if (LOG.isDebugEnabled()) { LOG.debug("Creating and adding a node to cluster {}({}) with properties {}", new Object[] { this, getId(), createFlags }); @@ -797,7 +807,7 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus // Continue to call manage(), because some uses of NodeFactory (in tests) still instantiate the // entity via its constructor Entities.manage(entity); - + addMember(entity); return entity; } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a8f191f7/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java index bb29c8b..1a80c3a 100644 --- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java +++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java @@ -137,6 +137,7 @@ public class MongoDBReplicaSetImpl extends DynamicClusterImpl implements MongoDB @Override public void init() { + super.init(); enrichers().add(Enrichers.builder() .aggregating(MongoDBAuthenticationMixins.ROOT_USERNAME) .publishing(MongoDBAuthenticationMixins.ROOT_USERNAME)
