In order to be resilient to node restarts, the persistent tasks are using the cluster state instead of a transport service to send requests and responses. The execution is done in six phases:
1. The coordinating node sends an ordinary transport request to the master node to start a new persistent task. This task is handled
PersistentTasksService, which is using
PersistentTasksClusterService to update cluster state with the record about running persistent
2. The master node updates the
PersistentTasksCustomMetadata in the cluster state to indicate
that there is a new persistent task running in the system.
PersistentTasksNodeService running on every node in the cluster monitors changes in
the cluster state and starts execution of all new tasks assigned to the node it is running on.
4. If the task fails to start on the node, the
PersistentTasksNodeService uses the
PersistentTasksCustomMetadata to notify the
PersistentTasksService, which reassigns the action to another node in the cluster.
5. If a task finishes successfully on the node and calls listener.onResponse(), the corresponding persistent action is removed from the cluster state unless removeOnCompletion flag for this task is set to false.
RemovePersistentTaskAction action can be also used to remove the persistent task.
InterfaceDescriptionParameters used to start persistent task
PersistentTaskStaterepresents the state of the persistent tasks, as it is persisted in the cluster state.
ClassDescriptionRepresents a executor node operation that corresponds to a persistent taskActionType that is used by executor node to indicate that the persistent action finished or failed on the node and needs to be removed from the cluster state in case of successful completion or restarted on some other node in case of failure.This component is responsible for execution of persistent tasks.Response upon a successful start or an persistent taskComponent that runs only on the master node and is responsible for assigning running tasks to nodesA cluster state record that contains a list of all running persistent tasksA record that represents a single running persistent taskAn executor of tasks that can survive restart of requesting or executing node.Components that registers all persistent task executorsThis component is responsible for coordination of execution of persistent tasks on individual nodes.This service is used by persistent tasks and allocated persistent tasks to communicate changes to the master node so that the master can update the cluster state and can track of the states of the persistent tasks.This action can be used to add the record for the persistent action to the cluster state.