code: def reschedule(cls,
                   mapreduce_state,
                   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")
  
      controller_callback_task = model.HugeTask(
          url=(mapreduce_spec.params["base_path"] + "/controller_callback/" +
               mapreduce_spec.mapreduce_id),
          name=task_name, params=task_params,
          countdown=parameters.config._CONTROLLER_PERIOD_SEC,
          parent=mapreduce_state,
          headers=util._get_task_headers(mapreduce_spec.mapreduce_id))
  
      if not _run_task_hook(mapreduce_spec.get_hooks(),
                            "enqueue_controller_task",
                            controller_callback_task,
                            queue_name):
        try:
          controller_callback_task.add(queue_name)
        except (taskqueue.TombstonedTaskError,
                taskqueue.TaskAlreadyExistsError), e:
          logging.warning("Task %r with params %r already exists. %s: %s",
                          task_name, task_params, e.__class__, e)
docs: Schedule new update status callback task.
  
      Args:
        mapreduce_state: mapreduce state as model.MapreduceState
        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.