From 6c1c71db89be51bddcf3163882efb9e6eb75c2d1 Mon Sep 17 00:00:00 2001 From: Sergei Ustimenko Date: Wed, 15 Oct 2025 11:48:37 +0200 Subject: [PATCH 1/3] Issue-19639 Add separate grpc.detailed_errors.enabled error handling setting for gRPC Signed-off-by: Sergei Ustimenko --- .../opensearch/transport/grpc/GrpcPlugin.java | 11 ++-- .../grpc/Netty4GrpcServerTransport.java | 13 ++++ .../grpc/services/DocumentServiceImpl.java | 6 +- .../grpc/services/SearchServiceImpl.java | 7 +- .../transport/grpc/util/GrpcErrorHandler.java | 14 ++++ .../grpc/services/SearchServiceImplTests.java | 63 +++++++++++++----- .../document/DocumentServiceImplTests.java | 66 ++++++++++++++----- 7 files changed, 139 insertions(+), 41 deletions(-) diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/GrpcPlugin.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/GrpcPlugin.java index 47db838ef4fb4..50c1c36ec8e0c 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/GrpcPlugin.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/GrpcPlugin.java @@ -56,6 +56,7 @@ import static org.opensearch.transport.grpc.Netty4GrpcServerTransport.GRPC_TRANSPORT_SETTING_KEY; import static org.opensearch.transport.grpc.Netty4GrpcServerTransport.SETTING_GRPC_BIND_HOST; +import static org.opensearch.transport.grpc.Netty4GrpcServerTransport.SETTING_GRPC_DETAILED_ERRORS_ENABLED; import static org.opensearch.transport.grpc.Netty4GrpcServerTransport.SETTING_GRPC_EXECUTOR_COUNT; import static org.opensearch.transport.grpc.Netty4GrpcServerTransport.SETTING_GRPC_HOST; import static org.opensearch.transport.grpc.Netty4GrpcServerTransport.SETTING_GRPC_KEEPALIVE_TIMEOUT; @@ -205,9 +206,10 @@ public Map> getAuxTransports( throw new IllegalStateException("createComponents must be called before getAuxTransports to initialize the registry"); } + boolean detailedErrorsEnabled = SETTING_GRPC_DETAILED_ERRORS_ENABLED.get(settings); List grpcServices = registerGRPCServices( - new DocumentServiceImpl(client), - new SearchServiceImpl(client, queryUtils) + new DocumentServiceImpl(client, detailedErrorsEnabled), + new SearchServiceImpl(client, queryUtils, detailedErrorsEnabled) ); return Collections.singletonMap( GRPC_TRANSPORT_SETTING_KEY, @@ -248,9 +250,10 @@ public Map> getSecureAuxTransports( throw new IllegalStateException("createComponents must be called before getSecureAuxTransports to initialize the registry"); } + boolean detailedErrorsEnabled = SETTING_GRPC_DETAILED_ERRORS_ENABLED.get(settings); List grpcServices = registerGRPCServices( - new DocumentServiceImpl(client), - new SearchServiceImpl(client, queryUtils) + new DocumentServiceImpl(client, detailedErrorsEnabled), + new SearchServiceImpl(client, queryUtils, detailedErrorsEnabled) ); return Collections.singletonMap( GRPC_SECURE_TRANSPORT_SETTING_KEY, diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/Netty4GrpcServerTransport.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/Netty4GrpcServerTransport.java index de2fb0079c652..eebb8933aebad 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/Netty4GrpcServerTransport.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/Netty4GrpcServerTransport.java @@ -186,6 +186,19 @@ public class Netty4GrpcServerTransport extends AuxTransport { Setting.Property.NodeScope ); + /** + * Requests that require detailed error tracing via {@code error_trace} will + * include relevant error details for better debugging in case this setting is enabled. + * Otherwise,when this setting is disabled, only an error summary is included + * when {@code error_trace} is omitted or disabled and an error response is generated in case + * it is enabled. + */ + public static final Setting SETTING_GRPC_DETAILED_ERRORS_ENABLED = Setting.boolSetting( + "grpc.detailed_errors.enabled", + true, + Setting.Property.NodeScope + ); + /** * Port range on which servers bind. */ diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/DocumentServiceImpl.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/DocumentServiceImpl.java index e1348bc78961f..0607c9d830ff0 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/DocumentServiceImpl.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/DocumentServiceImpl.java @@ -25,14 +25,17 @@ public class DocumentServiceImpl extends DocumentServiceGrpc.DocumentServiceImplBase { private static final Logger logger = LogManager.getLogger(DocumentServiceImpl.class); private final Client client; + private final boolean detailedErrorsEnabled; /** * Creates a new DocumentServiceImpl. * * @param client Client for executing actions on the local node + * @param detailedErrorsEnabled Whether detailed error tracing is enabled */ - public DocumentServiceImpl(Client client) { + public DocumentServiceImpl(Client client, boolean detailedErrorsEnabled) { this.client = client; + this.detailedErrorsEnabled = detailedErrorsEnabled; } /** @@ -44,6 +47,7 @@ public DocumentServiceImpl(Client client) { @Override public void bulk(org.opensearch.protobufs.BulkRequest request, StreamObserver responseObserver) { try { + GrpcErrorHandler.validateErrorTracingConfiguration(detailedErrorsEnabled, request.getGlobalParams()); org.opensearch.action.bulk.BulkRequest bulkRequest = BulkRequestProtoUtils.prepareRequest(request); BulkRequestActionListener listener = new BulkRequestActionListener(responseObserver); client.bulk(bulkRequest, listener); diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/SearchServiceImpl.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/SearchServiceImpl.java index f5bca635c19ab..9a5246bebef08 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/SearchServiceImpl.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/services/SearchServiceImpl.java @@ -31,14 +31,16 @@ public class SearchServiceImpl extends SearchServiceGrpc.SearchServiceImplBase { private static final Logger logger = LogManager.getLogger(SearchServiceImpl.class); private final Client client; private final AbstractQueryBuilderProtoUtils queryUtils; + private final boolean detailedErrorsEnabled; /** * Creates a new SearchServiceImpl. * * @param client Client for executing actions on the local node * @param queryUtils Query utils instance for parsing protobuf queries + * @param detailedErrorsEnabled Whether detailed error tracing is enabled */ - public SearchServiceImpl(Client client, AbstractQueryBuilderProtoUtils queryUtils) { + public SearchServiceImpl(Client client, AbstractQueryBuilderProtoUtils queryUtils, boolean detailedErrorsEnabled) { if (client == null) { throw new IllegalArgumentException("Client cannot be null"); } @@ -48,6 +50,7 @@ public SearchServiceImpl(Client client, AbstractQueryBuilderProtoUtils queryUtil this.client = client; this.queryUtils = queryUtils; + this.detailedErrorsEnabled = detailedErrorsEnabled; } /** @@ -61,8 +64,8 @@ public void search( org.opensearch.protobufs.SearchRequest request, StreamObserver responseObserver ) { - try { + GrpcErrorHandler.validateErrorTracingConfiguration(detailedErrorsEnabled, request.getGlobalParams()); org.opensearch.action.search.SearchRequest searchRequest = SearchRequestProtoUtils.prepareRequest(request, client, queryUtils); SearchRequestActionListener listener = new SearchRequestActionListener(responseObserver); client.search(searchRequest, listener); diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/util/GrpcErrorHandler.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/util/GrpcErrorHandler.java index d72ccfc117db5..f16b9170454ee 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/util/GrpcErrorHandler.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/util/GrpcErrorHandler.java @@ -21,6 +21,7 @@ import org.opensearch.core.concurrency.OpenSearchRejectedExecutionException; import org.opensearch.core.xcontent.ToXContent; import org.opensearch.core.xcontent.XContentBuilder; +import org.opensearch.protobufs.GlobalParams; import java.io.IOException; import java.util.concurrent.TimeoutException; @@ -38,6 +39,19 @@ private GrpcErrorHandler() { // Utility class, no instances } + /** + * Validates if error tracing is allowed based on server configuration and request parameters. + * + * @param detailedErrorsEnabled Whether detailed errors are enabled on the server + * @param globalRequestParams The global parameters from the gRPC request + * @throws IllegalArgumentException if error tracing is requested but disabled by the server side + */ + public static void validateErrorTracingConfiguration(boolean detailedErrorsEnabled, GlobalParams globalRequestParams) { + if (detailedErrorsEnabled == false && globalRequestParams.getErrorTrace()) { + throw new IllegalArgumentException("error traces in responses are disabled."); + } + } + /** * Converts an exception to an appropriate gRPC StatusRuntimeException. * Uses comprehensive exception type mapping for granular gRPC status codes, diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java index d6225299c4284..1eabd26abad3c 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java @@ -8,23 +8,24 @@ package org.opensearch.transport.grpc.services; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.verify; + +import java.io.IOException; + +import org.junit.Before; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.opensearch.protobufs.SearchRequest; import org.opensearch.protobufs.SearchRequestBody; import org.opensearch.test.OpenSearchTestCase; import org.opensearch.transport.client.node.NodeClient; import org.opensearch.transport.grpc.proto.request.search.query.AbstractQueryBuilderProtoUtils; import org.opensearch.transport.grpc.proto.request.search.query.QueryBuilderProtoTestUtils; -import org.junit.Before; - -import java.io.IOException; +import io.grpc.StatusRuntimeException; import io.grpc.stub.StreamObserver; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.verify; public class SearchServiceImplTests extends OpenSearchTestCase { @@ -41,19 +42,19 @@ public class SearchServiceImplTests extends OpenSearchTestCase { public void setup() throws IOException { MockitoAnnotations.openMocks(this); queryUtils = QueryBuilderProtoTestUtils.createQueryUtils(); - service = new SearchServiceImpl(client, queryUtils); + service = new SearchServiceImpl(client, queryUtils, true); } public void testConstructorWithNullClient() { // Test that constructor throws IllegalArgumentException when client is null - IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> new SearchServiceImpl(null, queryUtils)); + IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> new SearchServiceImpl(null, queryUtils, true)); assertEquals("Client cannot be null", exception.getMessage()); } public void testConstructorWithNullQueryUtils() { // Test that constructor throws IllegalArgumentException when queryUtils is null - IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> new SearchServiceImpl(client, null)); + IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> new SearchServiceImpl(client, null, true)); assertEquals("Query utils cannot be null", exception.getMessage()); } @@ -61,12 +62,12 @@ public void testConstructorWithNullQueryUtils() { public void testConstructorWithBothNull() { // Test that constructor throws IllegalArgumentException when both parameters are null // Should fail on the first null check (client) - IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> new SearchServiceImpl(null, null)); + IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> new SearchServiceImpl(null, null, true)); assertEquals("Client cannot be null", exception.getMessage()); } - public void testSearchSuccess() throws IOException { + public void testSearchSuccess() { // Create a test request SearchRequest request = createTestSearchRequest(); @@ -77,7 +78,7 @@ public void testSearchSuccess() throws IOException { verify(client).search(any(org.opensearch.action.search.SearchRequest.class), any()); } - public void testSearchWithException() throws IOException { + public void testSearchWithException() { // Create a test request SearchRequest request = createTestSearchRequest(); @@ -91,7 +92,37 @@ public void testSearchWithException() throws IOException { verify(responseObserver).onError(any()); } + public void testErrorTracingConfigValidationFailsWhenServerSettingIsDisabledAndRequestRequiresTracing() { + // Setup request and the service, server setting is off and request requires tracing + SearchRequest request = createTestSearchRequest(); + SearchServiceImpl serviceWithDisabledErrorsTracing = new SearchServiceImpl(client, queryUtils, false); + + // Call search method + serviceWithDisabledErrorsTracing.search(request, responseObserver); + + // Verify that responseObserver.onError reports request parameter must be disabled + verify(responseObserver).onError(any(StatusRuntimeException.class)); + } + + public void testErrorTracingConfigValidationPassesWhenServerSettingIsDisabledAndRequestSkipsTracing() { + // Setup request and the service, server setting is off and request skips tracing + SearchRequest request = createTestSearchRequest().toBuilder().setGlobalParams( + org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(false) + ).build(); + SearchServiceImpl serviceWithDisabledErrorsTracing = new SearchServiceImpl(client, queryUtils, false); + + // Call search method + serviceWithDisabledErrorsTracing.search(request, responseObserver); + + // Verify that client.search was called + verify(client).search(any(org.opensearch.action.search.SearchRequest.class), any()); + } + private SearchRequest createTestSearchRequest() { - return SearchRequest.newBuilder().addIndex("test-index").setRequestBody(SearchRequestBody.newBuilder().setSize(10).build()).build(); + return SearchRequest.newBuilder() + .addIndex("test-index") + .setRequestBody(SearchRequestBody.newBuilder().setSize(10).build()) + .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(true).build()) + .build(); } } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java index 663cb4e24c18a..b406bca83af70 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java @@ -8,24 +8,25 @@ package org.opensearch.transport.grpc.services.document; -import com.google.protobuf.ByteString; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.verify; + +import java.io.IOException; + +import org.junit.Before; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.opensearch.protobufs.BulkRequest; import org.opensearch.protobufs.BulkRequestBody; import org.opensearch.protobufs.IndexOperation; import org.opensearch.test.OpenSearchTestCase; import org.opensearch.transport.client.node.NodeClient; import org.opensearch.transport.grpc.services.DocumentServiceImpl; -import org.junit.Before; - -import java.io.IOException; +import com.google.protobuf.ByteString; +import io.grpc.StatusRuntimeException; import io.grpc.stub.StreamObserver; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.verify; public class DocumentServiceImplTests extends OpenSearchTestCase { @@ -40,10 +41,10 @@ public class DocumentServiceImplTests extends OpenSearchTestCase { @Before public void setup() throws IOException { MockitoAnnotations.openMocks(this); - service = new DocumentServiceImpl(client); + service = new DocumentServiceImpl(client, true); } - public void testBulkSuccess() throws IOException { + public void testBulkSuccess() { // Create a test request BulkRequest request = createTestBulkRequest(); @@ -54,7 +55,7 @@ public void testBulkSuccess() throws IOException { verify(client).bulk(any(org.opensearch.action.bulk.BulkRequest.class), any()); } - public void testBulkError() throws IOException { + public void testBulkError() { // Create a test request BulkRequest request = createTestBulkRequest(); @@ -68,14 +69,43 @@ public void testBulkError() throws IOException { verify(responseObserver).onError(any(RuntimeException.class)); } + public void testErrorTracingConfigValidationFailsWhenServerSettingIsDisabledAndRequestRequiresTracing() { + // Setup request and the service, server setting is off and request requires tracing + BulkRequest request = createTestBulkRequest(); + DocumentServiceImpl serviceWithDisabledErrorsTracing = new DocumentServiceImpl(client, false); + + // Call bulk method + serviceWithDisabledErrorsTracing.bulk(request, responseObserver); + + // Verify that an error was sent + verify(responseObserver).onError(any(StatusRuntimeException.class)); + } + + public void testErrorTracingConfigValidationPassesWhenServerSettingIsDisabledAndRequestSkipsTracing() { + // Setup request and the service, server setting is off and request does not require tracing + BulkRequest request = createTestBulkRequest().toBuilder().setGlobalParams( + org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(false) + ).build(); + DocumentServiceImpl serviceWithDisabledErrorsTracing = new DocumentServiceImpl(client, false); + + // Call bulk method + serviceWithDisabledErrorsTracing.bulk(request, responseObserver); + + // Verify that client.bulk was called + verify(client).bulk(any(org.opensearch.action.bulk.BulkRequest.class), any()); + } + private BulkRequest createTestBulkRequest() { IndexOperation indexOp = IndexOperation.newBuilder().setXIndex("test-index").setXId("test-id").build(); BulkRequestBody requestBody = BulkRequestBody.newBuilder() - .setOperationContainer(org.opensearch.protobufs.OperationContainer.newBuilder().setIndex(indexOp).build()) - .setObject(ByteString.copyFromUtf8("{\"field\":\"value\"}")) - .build(); - - return BulkRequest.newBuilder().addRequestBody(requestBody).build(); + .setOperationContainer(org.opensearch.protobufs.OperationContainer.newBuilder().setIndex(indexOp).build()) + .setObject(ByteString.copyFromUtf8("{\"field\":\"value\"}")) + .build(); + + return BulkRequest.newBuilder() + .addRequestBody(requestBody) + .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(true)) + .build(); } } From 702f7d902128af216da7e108cfebdc00c8b84b6e Mon Sep 17 00:00:00 2001 From: Sergei Ustimenko Date: Wed, 15 Oct 2025 12:01:44 +0200 Subject: [PATCH 2/3] Add the CHANGELOG.md entry Signed-off-by: Sergei Ustimenko --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0d35c921ccd5..45196d2d5e2df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Add a mapper for context aware segments grouping criteria ([#19233](https://github.com/opensearch-project/OpenSearch/pull/19233)) - Return full error for GRPC error response ([#19568](https://github.com/opensearch-project/OpenSearch/pull/19568)) - Add pluggable gRPC interceptors with explicit ordering([#19005](https://github.com/opensearch-project/OpenSearch/pull/19005)) - - Add metrics for the merged segment warmer feature ([#18929](https://github.com/opensearch-project/OpenSearch/pull/18929)) +- Add separate grpc.detailed_errors.enabled error handling setting for gRPC ([#19644](https://github.com/opensearch-project/OpenSearch/pull/19644)) ### Changed - Faster `terms` query creation for `keyword` field with index and docValues enabled ([#19350](https://github.com/opensearch-project/OpenSearch/pull/19350)) From 63928491975374ccac9177cadce1aba1aae401e4 Mon Sep 17 00:00:00 2001 From: Sergei Ustimenko Date: Wed, 15 Oct 2025 12:45:35 +0200 Subject: [PATCH 3/3] Polish formatting Signed-off-by: Sergei Ustimenko --- .../grpc/services/SearchServiceImplTests.java | 37 +++++++++--------- .../document/DocumentServiceImplTests.java | 38 +++++++++---------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java index 1eabd26abad3c..857536e642714 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/SearchServiceImplTests.java @@ -8,24 +8,24 @@ package org.opensearch.transport.grpc.services; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.verify; - -import java.io.IOException; - -import org.junit.Before; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.opensearch.protobufs.SearchRequest; import org.opensearch.protobufs.SearchRequestBody; import org.opensearch.test.OpenSearchTestCase; import org.opensearch.transport.client.node.NodeClient; import org.opensearch.transport.grpc.proto.request.search.query.AbstractQueryBuilderProtoUtils; import org.opensearch.transport.grpc.proto.request.search.query.QueryBuilderProtoTestUtils; +import org.junit.Before; + +import java.io.IOException; import io.grpc.StatusRuntimeException; import io.grpc.stub.StreamObserver; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.verify; public class SearchServiceImplTests extends OpenSearchTestCase { @@ -47,7 +47,10 @@ public void setup() throws IOException { public void testConstructorWithNullClient() { // Test that constructor throws IllegalArgumentException when client is null - IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> new SearchServiceImpl(null, queryUtils, true)); + IllegalArgumentException exception = expectThrows( + IllegalArgumentException.class, + () -> new SearchServiceImpl(null, queryUtils, true) + ); assertEquals("Client cannot be null", exception.getMessage()); } @@ -106,9 +109,9 @@ public void testErrorTracingConfigValidationFailsWhenServerSettingIsDisabledAndR public void testErrorTracingConfigValidationPassesWhenServerSettingIsDisabledAndRequestSkipsTracing() { // Setup request and the service, server setting is off and request skips tracing - SearchRequest request = createTestSearchRequest().toBuilder().setGlobalParams( - org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(false) - ).build(); + SearchRequest request = createTestSearchRequest().toBuilder() + .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(false)) + .build(); SearchServiceImpl serviceWithDisabledErrorsTracing = new SearchServiceImpl(client, queryUtils, false); // Call search method @@ -120,9 +123,9 @@ public void testErrorTracingConfigValidationPassesWhenServerSettingIsDisabledAnd private SearchRequest createTestSearchRequest() { return SearchRequest.newBuilder() - .addIndex("test-index") - .setRequestBody(SearchRequestBody.newBuilder().setSize(10).build()) - .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(true).build()) - .build(); + .addIndex("test-index") + .setRequestBody(SearchRequestBody.newBuilder().setSize(10).build()) + .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(true).build()) + .build(); } } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java index b406bca83af70..9bd2b9a55493e 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/document/DocumentServiceImplTests.java @@ -8,25 +8,25 @@ package org.opensearch.transport.grpc.services.document; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.verify; - -import java.io.IOException; - -import org.junit.Before; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import com.google.protobuf.ByteString; import org.opensearch.protobufs.BulkRequest; import org.opensearch.protobufs.BulkRequestBody; import org.opensearch.protobufs.IndexOperation; import org.opensearch.test.OpenSearchTestCase; import org.opensearch.transport.client.node.NodeClient; import org.opensearch.transport.grpc.services.DocumentServiceImpl; -import com.google.protobuf.ByteString; +import org.junit.Before; + +import java.io.IOException; import io.grpc.StatusRuntimeException; import io.grpc.stub.StreamObserver; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.verify; public class DocumentServiceImplTests extends OpenSearchTestCase { @@ -83,9 +83,9 @@ public void testErrorTracingConfigValidationFailsWhenServerSettingIsDisabledAndR public void testErrorTracingConfigValidationPassesWhenServerSettingIsDisabledAndRequestSkipsTracing() { // Setup request and the service, server setting is off and request does not require tracing - BulkRequest request = createTestBulkRequest().toBuilder().setGlobalParams( - org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(false) - ).build(); + BulkRequest request = createTestBulkRequest().toBuilder() + .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(false)) + .build(); DocumentServiceImpl serviceWithDisabledErrorsTracing = new DocumentServiceImpl(client, false); // Call bulk method @@ -99,13 +99,13 @@ private BulkRequest createTestBulkRequest() { IndexOperation indexOp = IndexOperation.newBuilder().setXIndex("test-index").setXId("test-id").build(); BulkRequestBody requestBody = BulkRequestBody.newBuilder() - .setOperationContainer(org.opensearch.protobufs.OperationContainer.newBuilder().setIndex(indexOp).build()) - .setObject(ByteString.copyFromUtf8("{\"field\":\"value\"}")) - .build(); + .setOperationContainer(org.opensearch.protobufs.OperationContainer.newBuilder().setIndex(indexOp).build()) + .setObject(ByteString.copyFromUtf8("{\"field\":\"value\"}")) + .build(); return BulkRequest.newBuilder() - .addRequestBody(requestBody) - .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(true)) - .build(); + .addRequestBody(requestBody) + .setGlobalParams(org.opensearch.protobufs.GlobalParams.newBuilder().setErrorTrace(true)) + .build(); } }