From 8008894942ea2f545622b1868bdce3fe1f764402 Mon Sep 17 00:00:00 2001 From: Tommaso Teofili Date: Fri, 7 Mar 2025 16:53:19 +0100 Subject: [PATCH] Do not let ShardBulkInferenceActionFilter unwrap / rewrap ESExceptions (#123890) * do not let ShardBulkInferenceActionFilter unwrap / rewrap ESExceptions --- 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 19942595df45b..dca803696ddf2 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; @@ -45,6 +44,7 @@ import org.elasticsearch.xcontent.XContent; import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.inference.results.ChunkedInferenceError; +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.mapper.SemanticTextUtils; @@ -288,7 +288,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, @@ -317,7 +317,7 @@ public void onResponse(List results) { var acc = inferenceResults.get(request.index); if (result instanceof ChunkedInferenceError error) { acc.addFailure( - new ElasticsearchException( + new InferenceException( "Exception when running inference id [{}] on field [{}]", error.exception(), inferenceProvider.model.getInferenceEntityId(), @@ -349,7 +349,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 84c3e5cf80b0c..fe135e0389576 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 @@ -248,7 +248,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()); @@ -267,7 +269,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(); }