Package org.elasticsearch.persistent


package org.elasticsearch.persistent
The Persistent Tasks Executors are responsible for executing restartable tasks that can survive disappearance of a coordinating and executor nodes.

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 by the PersistentTasksService, which is using PersistentTasksClusterService to update cluster state with the record about running persistent task.

2. The master node updates the PersistentTasksCustomMetadata in the cluster state to indicate that there is a new persistent task running in the system.

3. The 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.

6. The RemovePersistentTaskAction action can be also used to remove the persistent task.