Class NodeLeftExecutor
- All Implemented Interfaces:
ClusterStateTaskExecutor<NodeLeftExecutor.Task>
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface org.elasticsearch.cluster.ClusterStateTaskExecutor
ClusterStateTaskExecutor.BatchExecutionContext<T extends ClusterStateTaskListener>, ClusterStateTaskExecutor.TaskContext<T extends ClusterStateTaskListener> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionexecute(ClusterStateTaskExecutor.BatchExecutionContext<NodeLeftExecutor.Task> batchExecutionContext) Update the cluster state based on the current state and the given tasks.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.elasticsearch.cluster.ClusterStateTaskExecutor
clusterStatePublished, describeTasks, runOnlyOnMaster
-
Constructor Details
-
NodeLeftExecutor
-
-
Method Details
-
execute
public ClusterState execute(ClusterStateTaskExecutor.BatchExecutionContext<NodeLeftExecutor.Task> batchExecutionContext) throws Exception Description copied from interface:ClusterStateTaskExecutorUpdate the cluster state based on the current state and the given tasks. ReturnbatchExecutionContext.initialState()to avoid publishing any update.If this method throws an exception then the cluster state is unchanged and every task's
ClusterStateTaskListener.onFailure(java.lang.Exception)method is called.A common implementation pattern is to iterate through the tasks, constructing a new and updated
ClusterStatefor each one. This works ok but beware that constructing a whole newClusterStatecan be somewhat expensive, and there may sometimes be surprisingly many tasks to process in the batch. If it's possible to accumulate the effects of the tasks at a lower level then you should do that instead.Returning
batchExecutionContext.initialState()is an important and useful optimisation in most cases, but note that this fast-path exposes APIs to the risk of stale reads in the vicinity of a master failover: a nodeNthat handles such a no-op task batch does not verify with its peers that it's still the master, and if it's not the master then another nodeMmay already have become master and updated the state in a way that would be inconsistent with the response thatNsends back to clients.- Specified by:
executein interfaceClusterStateTaskExecutor<NodeLeftExecutor.Task>- Returns:
- The resulting cluster state after executing all the tasks. If
batchExecutionContext.initialState()is returned then no update is published. - Throws:
Exception
-