java.lang.Object
org.apache.flink.runtime.taskmanager.Task
All Implemented Interfaces:
Runnable, PartitionProducerStateProvider, TaskSlotPayload, TaskActions

The Task represents one execution of a parallel subtask on a TaskManager. A Task wraps a Flink operator (which may be a user function) and runs it, providing all services necessary for example to consume input data, produce its results (intermediate result partitions) and communicate with the JobManager.

The Flink operators (implemented as subclasses of TaskInvokable have only data readers, writers, and certain event callbacks. The task connects those to the network stack and actor messages, and tracks the state of the execution and handles exceptions.

Tasks have no knowledge about how they relate to other tasks, or whether they are the first attempt to execute the task, or a repeated attempt. All of that is only known to the JobManager. All the task knows are its own runnable code, the task's configuration, and the IDs of the intermediate results to consume and produce (if any).

Each Task is run by one dedicated thread.

  • Constructor Details

  • Method Details

    • getJobID

      public org.apache.flink.api.common.JobID getJobID()
      Specified by:
      getJobID in interface TaskSlotPayload
    • getJobVertexId

      public JobVertexID getJobVertexId()
    • getExecutionId

      public ExecutionAttemptID getExecutionId()
      Specified by:
      getExecutionId in interface TaskSlotPayload
    • getAllocationId

      public AllocationID getAllocationId()
      Specified by:
      getAllocationId in interface TaskSlotPayload
    • getTaskInfo

      public org.apache.flink.api.common.TaskInfo getTaskInfo()
    • getJobConfiguration

      public org.apache.flink.configuration.Configuration getJobConfiguration()
    • getTaskConfiguration

      public org.apache.flink.configuration.Configuration getTaskConfiguration()
    • getAccumulatorRegistry

      public AccumulatorRegistry getAccumulatorRegistry()
    • getMetricGroup

      public TaskMetricGroup getMetricGroup()
    • getExecutingThread

      public Thread getExecutingThread()
    • getTerminationFuture

      public CompletableFuture<ExecutionState> getTerminationFuture()
      Specified by:
      getTerminationFuture in interface TaskSlotPayload
    • isBackPressured

      public boolean isBackPressured()
    • getExecutionState

      public ExecutionState getExecutionState()
      Returns the current execution state of the task.
      Returns:
      The current execution state of the task.
    • isCanceledOrFailed

      public boolean isCanceledOrFailed()
      Checks whether the task has failed, is canceled, or is being canceled at the moment.
      Returns:
      True is the task in state FAILED, CANCELING, or CANCELED, false otherwise.
    • getFailureCause

      public Throwable getFailureCause()
      If the task has failed, this method gets the exception that caused this task to fail. Otherwise this method returns null.
      Returns:
      The exception that caused the task to fail, or null, if the task has not failed.
    • startTaskThread

      public void startTaskThread()
      Starts the task's thread.
    • run

      public void run()
      The core work method that bootstraps the task and executes its code.
      Specified by:
      run in interface Runnable
    • setupPartitionsAndGates

      @VisibleForTesting public static void setupPartitionsAndGates(ResultPartitionWriter[] producedPartitions, InputGate[] inputGates) throws IOException
      Throws:
      IOException
    • cancelExecution

      public void cancelExecution()
      Cancels the task execution. If the task is already in a terminal state (such as FINISHED, CANCELED, FAILED), or if the task is already canceling this does nothing. Otherwise it sets the state to CANCELING, and, if the invokable code is running, starts an asynchronous thread that aborts that code.

      This method never blocks.

    • failExternally

      public void failExternally(Throwable cause)
      Marks task execution failed for an external reason (a reason other than the task code itself throwing an exception). If the task is already in a terminal state (such as FINISHED, CANCELED, FAILED), or if the task is already canceling this does nothing. Otherwise it sets the state to FAILED, and, if the invokable code is running, starts an asynchronous thread that aborts that code.

      This method never blocks.

      Specified by:
      failExternally in interface TaskActions
      Specified by:
      failExternally in interface TaskSlotPayload
      Parameters:
      cause - of the failure
    • requestPartitionProducerState

      public void requestPartitionProducerState(IntermediateDataSetID intermediateDataSetId, ResultPartitionID resultPartitionId, Consumer<? super PartitionProducerStateProvider.ResponseHandle> responseConsumer)
      Description copied from interface: PartitionProducerStateProvider
      Trigger the producer execution state request.
      Specified by:
      requestPartitionProducerState in interface PartitionProducerStateProvider
      Parameters:
      intermediateDataSetId - ID of the parent intermediate data set.
      resultPartitionId - ID of the result partition to check. This identifies the producing execution and partition.
      responseConsumer - consumer for the response handle.
    • triggerCheckpointBarrier

      public void triggerCheckpointBarrier(long checkpointID, long checkpointTimestamp, CheckpointOptions checkpointOptions)
      Calls the invokable to trigger a checkpoint.
      Parameters:
      checkpointID - The ID identifying the checkpoint.
      checkpointTimestamp - The timestamp associated with the checkpoint.
      checkpointOptions - Options for performing this checkpoint.
    • notifyCheckpointComplete

      public void notifyCheckpointComplete(long checkpointID)
    • notifyCheckpointAborted

      public void notifyCheckpointAborted(long checkpointID, long latestCompletedCheckpointId)
    • notifyCheckpointSubsumed

      public void notifyCheckpointSubsumed(long checkpointID)
    • deliverOperatorEvent

      public void deliverOperatorEvent(OperatorID operator, org.apache.flink.util.SerializedValue<OperatorEvent> evt) throws org.apache.flink.util.FlinkException
      Dispatches an operator event to the invokable task.

      If the event delivery did not succeed, this method throws an exception. Callers can use that exception for error reporting, but need not react with failing this task (this method takes care of that).

      Throws:
      org.apache.flink.util.FlinkException - This method throws exceptions indicating the reason why delivery did not succeed.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • logTaskThreadStackTrace

      public static void logTaskThreadStackTrace(Thread thread, String taskName, long timeoutMs, String action)