'Schedule slice scanning by adding it to the task queue.
Args:
base_path: base_path of mapreduce request handlers as string.
mapreduce_spec: mapreduce specification as MapreduceSpec.
shard_id: current shard id as string.
slice_id: slice id as int.
input_reader: remaining InputReader for given shard.
queue_name: Optional queue to run on; uses the current queue of
execution or the default queue if unspecified.
eta: Absolute time when the MR should execute. May not be specified
if \'countdown\' is also supplied. This may be timezone-aware or
timezone-naive.
countdown: Time in seconds into the future that this MR should execute.
Defaults to zero.'

@classmethod
def schedule_slice(cls, base_path, mapreduce_spec, shard_id, slice_id, input_reader, queue_name=None, eta=None, countdown=None):

    task_params = MapperWorkerCallbackHandler.worker_parameters(mapreduce_spec, shard_id, slice_id, input_reader)
    task_name = MapperWorkerCallbackHandler.get_task_name(shard_id, slice_id)
    queue_name = os.environ.get('HTTP_X_APPENGINE_QUEUENAME', (queue_name or 'default'))
    try:
        taskqueue.Task(url=(base_path + '/worker_callback'), params=task_params, name=task_name, eta=eta, countdown=countdown).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)
