From 260c11d89e88888bbda688529e7a73a115539b04 Mon Sep 17 00:00:00 2001 From: Igor Motov Date: Fri, 18 Sep 2020 10:00:36 -0400 Subject: [PATCH] Add an additional cancellation check to the fetch phase (#62577) (#62587) In #62357 we introduced an additional optimization that allows us to skip the most of the fetch phase early if no results are found. This change caused some cancellation test failures that were relying on definitive cancellation during the fetch phase. This commit adds an additional quick cancellation check at the very beginning of the fetch phase to make cancellation process more deterministic. Fixes #62530 --- .../main/java/org/elasticsearch/search/fetch/FetchPhase.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java b/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java index 4986c7b446c55..19d6baf251b0b 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java @@ -95,6 +95,10 @@ public void execute(SearchContext context) { LOGGER.trace("{}", new SearchContextSourcePrinter(context)); } + if (context.isCancelled()) { + throw new TaskCancelledException("cancelled"); + } + if (context.docIdsToLoadSize() == 0) { // no individual hits to process, so we shortcut context.fetchResult().hits(new SearchHits(new SearchHit[0], context.queryResult().getTotalHits(),