code: 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);
          }
        }
      }
    }
docs: Update the runnable status of a node based on resources available.
  This checks both resources and slot availability.
  @param node The node