private synchronized TaskInProgress findNewReduceTask(TaskTrackerStatus status) {
		// Find a reduce task
		for (TaskInProgress taskInProgress : reduceTaskList) {
			// Init TIP or Failed TIP can be assiend to taskTracker
			boolean canAssigntoThisTaskTracker = taskInProgress.getState().isInit()
					|| (taskInProgress.getState().isPartialfailed() && !taskInProgress.getTaskTrackerList().contains(
							status.getTaskTrackerID()));
			// TODO
			canAssigntoThisTaskTracker = taskInProgress.getState().isInit()
					|| taskInProgress.getState().isPartialfailed();
			if (canAssigntoThisTaskTracker) {
				return taskInProgress;
			}
		}
		// No reduce task can be assigned, return null
		return null;
	}