From 3789c5093261953f7497717fc61fdafe90943280 Mon Sep 17 00:00:00 2001 From: Tommaso Teofili Date: Fri, 7 Mar 2025 16:53:19 +0100 Subject: [PATCH 1/2] Do not let ShardBulkInferenceActionFilter unwrap / rewrap ESExceptions (#123890) * do not let ShardBulkInferenceActionFilter unwrap / rewrap ESExceptions (cherry picked from commit 74bb0f9826650b37fdc880af78dddb6e5719b799) # Conflicts: # x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilter.java --- docs/changelog/123890.yaml | 5 +++++ .../xpack/inference/InferenceException.java | 18 ++++++++++++++++++ .../filter/ShardBulkInferenceActionFilter.java | 8 ++++---- .../ShardBulkInferenceActionFilterTests.java | 4 ++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 docs/changelog/123890.yaml create mode 100644 x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferenceException.java diff --git a/docs/changelog/123890.yaml b/docs/changelog/123890.yaml new file mode 100644 index 0000000000000..7f9f6e2e5fba7 --- /dev/null +++ b/docs/changelog/123890.yaml @@ -0,0 +1,5 @@ +pr: 123890 +summary: Do not let `ShardBulkInferenceActionFilter` unwrap / rewrap ESExceptions +area: Search +type: bug +issues: [] diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferenceException.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferenceException.java new file mode 100644 index 0000000000000..1ae9dac538d2b --- /dev/null +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferenceException.java @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +package org.elasticsearch.xpack.inference; + +import org.elasticsearch.ElasticsearchException; +import org.elasticsearch.ElasticsearchWrapperException; + +public class InferenceException extends ElasticsearchException implements ElasticsearchWrapperException { + public InferenceException(String message, Throwable cause, Object... args) { + super(message, cause, args); + } + +} diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilter.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilter.java index 54730332bb92b..50c1a49891ec1 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilter.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilter.java @@ -7,7 +7,6 @@ package org.elasticsearch.xpack.inference.action.filter; -import org.elasticsearch.ElasticsearchException; import org.elasticsearch.ElasticsearchStatusException; import org.elasticsearch.ExceptionsHelper; import org.elasticsearch.ResourceNotFoundException; @@ -39,6 +38,7 @@ import org.elasticsearch.rest.RestStatus; import org.elasticsearch.tasks.Task; import org.elasticsearch.xpack.core.inference.results.ErrorChunkedInferenceResults; +import org.elasticsearch.xpack.inference.InferenceException; import org.elasticsearch.xpack.inference.mapper.SemanticTextField; import org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper; import org.elasticsearch.xpack.inference.registry.ModelRegistry; @@ -255,7 +255,7 @@ public void onFailure(Exception exc) { request.field ); } else { - failure = new ElasticsearchException( + failure = new InferenceException( "Error loading inference for inference id [{}] on field [{}]", exc, inferenceId, @@ -284,7 +284,7 @@ public void onResponse(List results) { var acc = inferenceResults.get(request.index); if (result instanceof ErrorChunkedInferenceResults error) { acc.addFailure( - new ElasticsearchException( + new InferenceException( "Exception when running inference id [{}] on field [{}]", error.getException(), inferenceProvider.model.getInferenceEntityId(), @@ -315,7 +315,7 @@ public void onFailure(Exception exc) { for (FieldInferenceRequest request : requests) { addInferenceResponseFailure( request.index, - new ElasticsearchException( + new InferenceException( "Exception when running inference id [{}] on field [{}]", exc, inferenceProvider.model.getInferenceEntityId(), diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java index 770e6e3cb9cf4..0c66cc2faa28b 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java @@ -173,7 +173,9 @@ public void testItemFailures() throws Exception { assertNotNull(bulkShardRequest.items()[0].getPrimaryResponse()); assertTrue(bulkShardRequest.items()[0].getPrimaryResponse().isFailed()); BulkItemResponse.Failure failure = bulkShardRequest.items()[0].getPrimaryResponse().getFailure(); + assertThat(failure.getCause().getMessage(), containsString("Exception when running inference")); assertThat(failure.getCause().getCause().getMessage(), containsString("boom")); + assertThat(failure.getStatus(), is(RestStatus.BAD_REQUEST)); // item 1 is a success assertNull(bulkShardRequest.items()[1].getPrimaryResponse()); @@ -184,7 +186,9 @@ public void testItemFailures() throws Exception { assertNotNull(bulkShardRequest.items()[2].getPrimaryResponse()); assertTrue(bulkShardRequest.items()[2].getPrimaryResponse().isFailed()); failure = bulkShardRequest.items()[2].getPrimaryResponse().getFailure(); + assertThat(failure.getCause().getMessage(), containsString("Exception when running inference")); assertThat(failure.getCause().getCause().getMessage(), containsString("boom")); + assertThat(failure.getStatus(), is(RestStatus.BAD_REQUEST)); } finally { chainExecuted.countDown(); } From 2b34a0dccd4fef6cddd2a403ffd721a5391a5878 Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Fri, 7 Mar 2025 12:45:39 -0500 Subject: [PATCH 2/2] Add missing import --- .../action/filter/ShardBulkInferenceActionFilterTests.java | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java index 0c66cc2faa28b..43b83e4689f04 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilterTests.java @@ -65,6 +65,7 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock;