Class TaskManagerImpl

java.lang.Object
com.atlassian.jira.task.TaskManagerImpl
All Implemented Interfaces:
InitializingComponent, TaskManager, TaskProgressListener, EventListener

public class TaskManagerImpl extends Object implements TaskManager, TaskProgressListener, InitializingComponent
An implementation of a TaskManager. This manager uses an ExecutorService to run submitted tasks.
Since:
3.13
  • Field Details

  • Constructor Details

  • Method Details

    • afterInstantiation

      public void afterInstantiation() throws Exception
      Description copied from interface: InitializingComponent
      Called after all the beans are constructed and the ApplicationContext is fully populated. Order of execution is order of bean creation, driven by InitializingComponentProcessor.
      Specified by:
      afterInstantiation in interface InitializingComponent
      Throws:
      Exception
    • submitTask

      public <V extends Serializable> TaskDescriptor<V> submitTask(@Nonnull Callable<V> callable, @Nonnull String taskDescription, @Nonnull TaskContext taskContext) throws RejectedExecutionException
      Description copied from interface: TaskManager
      This submits a Callable task to the manager which can then be started at the managers discretion, but hopefully very soon. The TaskDescriptor returned is a snapshot of the task's state when the method returns and will not change to reflect the task's future state changes. The task's ID can be found in the returned TaskDescriptor. The task is not cancellable.
      Specified by:
      submitTask in interface TaskManager
      Parameters:
      callable - the long running task
      taskDescription - the description of the task
      taskContext - some stateful context that the task knows about
      Returns:
      a TaskDescriptor for the new long running task. The returned descriptor is a snapshot of the task state when the method returns and will not reflect any future changes.
      Throws:
      RejectedExecutionException - if the task manager is being shutdown and cannot accept new tasks.
      AlreadyExecutingException - if a task with an equal TaskContext is already running in the task manager.
    • submitTask

      public <V extends Serializable> TaskDescriptor<V> submitTask(@Nonnull Callable<V> callable, @Nonnull String taskDescription, @Nonnull TaskContext taskContext, boolean cancellable)
      Description copied from interface: TaskManager
      This submits a Callable task to the manager which can then be started at the managers discretion, but hopefully very soon. The TaskDescriptor returned is a snapshot of the task's state when the method returns and will not change to reflect the task's future state changes. The task's ID can be found in the returned TaskDescriptor.
      Specified by:
      submitTask in interface TaskManager
      Parameters:
      callable - the long running task
      taskDescription - the description of the task
      taskContext - some stateful context that the task knows about
      cancellable - If set to true indicates that this potentially long running task supports being cancelled.
      Returns:
      a TaskDescriptor for the new long running task. The returned descriptor is a snapshot of the task state when the method returns and will not reflect any future changes.
    • submitTask

      public <V extends Serializable> TaskDescriptor<V> submitTask(@Nonnull Callable<V> callable, @Nonnull String taskDescription, @Nonnull TaskContext taskContext, boolean cancellable, @Nullable SpanningOperation spanningOperation) throws RejectedExecutionException
      Description copied from interface: TaskManager
      This submits a Callable task to the manager which can then be started at the managers discretion, but hopefully very soon. The TaskDescriptor returned is a snapshot of the task's state when the method returns and will not change to reflect the task's future state changes. The task's ID can be found in the returned TaskDescriptor.
      Specified by:
      submitTask in interface TaskManager
      Parameters:
      callable - the long running task
      taskDescription - the description of the task
      taskContext - some stateful context that the task knows about
      cancellable - If set to true indicates that this potentially long running task supports being cancelled.
      spanningOperation - Operation that this task is part of
      Returns:
      a TaskDescriptor for the new long running task. The returned descriptor is a snapshot of the task state when the method returns and will not reflect any future changes.
      Throws:
      RejectedExecutionException - if the task manager is being shutdown and cannot accept new tasks.
      AlreadyExecutingException - if a task with an equal TaskContext is already running in the task manager.
    • removeTask

      public void removeTask(@Nonnull Long taskId)
      Description copied from interface: TaskManager
      Remove a task from the manager. The task will still continue to execute if it has not already completed.
      Specified by:
      removeTask in interface TaskManager
      Parameters:
      taskId - the task identifier.
    • cancelTask

      public void cancelTask(@Nonnull Long taskId) throws IllegalStateException
      Description copied from interface: TaskManager
      Cancel a running task. If the task is not running this message is a no-op.
      Specified by:
      cancelTask in interface TaskManager
      Parameters:
      taskId - the task identifier.
      Throws:
      IllegalStateException - if the task is not cancellable
    • cancelTaskIfRunningLocally

      public void cancelTaskIfRunningLocally(@Nonnull Long taskId)
      Description copied from interface: TaskManager
      Cancel a running task if it is running on this cluster node.
      Specified by:
      cancelTaskIfRunningLocally in interface TaskManager
      Parameters:
      taskId - the task identifier.
    • isCancellable

      public boolean isCancellable(@Nonnull Long taskId)
      Description copied from interface: TaskManager
      Returns true if the task can be cancelled. This does not take into account if the task is actually running or not.
      Specified by:
      isCancellable in interface TaskManager
      Parameters:
      taskId - the task identifier.
      Returns:
      true if the task can be cancelled.
    • isCancelled

      public boolean isCancelled(Long taskId)
      Description copied from interface: TaskManager
      Return true if this task has been cancelled.
      Specified by:
      isCancelled in interface TaskManager
      Parameters:
      taskId - the task identifier.
      Returns:
      true if this task has been cancelled
    • start

      public void start()
      Description copied from interface: TaskManager
      Start the task manager. Normally the task manager starts on construction, but if it is shutdown, you may need to restart it. If the task manager is not shutdown, does nothing.
      Specified by:
      start in interface TaskManager
    • shutdownAndWait

      public boolean shutdownAndWait(long timeout, TimeUnit unit)
      Description copied from interface: TaskManager
      Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted.

      It will wait for at most timeout and then return true if the underlying execution threads are terminated completely.

      Specified by:
      shutdownAndWait in interface TaskManager
      Parameters:
      timeout - the maximum time to wait for a graceful shutdown.
      unit - the time unit of the timeout argument.
      Returns:
      true if the underlying execution threads have terminated completely.
    • shutdownNow

      public void shutdownNow()
      Description copied from interface: TaskManager
      Attempts to aggressively stop all actively executing tasks, halts the processing of waiting tasks.
      Specified by:
      shutdownNow in interface TaskManager
    • awaitUntilActiveTasksComplete

      public boolean awaitUntilActiveTasksComplete(long seconds)
      Description copied from interface: TaskManager
      Waits on the TaskManager until all current active tasks are completed. Calling this method does not stop tasks being added.
      Specified by:
      awaitUntilActiveTasksComplete in interface TaskManager
      Parameters:
      seconds - the number of seconds to wait.
      Returns:
      true if all the active tasks are completed before the timeout, false otherwise.
    • waitUntilTaskCompletes

      public void waitUntilTaskCompletes(Long taskId) throws ExecutionException, InterruptedException
      Description copied from interface: TaskManager
      Wait for a specific task to complete.
      Specified by:
      waitUntilTaskCompletes in interface TaskManager
      Parameters:
      taskId - Id of task to wait for
      Throws:
      ExecutionException
      InterruptedException
    • getLiveTask

      public <V extends Serializable> TaskDescriptor<V> getLiveTask(@Nonnull TaskContext taskContext)
      Description copied from interface: TaskManager
      Return the live task associated with the passed context, if one exists.
      Specified by:
      getLiveTask in interface TaskManager
      Parameters:
      taskContext - the context to search for.
      Returns:
      currently live task associated with the passed context. The descriptor returned is a snapshot of the task state when the method returns will not reflect any future changes. null will be returned when no matching task can be found.
    • getTask

      public <V extends Serializable> TaskDescriptor<V> getTask(Long taskId)
      Description copied from interface: TaskManager
      Returns the TaskDescriptor of the task that is identified by the passed id.
      Specified by:
      getTask in interface TaskManager
      Parameters:
      taskId - the id of the task to retrieve, if null then null will be returned
      Returns:
      a TaskDescriptor or null if the manager has not such task. The descriptor returned is a snapshot of the task state when the method returns will not reflect any future changes. null will be returned when no matching task can be found.
    • hasLiveTaskWithContext

      public boolean hasLiveTaskWithContext(@Nonnull TaskContext taskContext)
      Description copied from interface: TaskManager
      Returns true if the there are live tasks (running or submitted) that have a task context that is EQUAL to the passed in taskContext.
      Specified by:
      hasLiveTaskWithContext in interface TaskManager
      Parameters:
      taskContext - the specific task context (which implements equals() properly)
      Returns:
      true if there are any tasks with an equal task context
    • hasTaskWithContext

      public boolean hasTaskWithContext(@Nonnull TaskContext taskContext)
      Description copied from interface: TaskManager
      Returns true if the there are any tasks (submitted, running or finished) that have a task context that is EQUAL to the passed in taskContext.
      Specified by:
      hasTaskWithContext in interface TaskManager
      Parameters:
      taskContext - the specific task context (which implements equals() properly)
      Returns:
      true if there are any tasks with an equal task context
    • findFirstTask

      public TaskDescriptor<?> findFirstTask(@Nonnull TaskMatcher matcher)
      Description copied from interface: TaskManager
      Find the first task that "matches" according to the passed matcher.
      Specified by:
      findFirstTask in interface TaskManager
      Parameters:
      matcher - the condition used to find the task.
      Returns:
      task, for many matches favor TaskDescriptor with higher taskId (i.e. latest task), null if not found
    • findTasks

      public Collection<TaskDescriptor<?>> findTasks(@Nonnull TaskMatcher matcher)
      Description copied from interface: TaskManager
      Find all the tasks that "match" according to the passed matcher.
      Specified by:
      findTasks in interface TaskManager
      Parameters:
      matcher - the condition used to find the task.
      Returns:
      the tasks that "match" according to the passed matcher. The descriptors returned are a snapshot of the task state when the method returns will not reflect any future changes. An empty collection is returned when no tasks are matched.
    • getAllTasks

      public Collection<TaskDescriptor<?>> getAllTasks()
      Description copied from interface: TaskManager
      Return a collection of TaskDescriptors currently within the manager. This will include tasks that are yet to start, tasks that are running and completed tasks.

      The returned collection is sorted by task id, which should be in addition order.

      Specified by:
      getAllTasks in interface TaskManager
      Returns:
      a collection of TaskDescriptors. The descriptors returned are a snapshot of each task state when the method returns will not reflect any future changes. An empty collection is returned when there are no current tasks.
    • getLiveTasks

      public Collection<TaskDescriptor<?>> getLiveTasks()
      Description copied from interface: TaskManager
      Return a collection of submitted or running TaskDescriptors in the manager.

      The returned collection is sorted by task id, which should be in addition order.

      Specified by:
      getLiveTasks in interface TaskManager
      Returns:
      a collection of running TaskDescriptors. The descriptors returned are a snapshot of each task state when the method returns and will not reflect any future changes. An empty collection is returned when there are no descriptors to return.
    • onProgressMade

      public void onProgressMade(TaskProgressEvent event)
      Description copied from interface: TaskProgressListener
      Called to indicate that task progress has been made. The passed event indicates the current progress of the task.
      Specified by:
      onProgressMade in interface TaskProgressListener
      Parameters:
      event - the current progress of the task.