code: public void reserveSlots(TaskType taskType, JobInProgress job, int numSlots) {
      JobID jobId = job.getJobID();
      if (taskType == TaskType.MAP) {
        if (jobForFallowMapSlot != null && 
            !jobForFallowMapSlot.getJobID().equals(jobId)) {
          throw new RuntimeException(trackerName + " already has " + 
                                     "slots reserved for " + 
                                     jobForFallowMapSlot + "; being"  +
                                     " asked to reserve " + numSlots + " for " + 
                                     jobId);
        }
  
        jobForFallowMapSlot = job;
      } else if (taskType == TaskType.REDUCE){
        if (jobForFallowReduceSlot != null && 
            !jobForFallowReduceSlot.getJobID().equals(jobId)) {
          throw new RuntimeException(trackerName + " already has " + 
                                     "slots reserved for " + 
                                     jobForFallowReduceSlot + "; being"  +
                                     " asked to reserve " + numSlots + " for " + 
                                     jobId);
        }
  
        jobForFallowReduceSlot = job;
      }
      
      job.reserveTaskTracker(this, taskType, numSlots);
      LOG.info(trackerName + ": Reserved " + numSlots + " " + taskType + 
               " slots for " + jobId);
    }
docs: Reserve specified number of slots for a given <code>job</code>.
  @param taskType {@link TaskType} of the task
  @param job the job for which slots on this <code>TaskTracker</code>
  are to be reserved
  @param numSlots number of slots to be reserved