diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java index d6ee78eaf80..8bb254a2174 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java @@ -134,9 +134,9 @@ final class AsyncSearchTask extends SearchTask implements AsyncTask { /** * Cancels the running task and its children. */ - public void cancelTask(Runnable runnable) { + public void cancelTask(Runnable runnable, String reason) { if (isCancelled() == false && isCancelling.compareAndSet(false, true)) { - CancelTasksRequest req = new CancelTasksRequest().setTaskId(searchId.getTaskId()); + CancelTasksRequest req = new CancelTasksRequest().setTaskId(searchId.getTaskId()).setReason(reason); client.admin().cluster().cancelTasks(req, new ActionListener() { @Override public void onResponse(CancelTasksResponse cancelTasksResponse) { @@ -316,8 +316,6 @@ final class AsyncSearchTask extends SearchTask implements AsyncTask { return searchResponse.get().toAsyncSearchResponseWithHeaders(this, expirationTimeMillis); } - - // checks if the search task should be cancelled private synchronized void checkCancellation() { long now = System.currentTimeMillis(); @@ -326,7 +324,7 @@ final class AsyncSearchTask extends SearchTask implements AsyncTask { // we cancel the search task if the initial submit task was cancelled, // this is needed because the task cancellation mechanism doesn't // handle the cancellation of grand-children. - cancelTask(() -> {}); + cancelTask(() -> {}, checkSubmitCancellation.getAsBoolean() ? "submit was cancelled" : "async search has expired"); } } diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportDeleteAsyncSearchAction.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportDeleteAsyncSearchAction.java index ae628edc28e..aa68ff53047 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportDeleteAsyncSearchAction.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportDeleteAsyncSearchAction.java @@ -90,7 +90,7 @@ public class TransportDeleteAsyncSearchAction extends HandledTransportAction new ParameterizedMessage("failed to clean async-search [{}]", searchId.getEncoded()), exc); listener.onFailure(exc); } - }))); + })), "cancelled by user"); } else { // the task was not found (already cancelled, already completed, or invalid id?) // we fail if the response is not found in the index diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java index 10b937f7119..ea93598f68e 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java @@ -91,7 +91,8 @@ public class TransportSubmitAsyncSearchAction extends HandledTransportAction listener) { + private void onFatalFailure(AsyncSearchTask task, Exception error, boolean shouldCancel, String cancelReason, + ActionListener listener) { if (shouldCancel && task.isCancelled() == false) { task.cancelTask(() -> { try { @@ -165,7 +168,7 @@ public class TransportSubmitAsyncSearchAction extends HandledTransportAction taskManager.unregister(task));