Ejemplo n.º 1
0
 /**
  * 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);
         }
       }
     }
   }
 }
Ejemplo n.º 2
0
 /**
  * Update the runnable status of a node based on resources available. This checks both resources
  * and slot availability.
  *
  * @param node The node
  */
 private void updateRunnability(ClusterNode node) {
   synchronized (node) {
     for (Map.Entry<ResourceType, RunnableIndices> entry : typeToIndices.entrySet()) {
       ResourceType type = entry.getKey();
       RunnableIndices r = entry.getValue();
       ResourceRequest unitReq = Utilities.getUnitResourceRequest(type);
       boolean currentlyRunnable = r.hasRunnable(node);
       boolean shouldBeRunnable = node.checkForGrant(unitReq, resourceLimit);
       if (currentlyRunnable && !shouldBeRunnable) {
         LOG.info("Node " + node.getName() + " is no longer " + type + " runnable");
         r.deleteRunnable(node);
       } else if (!currentlyRunnable && shouldBeRunnable) {
         LOG.info("Node " + node.getName() + " is now " + type + " runnable");
         r.addRunnable(node);
       }
     }
   }
 }