code: synchronized void decommissionNodes(Set<String> hosts)
    throws IOException {
      LOG.info("Decommissioning " + hosts.size() + " nodes");
      // create a list of tracker hostnames
      synchronized (taskTrackers) {
        synchronized (trackerExpiryQueue) {
          int trackersDecommissioned = 0;
          for (String host : hosts) {
            LOG.info("Decommissioning host " + host);
            Set<TaskTracker> trackers = hostnameToTaskTracker.remove(host);
            if (trackers != null) {
              for (TaskTracker tracker : trackers) {
                LOG.info("Decommission: Losing tracker " + tracker.getTrackerName() +
                         " on host " + host);
                removeTracker(tracker);
              }
              trackersDecommissioned += trackers.size();
            }
            LOG.info("Host " + host + " is ready for decommissioning");
          }
        }
      }
    }
docs: main decommission