diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ClusterStateRestCancellationIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ClusterStateRestCancellationIT.java index 60e0833fef7e9..b7d43de531de5 100644 --- a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ClusterStateRestCancellationIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ClusterStateRestCancellationIT.java @@ -71,6 +71,9 @@ public void testClusterStateRestCancellation() throws Exception { final Request clusterStateRequest = new Request(HttpGet.METHOD_NAME, "/_cluster/state"); clusterStateRequest.addParameter("wait_for_metadata_version", Long.toString(Long.MAX_VALUE)); clusterStateRequest.addParameter("wait_for_timeout", "1h"); + if (randomBoolean()) { + clusterStateRequest.addParameter("local", "true"); + } final PlainActionFuture future = new PlainActionFuture<>(); logger.info("--> sending cluster state request"); diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/state/TransportClusterStateAction.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/state/TransportClusterStateAction.java index 70d6ef5cbc5d5..1849311e6f5f1 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/state/TransportClusterStateAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/state/TransportClusterStateAction.java @@ -73,10 +73,9 @@ protected void masterOperation(Task task, final ClusterStateRequest request, fin final Predicate acceptableClusterStateOrFailedPredicate = request.local() ? acceptableClusterStatePredicate - : acceptableClusterStatePredicate.or(clusterState -> - cancellableTask.isCancelled() || clusterState.nodes().isLocalNodeElectedMaster() == false); + : acceptableClusterStatePredicate.or(clusterState -> clusterState.nodes().isLocalNodeElectedMaster() == false); - if (acceptableClusterStatePredicate.test(state)) { + if (acceptableClusterStatePredicate.test(state) && cancellableTask.isCancelled() == false) { ActionListener.completeWith(listener, () -> buildResponse(request, state)); } else { assert acceptableClusterStateOrFailedPredicate.test(state) == false; @@ -112,7 +111,7 @@ public void onTimeout(TimeValue timeout) { listener.onFailure(e); } } - }, acceptableClusterStateOrFailedPredicate); + }, clusterState -> cancellableTask.isCancelled() || acceptableClusterStateOrFailedPredicate.test(clusterState)); } }