private boolean broadcastClusterStateToEligibleNodes() {
        // If there's a pending DB store we have not yet been able to store the
        // current state bundle to ZK and must therefore _not_ allow it to be published.
        if (database.hasPendingClusterStateMetaDataStore()) {
            context.log(logger, Level.FINE, "Can't publish current cluster state as it has one or more pending ZooKeeper stores");
            return false;
        }
        boolean sentAny = false;
        // Give nodes a fair chance to respond first time to state gathering requests, so we don't
        // disturb system when we take over. Allow anyway if we have states from all nodes.
        long currentTime = timer.getCurrentTimeInMillis();
        if ((currentTime >= firstAllowedStateBroadcast || cluster.allStatesReported())
            && currentTime >= nextStateSendTime)
        {
            if (inMasterMoratorium) {
                context.log(logger, Level.INFO, currentTime < firstAllowedStateBroadcast ?
                         "Master moratorium complete: all nodes have reported in" :
                         "Master moratorium complete: timed out waiting for all nodes to report in");
                // Reset firstAllowedStateBroadcast to make sure all future times are after firstAllowedStateBroadcast
                firstAllowedStateBroadcast = currentTime;
                inMasterMoratorium = false;
            }
            sentAny = systemStateBroadcaster.broadcastNewStateBundleIfRequired(
                    databaseContext, communicator, database.getLastKnownStateBundleVersionWrittenBySelf());
            if (sentAny) {
                // FIXME won't this inhibit resending to unresponsive nodes?
                nextStateSendTime = currentTime + options.minTimeBetweenNewSystemStates();
            }
        }
        // Always allow activations if we've already broadcasted a state
        sentAny |= systemStateBroadcaster.broadcastStateActivationsIfRequired(databaseContext, communicator);
        return sentAny;
    }
This is called when the options field has been set to a new set of options
clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java