/** * Refresh the includes/excludes information. * * @throws IOException */ 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); } } } } }
/** * NodeManager constructor given a cluster manager and a {@link HostsFileReader} for * includes/excludes lists * * @param clusterManager the cluster manager * @param hostsReader the host reader for includes/excludes */ public NodeManager(ClusterManager clusterManager, HostsFileReader hostsReader) { this.hostsReader = hostsReader; LOG.info( "Included hosts: " + hostsReader.getHostNames().size() + " Excluded hosts: " + hostsReader.getExcludedHosts().size()); this.clusterManager = clusterManager; this.expireNodesThread = new Thread(this.expireNodes, "expireNodes"); this.expireNodesThread.setDaemon(true); this.expireNodesThread.start(); this.faultManager = new FaultManager(this); }
/** @return All the configured hosts. */ public Set<String> getAllNodes() { return hostsReader.getHostNames(); }