Browse Source

Fix ClusterStateRestCancellationIT (#72407)

Take into account task cancellation for local requests too

Closes #72056
Francisco Fernández Castaño 4 years ago
parent
commit
0583433c0f

+ 3 - 0
qa/smoke-test-http/src/test/java/org/elasticsearch/http/ClusterStateRestCancellationIT.java

@@ -71,6 +71,9 @@ public class ClusterStateRestCancellationIT extends HttpSmokeTestCase {
         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<Void> future = new PlainActionFuture<>();
         logger.info("--> sending cluster state request");

+ 3 - 4
server/src/main/java/org/elasticsearch/action/admin/cluster/state/TransportClusterStateAction.java

@@ -73,10 +73,9 @@ public class TransportClusterStateAction extends TransportMasterNodeReadAction<C
 
         final Predicate<ClusterState> 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 class TransportClusterStateAction extends TransportMasterNodeReadAction<C
                         listener.onFailure(e);
                     }
                 }
-            }, acceptableClusterStateOrFailedPredicate);
+            }, clusterState -> cancellableTask.isCancelled() || acceptableClusterStateOrFailedPredicate.test(clusterState));
         }
     }