in software/webapp/src/main/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java [194:225]
protected void refreshGroupMembership() {
try {
if (log.isDebugEnabled()) log.debug("GeoDns {} refreshing targets", this);
if (targetEntityProvider == null)
return;
if (targetEntityProvider instanceof DynamicGroup)
((DynamicGroup) targetEntityProvider).rescanEntities();
Set<Entity> pool = MutableSet.copyOf(targetEntityProvider instanceof Group ? targetEntityProvider.getMembers(): targetEntityProvider.getChildren());
if (log.isDebugEnabled()) log.debug("GeoDns {} refreshing targets, pool now {}", this, pool);
boolean changed = false;
boolean filterForRunning = Boolean.TRUE.equals(config().get(FILTER_FOR_RUNNING));
Set<Entity> previousOnes = MutableSet.copyOf(targetHosts.keySet());
for (Entity e: pool) {
if (!filterForRunning || Lifecycle.RUNNING.equals(e.sensors().get(Attributes.SERVICE_STATE_ACTUAL))) {
previousOnes.remove(e);
changed |= addTargetHost(e);
}
}
// anything left in previousOnes is no longer applicable
for (Entity e: previousOnes) {
changed |= removeTargetHost(e, false);
}
// do a periodic full update hourly once we are active (the latter is probably not needed)
if (changed || (lastUpdate > 0 && Time.hasElapsedSince(lastUpdate, Duration.ONE_HOUR))) {
update();
}
} catch (Exception e) {
log.error("Problem refreshing group membership: "+e, e);
}
}