code: public synchronized void refreshNodes() throws IOException {
      hostsReader.refresh();
      LOG.info("After refresh Included hosts: " +
          hostsReader.getHostNames().size() +
          " Excluded hosts: " + hostsReader.getExcludedHosts().size());
      Set<String> newHosts = hostsReader.getHostNames();
      Set<String> newExcludes = hostsReader.getExcludedHosts();
      Set<ClusterNode> hostsToExclude = new HashSet<ClusterNode>();
      for (ClusterNode tmpNode : nameToNode.values()) {
        String host = tmpNode.getHost();
        // Check if not included or explicitly excluded.
        if (!newHosts.contains(host) || newExcludes.contains(host)) {
          hostsToExclude.add(tmpNode);
        }
      }
      for (ClusterNode node: hostsToExclude) {
        synchronized (node) {
          for (Map.Entry<ResourceType, RunnableIndices> entry :
            typeToIndices.entrySet()) {
            ResourceType type = entry.getKey();
            RunnableIndices r = entry.getValue();
            if (r.hasRunnable(node)) {
              LOG.info("Node " + node.getName() + " is no longer " +
                type + " runnable because it is excluded");
              r.deleteRunnable(node);
            }
          }
        }
      }
    }
docs: Refresh the includes/excludes information.
  @throws IOException