'Schedule new update status callback task.
Args:
base_path: mapreduce handlers url base path as string.
mapreduce_spec: mapreduce specification as MapreduceSpec.
serial_id: id of the invocation as int.
queue_name: The queue to schedule this task on. Will use the current
queue of execution if not supplied.'

@classmethod
def reschedule(cls, base_path, mapreduce_spec, serial_id, queue_name=None):

    task_name = ControllerCallbackHandler.get_task_name(mapreduce_spec, serial_id)
    task_params = ControllerCallbackHandler.controller_parameters(mapreduce_spec, serial_id)
    if (not queue_name):
        queue_name = os.environ.get('HTTP_X_APPENGINE_QUEUENAME', 'default')
    try:
        taskqueue.Task(url=(base_path + '/controller_callback'), name=task_name, params=task_params, countdown=_CONTROLLER_PERIOD_SEC).add(queue_name)
    except (taskqueue.TombstonedTaskError, taskqueue.TaskAlreadyExistsError) as e:
        logging.warning('Task    %r    with    params    %r    already    exists.    %s:    %s', task_name, task_params, e.__class__, e)
