diff --git a/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java index 1fc4cec9f80..9e4723f0fe6 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java @@ -125,6 +125,7 @@ public abstract class ESRestTestCase extends ESTestCase { @After public final void cleanUpCluster() throws Exception { wipeCluster(); + waitForClusterStateUpdatesToFinish(); logIfThereAreRunningTasks(); } @@ -253,6 +254,22 @@ public abstract class ESRestTestCase extends ESTestCase { */ } + /** + * Waits for the cluster state updates to have been processed, so that no cluster + * state updates are still in-progress when the next test starts. + */ + private void waitForClusterStateUpdatesToFinish() throws Exception { + assertBusy(() -> { + try { + Response response = adminClient().performRequest("GET", "_cluster/pending_tasks"); + List tasks = (List) entityAsMap(response).get("tasks"); + assertTrue(tasks.isEmpty()); + } catch (IOException e) { + fail("cannot get cluster's pending tasks: " + e.getMessage()); + } + }); + } + /** * Used to obtain settings for the REST client that is used to send REST requests. */