in software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterImpl.java [453:488]
public void update() {
synchronized (mutex) {
// Update our seeds, as necessary
seedTracker.refreshSeeds();
// Choose the first available cluster member to set host and port (and compute one-up)
Optional<Entity> upNode = Iterables.tryFind(getMembers(), EntityPredicates.attributeEqualTo(SERVICE_UP, Boolean.TRUE));
if (upNode.isPresent()) {
sensors().set(HOSTNAME, upNode.get().getAttribute(Attributes.HOSTNAME));
sensors().set(THRIFT_PORT, upNode.get().getAttribute(CassandraNode.THRIFT_PORT));
List<String> currentNodes = getAttribute(CASSANDRA_CLUSTER_NODES);
Set<String> oldNodes = (currentNodes != null) ? ImmutableSet.copyOf(currentNodes) : ImmutableSet.<String>of();
Set<String> newNodes = MutableSet.<String>of();
for (Entity member : getMembers()) {
if (member instanceof CassandraNode && Boolean.TRUE.equals(member.getAttribute(SERVICE_UP))) {
String hostname = member.getAttribute(Attributes.HOSTNAME);
Integer thriftPort = member.getAttribute(CassandraNode.THRIFT_PORT);
if (hostname != null && thriftPort != null) {
newNodes.add(HostAndPort.fromParts(hostname, thriftPort).toString());
}
}
}
if (Sets.symmetricDifference(oldNodes, newNodes).size() > 0) {
sensors().set(CASSANDRA_CLUSTER_NODES, MutableList.copyOf(newNodes));
}
} else {
sensors().set(HOSTNAME, null);
sensors().set(THRIFT_PORT, null);
sensors().set(CASSANDRA_CLUSTER_NODES, Collections.<String>emptyList());
}
ServiceNotUpLogic.updateNotUpIndicatorRequiringNonEmptyList(this, CASSANDRA_CLUSTER_NODES);
}
}