protected void refreshGroupMembership()

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);
        }
    }