Skip to content

Commit 62b0e65

Browse files
Hendrik Muhsmartijnvg
Hendrik Muhs
authored andcommitted
Added PersistentTasksService#waitForPersistentTasksStatus(...) method to allow callers to wait when an executor node has updated its task status.
1 parent 34b3ad4 commit 62b0e65

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

server/src/main/java/org/elasticsearch/persistent/PersistentTasksService.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,32 @@ public void onTimeout(TimeValue timeout) {
156156
}
157157
}
158158

159+
public void waitForPersistentTasksStatus(Predicate<PersistentTasksCustomMetaData> predicate,
160+
@Nullable TimeValue timeout, ActionListener<Boolean> listener) {
161+
ClusterStateObserver stateObserver = new ClusterStateObserver(clusterService, timeout,
162+
logger, threadPool.getThreadContext());
163+
if (predicate.test(stateObserver.setAndGetObservedState().metaData().custom(PersistentTasksCustomMetaData.TYPE))) {
164+
listener.onResponse(true);
165+
} else {
166+
stateObserver.waitForNextChange(new ClusterStateObserver.Listener() {
167+
@Override
168+
public void onNewClusterState(ClusterState state) {
169+
listener.onResponse(true);
170+
}
171+
172+
@Override
173+
public void onClusterServiceClose() {
174+
listener.onFailure(new NodeClosedException(clusterService.localNode()));
175+
}
176+
177+
@Override
178+
public void onTimeout(TimeValue timeout) {
179+
listener.onFailure(new IllegalStateException("timed out after " + timeout));
180+
}
181+
}, clusterState -> predicate.test(clusterState.metaData().custom(PersistentTasksCustomMetaData.TYPE)));
182+
}
183+
}
184+
159185
public interface WaitForPersistentTaskStatusListener<Request extends PersistentTaskRequest>
160186
extends ActionListener<PersistentTask<Request>> {
161187
default void onTimeout(TimeValue timeout) {

0 commit comments

Comments
 (0)