org.elasticsearch.cluster.ClusterStateUpdateTask Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.cluster;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.Priority;
import org.elasticsearch.common.unit.TimeValue;
import java.util.List;
/**
* A task that can update the cluster state.
*/
public abstract class ClusterStateUpdateTask
implements ClusterStateTaskConfig, ClusterStateTaskExecutor, ClusterStateTaskListener {
private final Priority priority;
@Nullable
private final TimeValue timeout;
public ClusterStateUpdateTask() {
this(Priority.NORMAL);
}
public ClusterStateUpdateTask(Priority priority) {
this(priority, null);
}
public ClusterStateUpdateTask(TimeValue timeout) {
this(Priority.NORMAL, timeout);
}
public ClusterStateUpdateTask(Priority priority, TimeValue timeout) {
this.priority = priority;
this.timeout = timeout;
}
@Override
public final ClusterTasksResult execute(ClusterState currentState, List tasks)
throws Exception {
ClusterState result = execute(currentState);
return ClusterTasksResult.builder().successes(tasks).build(result);
}
@Override
public String describeTasks(List tasks) {
return ""; // one of task, source is enough
}
/**
* Update the cluster state based on the current state. Return the *same instance* if no state
* should be changed.
*/
public abstract ClusterState execute(ClusterState currentState) throws Exception;
/**
* A callback called when execute fails.
*/
public abstract void onFailure(String source, Exception e);
@Override
public final void clusterStatePublished(ClusterChangedEvent clusterChangedEvent) {
// final, empty implementation here as this method should only be defined in combination
// with a batching executor as it will always be executed within the system context.
}
/**
* If the cluster state update task wasn't processed by the provided timeout, call
* {@link ClusterStateTaskListener#onFailure(String, Exception)}. May return null to indicate no timeout is needed (default).
*/
@Nullable
public final TimeValue timeout() {
return timeout;
}
@Override
public final Priority priority() {
return priority;
}
/**
* Marked as final as cluster state update tasks should only run on master.
* For local requests, use {@link LocalClusterUpdateTask} instead.
*/
@Override
public final boolean runOnlyOnMaster() {
return true;
}
}