From aba54e8af84bd3353fa58a3d53b977908e527fa1 Mon Sep 17 00:00:00 2001 From: Ignacio Vera Date: Mon, 17 Mar 2025 15:59:08 +0100 Subject: [PATCH] Don't generate stacktrace in TaskCancelledException (#125002) --- docs/changelog/125002.yaml | 5 +++++ .../aggregations/bucket/SearchCancellationIT.java | 7 ++++--- .../org/elasticsearch/tasks/TaskCancelledException.java | 5 +++++ 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 docs/changelog/125002.yaml diff --git a/docs/changelog/125002.yaml b/docs/changelog/125002.yaml new file mode 100644 index 000000000000..6b811cc80f51 --- /dev/null +++ b/docs/changelog/125002.yaml @@ -0,0 +1,5 @@ +pr: 125002 +summary: Don't generate stacktrace in `TaskCancelledException` +area: Search +type: bug +issues: [] diff --git a/modules/aggregations/src/internalClusterTest/java/org/elasticsearch/aggregations/bucket/SearchCancellationIT.java b/modules/aggregations/src/internalClusterTest/java/org/elasticsearch/aggregations/bucket/SearchCancellationIT.java index d225ccc9d173..a1119c64c577 100644 --- a/modules/aggregations/src/internalClusterTest/java/org/elasticsearch/aggregations/bucket/SearchCancellationIT.java +++ b/modules/aggregations/src/internalClusterTest/java/org/elasticsearch/aggregations/bucket/SearchCancellationIT.java @@ -43,6 +43,7 @@ import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcke import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.not; public class SearchCancellationIT extends AbstractSearchCancellationTestCase { @@ -97,9 +98,7 @@ public class SearchCancellationIT extends AbstractSearchCancellationTestCase { } logger.info("Executing search"); - // we have to explicitly set error_trace=true for the later exception check for `TimeSeriesIndexSearcher` Client client = client(); - client.threadPool().getThreadContext().putHeader("error_trace", "true"); TimeSeriesAggregationBuilder timeSeriesAggregationBuilder = new TimeSeriesAggregationBuilder("test_agg"); ActionFuture searchResponse = client.prepareSearch("test") .setQuery(matchAllQuery()) @@ -129,7 +128,9 @@ public class SearchCancellationIT extends AbstractSearchCancellationTestCase { logger.info("All shards failed with", ex); if (lowLevelCancellation) { // Ensure that we cancelled in TimeSeriesIndexSearcher and not in reduce phase - assertThat(ExceptionsHelper.stackTrace(ex), containsString("TimeSeriesIndexSearcher")); + assertThat(ExceptionsHelper.stackTrace(ex), not(containsString("not building sub-aggregations due to task cancellation"))); + } else { + assertThat(ExceptionsHelper.stackTrace(ex), containsString("not building sub-aggregations due to task cancellation")); } } } diff --git a/server/src/main/java/org/elasticsearch/tasks/TaskCancelledException.java b/server/src/main/java/org/elasticsearch/tasks/TaskCancelledException.java index 81c7bec678b3..4a56e96aa3f3 100644 --- a/server/src/main/java/org/elasticsearch/tasks/TaskCancelledException.java +++ b/server/src/main/java/org/elasticsearch/tasks/TaskCancelledException.java @@ -27,6 +27,11 @@ public class TaskCancelledException extends ElasticsearchException { super(in); } + @Override + public Throwable fillInStackTrace() { + return this; // this exception doesn't imply a bug, no need for a stack trace + } + @Override public RestStatus status() { // Tasks are typically cancelled at the request of the client, so a 4xx status code is more accurate than the default of 500 (and