in software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java [316:356]
protected synchronized void onServerPoolMemberChanged(Entity member) {
if (log.isTraceEnabled()) log.trace("For {}, considering membership of {} which is in locations {}",
new Object[]{this, member, member.getLocations()});
//FIXME: make use of servers to be added after cluster initialization.
synchronized (mutex) {
if (belongsInServerPool(member)) {
Optional<Set<Entity>> upNodes = Optional.fromNullable(getUpNodes());
if (upNodes.isPresent()) {
if (!upNodes.get().contains(member)) {
Set<Entity> newNodes = Sets.newHashSet(getUpNodes());
newNodes.add(member);
sensors().set(COUCHBASE_CLUSTER_UP_NODES, newNodes);
//add to set of servers to be added.
if (isClusterInitialized()) {
addServer(member);
}
}
} else {
Set<Entity> newNodes = Sets.newHashSet();
newNodes.add(member);
sensors().set(COUCHBASE_CLUSTER_UP_NODES, newNodes);
if (isClusterInitialized()) {
addServer(member);
}
}
} else {
Set<Entity> upNodes = getUpNodes();
if (upNodes != null && upNodes.contains(member)) {
upNodes.remove(member);
sensors().set(COUCHBASE_CLUSTER_UP_NODES, upNodes);
log.info("Removing couchbase node {}: {}; from cluster", new Object[]{this, member});
}
}
if (log.isTraceEnabled()) log.trace("Done {} checkEntity {}", this, member);
}
}