code: public Task obtainJobSetupTask(
        String taskTrackerName, String hostName, boolean isMapSlot) {
      synchronized (lockObject) {
        if (!tasksInited || !jobSetupCleanupNeeded) {
          return null;
        }
  
        if (!(tasksInited && status.getRunState() == JobStatus.PREP &&
             !launchedSetup && !jobKilled && !jobFailed)) {
          return null;
        }
        List<TaskInProgress> setupTaskList = new ArrayList<TaskInProgress>();
        if (isMapSlot) {
          setupTaskList.add(setup[0]);
        } else {
          setupTaskList.add(setup[1]);
        }
        TaskInProgress tip = findTaskFromList(setupTaskList, hostName, false);
        if (tip == null) {
          return null;
        }
  
        // Now launch the setupTask
        Task result = tip.getTaskToRun(taskTrackerName);
        if (result != null) {
          addRunningTaskToTIPUnprotected(tip, result.getTaskID(), taskTrackerName, hostName,
              true);
        }
        return result;
      }
    }
docs: Return a SetupTask, if appropriate, to run on the given tasktracker