From 044f3309d7f713ed2883f70db0e058c7deb93dcc Mon Sep 17 00:00:00 2001 From: lucy66hw Date: Wed, 8 Oct 2025 04:34:21 +0000 Subject: [PATCH 1/2] [GRPC] Compile with protobuf 0.23.0 Signed-off-by: xil --- gradle/libs.versions.toml | 2 +- .../licenses/protobufs-0.19.0.jar.sha1 | 1 - .../licenses/protobufs-0.23.0.jar.sha1 | 1 + .../spi/licenses/protobufs-0.19.0.jar.sha1 | 1 - .../spi/licenses/protobufs-0.23.0.jar.sha1 | 1 + .../transport/grpc/DocumentServiceIT.java | 5 +- .../transport/grpc/SearchServiceIT.java | 2 +- .../bulk/BulkRequestParserProtoUtils.java | 2 +- .../search/ProtoActionsProtoUtils.java | 2 - .../search/SearchRequestProtoUtils.java | 65 +--------- .../search/SearchSourceBuilderProtoUtils.java | 9 +- .../search/StoredFieldsContextProtoUtils.java | 2 +- .../BulkRequestParserProtoUtilsTests.java | 12 +- .../search/SearchRequestProtoUtilsTests.java | 114 +++++++++++------- .../SearchSourceBuilderProtoUtilsTests.java | 5 +- .../StoredFieldsContextProtoUtilsTests.java | 23 ++-- .../services/BulkRequestProtoUtilsTests.java | 8 +- .../grpc/services/SearchServiceImplTests.java | 5 +- .../document/DocumentServiceImplTests.java | 2 +- 19 files changed, 108 insertions(+), 154 deletions(-) delete mode 100644 modules/transport-grpc/licenses/protobufs-0.19.0.jar.sha1 create mode 100644 modules/transport-grpc/licenses/protobufs-0.23.0.jar.sha1 delete mode 100644 modules/transport-grpc/spi/licenses/protobufs-0.19.0.jar.sha1 create mode 100644 modules/transport-grpc/spi/licenses/protobufs-0.23.0.jar.sha1 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4fc4715b9beb9..12bac1a5489da 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,7 +22,7 @@ kotlin = "1.7.10" antlr4 = "4.13.1" guava = "33.2.1-jre" gson = "2.13.2" -opensearchprotobufs = "0.19.0" +opensearchprotobufs = "0.23.0" protobuf = "3.25.8" jakarta_annotation = "1.3.5" google_http_client = "1.44.1" diff --git a/modules/transport-grpc/licenses/protobufs-0.19.0.jar.sha1 b/modules/transport-grpc/licenses/protobufs-0.19.0.jar.sha1 deleted file mode 100644 index c6a8591323db5..0000000000000 --- a/modules/transport-grpc/licenses/protobufs-0.19.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -14b425a0cb280ccad20983daeaabf3d1c83c3670 \ No newline at end of file diff --git a/modules/transport-grpc/licenses/protobufs-0.23.0.jar.sha1 b/modules/transport-grpc/licenses/protobufs-0.23.0.jar.sha1 new file mode 100644 index 0000000000000..968c8ab84b094 --- /dev/null +++ b/modules/transport-grpc/licenses/protobufs-0.23.0.jar.sha1 @@ -0,0 +1 @@ +ebcc741fa7ddec2f1ecc6037fb6935676a250c31 \ No newline at end of file diff --git a/modules/transport-grpc/spi/licenses/protobufs-0.19.0.jar.sha1 b/modules/transport-grpc/spi/licenses/protobufs-0.19.0.jar.sha1 deleted file mode 100644 index c6a8591323db5..0000000000000 --- a/modules/transport-grpc/spi/licenses/protobufs-0.19.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -14b425a0cb280ccad20983daeaabf3d1c83c3670 \ No newline at end of file diff --git a/modules/transport-grpc/spi/licenses/protobufs-0.23.0.jar.sha1 b/modules/transport-grpc/spi/licenses/protobufs-0.23.0.jar.sha1 new file mode 100644 index 0000000000000..968c8ab84b094 --- /dev/null +++ b/modules/transport-grpc/spi/licenses/protobufs-0.23.0.jar.sha1 @@ -0,0 +1 @@ +ebcc741fa7ddec2f1ecc6037fb6935676a250c31 \ No newline at end of file diff --git a/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/DocumentServiceIT.java b/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/DocumentServiceIT.java index 88f5ef151157a..6c3d32129d0ff 100644 --- a/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/DocumentServiceIT.java +++ b/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/DocumentServiceIT.java @@ -44,16 +44,13 @@ public void testDocumentServiceBulk() throws Exception { .setObject(com.google.protobuf.ByteString.copyFromUtf8(DEFAULT_DOCUMENT_SOURCE)) .build(); - BulkRequest bulkRequest = BulkRequest.newBuilder().addRequestBody(requestBody).build(); + BulkRequest bulkRequest = BulkRequest.newBuilder().addBulkRequestBody(requestBody).build(); // Execute the bulk request BulkResponse bulkResponse = documentStub.bulk(bulkRequest); // Verify the response assertNotNull("Bulk response should not be null", bulkResponse); - assertFalse("Bulk response should not have errors", bulkResponse.getErrors()); - assertEquals("Bulk response should have one item", 1, bulkResponse.getItemsCount()); - // Verify the document is searchable waitForSearchableDoc(indexName, "1"); } diff --git a/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/SearchServiceIT.java b/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/SearchServiceIT.java index 4034f74447cc5..35a6510a3a934 100644 --- a/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/SearchServiceIT.java +++ b/modules/transport-grpc/src/internalClusterTest/java/org/opensearch/transport/grpc/SearchServiceIT.java @@ -43,7 +43,7 @@ public void testSearchServiceSearch() throws Exception { SearchRequest searchRequest = SearchRequest.newBuilder() .addIndex(indexName) - .setRequestBody(requestBody) + .setSearchRequestBody(requestBody) .setQ("field1:value1") .build(); diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtils.java index f02a9bbd2238b..b9997013f7700 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtils.java @@ -116,7 +116,7 @@ public static DocWriteRequest[] getDocWriteRequests( String defaultPipeline, Boolean defaultRequireAlias ) { - List bulkRequestBodyList = request.getRequestBodyList(); + List bulkRequestBodyList = request.getBulkRequestBodyList(); DocWriteRequest[] docWriteRequests = new DocWriteRequest[bulkRequestBodyList.size()]; // Process each operation in the request body diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/ProtoActionsProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/ProtoActionsProtoUtils.java index f0ab339a2a070..d2dbb0c24aacd 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/ProtoActionsProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/ProtoActionsProtoUtils.java @@ -39,9 +39,7 @@ protected static QueryBuilder urlParamsToQueryBuilder(SearchRequest request) { QueryStringQueryBuilder queryBuilder = QueryBuilders.queryStringQuery(request.getQ()); queryBuilder.defaultField(request.hasDf() ? request.getDf() : null); - queryBuilder.analyzer(request.hasAnalyzer() ? request.getAnalyzer() : null); queryBuilder.analyzeWildcard(request.hasAnalyzeWildcard() ? request.getAnalyzeWildcard() : false); - queryBuilder.lenient(request.hasLenient() ? request.getLenient() : null); if (request.hasDefaultOperator()) { queryBuilder.defaultOperator(OperatorProtoUtils.fromEnum(request.getDefaultOperator())); } diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtils.java index 161dffc18a69e..34e4091475248 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtils.java @@ -17,12 +17,10 @@ import org.opensearch.index.query.QueryBuilder; import org.opensearch.protobufs.SearchRequest; import org.opensearch.protobufs.SearchRequestBody; -import org.opensearch.protobufs.TrackHits; import org.opensearch.rest.RestRequest; import org.opensearch.rest.action.search.RestSearchAction; import org.opensearch.search.Scroll; import org.opensearch.search.builder.SearchSourceBuilder; -import org.opensearch.search.fetch.StoredFieldsContext; import org.opensearch.search.fetch.subphase.FetchSourceContext; import org.opensearch.search.internal.SearchContext; import org.opensearch.search.suggest.SuggestBuilder; @@ -115,7 +113,7 @@ protected static void parseSearchRequest( } searchRequest.indices(indexArr); - SearchSourceBuilderProtoUtils.parseProto(searchRequest.source(), request.getRequestBody(), queryUtils); + SearchSourceBuilderProtoUtils.parseProto(searchRequest.source(), request.getSearchRequestBody(), queryUtils); final int batchedReduceSize = request.hasBatchedReduceSize() ? request.getBatchedReduceSize() @@ -166,7 +164,6 @@ protected static void parseSearchRequest( } searchRequest.preference(request.hasPreference() ? request.getPreference() : null); searchRequest.indicesOptions(IndicesOptionsProtoUtils.fromRequest(request, searchRequest.indicesOptions())); - searchRequest.pipeline(request.hasSearchPipeline() ? request.getSearchPipeline() : searchRequest.source().pipeline()); checkProtoTotalHits(request, searchRequest); @@ -205,45 +202,7 @@ protected static void parseSearchSource( if (queryBuilder != null) { searchSourceBuilder.query(queryBuilder); } - if (request.hasFrom()) { - searchSourceBuilder.from(request.getFrom()); - } - if (request.hasSize()) { - setSize.accept(request.getSize()); - } - - if (request.hasExplain()) { - searchSourceBuilder.explain(request.getExplain()); - } - - if (request.hasVersion()) { - searchSourceBuilder.version(request.getVersion()); - } - - if (request.hasSeqNoPrimaryTerm()) { - searchSourceBuilder.seqNoAndPrimaryTerm(request.getSeqNoPrimaryTerm()); - } - - if (request.hasTimeout()) { - searchSourceBuilder.timeout(parseTimeValue(request.getTimeout(), null, "timeout")); - } - - if (request.hasVerbosePipeline()) { - searchSourceBuilder.verbosePipeline(request.getVerbosePipeline()); - } - if (request.hasTerminateAfter()) { - int terminateAfter = request.getTerminateAfter(); - if (terminateAfter < 0) { - throw new IllegalArgumentException("terminateAfter must be > 0"); - } else if (terminateAfter > 0) { - searchSourceBuilder.terminateAfter(terminateAfter); - } - } - StoredFieldsContext storedFieldsContext = StoredFieldsContextProtoUtils.fromProtoRequest(request); - if (storedFieldsContext != null) { - searchSourceBuilder.storedFields(storedFieldsContext); - } if (request.getDocvalueFieldsCount() > 0) { for (String field : request.getDocvalueFieldsList()) { searchSourceBuilder.docValueField(field, null); @@ -254,26 +213,6 @@ protected static void parseSearchSource( searchSourceBuilder.fetchSource(fetchSourceContext); } - if (request.hasTrackScores()) { - searchSourceBuilder.trackScores(request.getTrackScores()); - } - - if (request.hasIncludeNamedQueriesScore()) { - searchSourceBuilder.includeNamedQueriesScores(request.getIncludeNamedQueriesScore()); - } - - if (request.hasTrackTotalHits()) { - if (request.getTrackTotalHits().getTrackHitsCase() == TrackHits.TrackHitsCase.ENABLED) { - searchSourceBuilder.trackTotalHits(request.getTrackTotalHits().getEnabled()); - } else if (request.getTrackTotalHits().getTrackHitsCase() == TrackHits.TrackHitsCase.COUNT) { - searchSourceBuilder.trackTotalHitsUpTo(request.getTrackTotalHits().getCount()); - } - } - - if (request.getStatsCount() > 0) { - searchSourceBuilder.stats(request.getStatsList()); - } - if (request.hasSuggestField()) { String suggestField = request.getSuggestField(); String suggestText = request.hasSuggestText() ? request.getSuggestText() : request.getQ(); @@ -348,7 +287,7 @@ private static void preparePointInTime( */ protected static void checkProtoTotalHits(SearchRequest protoRequest, org.opensearch.action.search.SearchRequest searchRequest) { - boolean totalHitsAsInt = protoRequest.hasRestTotalHitsAsInt() ? protoRequest.getRestTotalHitsAsInt() : false; + boolean totalHitsAsInt = protoRequest.hasTotalHitsAsInt() ? protoRequest.getTotalHitsAsInt() : false; if (totalHitsAsInt == false) { return; } diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtils.java index 52d8b376e11e2..11414a5e41c1a 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtils.java @@ -143,13 +143,8 @@ private static void parseNonQueryFields(SearchSourceBuilder searchSourceBuilder, } } if (protoRequest.getIndicesBoostCount() > 0) { - /** - * Similar to {@link SearchSourceBuilder.IndexBoost#IndexBoost(XContentParser)} - */ - for (org.opensearch.protobufs.FloatMap floatMap : protoRequest.getIndicesBoostList()) { - for (Map.Entry entry : floatMap.getFloatMapMap().entrySet()) { - searchSourceBuilder.indexBoost(entry.getKey(), entry.getValue()); - } + for (Map.Entry entry : protoRequest.getIndicesBoostMap().entrySet()) { + searchSourceBuilder.indexBoost(entry.getKey(), entry.getValue()); } } diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtils.java index 865ac7514cdb0..406b3f5a09d79 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtils.java @@ -46,7 +46,7 @@ protected static StoredFieldsContext fromProto(List storedFields) throws * @param request the Protocol Buffer SearchRequest * @return a StoredFieldsContext */ - protected static StoredFieldsContext fromProtoRequest(org.opensearch.protobufs.SearchRequest request) { + protected static StoredFieldsContext fromProtoRequest(org.opensearch.protobufs.SearchRequestBody request) { if (request.getStoredFieldsCount() > 0) { return StoredFieldsContext.fromList(request.getStoredFieldsList()); } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtilsTests.java index 81fd666dbc980..11dfe757d9d52 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestParserProtoUtilsTests.java @@ -245,10 +245,10 @@ public void testGetDocWriteRequests() { .build(); BulkRequest request = BulkRequest.newBuilder() - .addRequestBody(indexBody) - .addRequestBody(createBody) - .addRequestBody(updateBody) - .addRequestBody(deleteBody) + .addBulkRequestBody(indexBody) + .addBulkRequestBody(createBody) + .addBulkRequestBody(updateBody) + .addBulkRequestBody(deleteBody) .build(); DocWriteRequest[] requests = BulkRequestParserProtoUtils.getDocWriteRequests( @@ -291,7 +291,7 @@ public void testGetDocWriteRequests() { public void testGetDocWriteRequestsWithInvalidOperation() { BulkRequestBody invalidBody = BulkRequestBody.newBuilder().build(); - BulkRequest request = BulkRequest.newBuilder().addRequestBody(invalidBody).build(); + BulkRequest request = BulkRequest.newBuilder().addBulkRequestBody(invalidBody).build(); expectThrows( IllegalArgumentException.class, @@ -630,7 +630,7 @@ public void testGetDocWriteRequestsWithGlobalValues() { .build(); BulkRequest request = BulkRequest.newBuilder() - .addRequestBody(indexBody) + .addBulkRequestBody(indexBody) .setRouting("global-routing") .setPipeline("global-pipeline") .setRequireAlias(true) diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtilsTests.java index 1a0182ab2b991..cc108affddb8d 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchRequestProtoUtilsTests.java @@ -60,7 +60,6 @@ public void testParseSearchRequestWithBasicFields() throws IOException { .addRouting("routing1") .addRouting("routing2") .setPreference("_local") - .setSearchPipeline("pipeline1") .setCcsMinimizeRoundtrips(true) .setCancelAfterTimeInterval("30s") .build(); @@ -89,7 +88,6 @@ public void testParseSearchRequestWithBasicFields() throws IOException { Strings.commaDelimitedListToStringArray(searchRequest.routing()) ); assertEquals("Preference should match", "_local", searchRequest.preference()); - assertEquals("SearchPipeline should match", "pipeline1", searchRequest.pipeline()); assertTrue("CcsMinimizeRoundtrips should be true", searchRequest.isCcsMinimizeRoundtrips()); assertEquals("CancelAfterTimeInterval should match", TimeValue.timeValueSeconds(30), searchRequest.getCancelAfterTimeInterval()); } @@ -110,7 +108,7 @@ public void testParseSearchRequestWithRequestBody() throws IOException { // Create a protobuf SearchRequest with the request body org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() - .setRequestBody(requestBody) + .setSearchRequestBody(requestBody) .build(); // Create a SearchRequest to populate @@ -134,22 +132,28 @@ public void testParseSearchRequestWithRequestBody() throws IOException { } public void testParseSearchSourceWithStoredFields() throws IOException { - // Create a protobuf SearchRequest with stored fields - org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() + // Create a protobuf SearchRequestBody with stored fields + SearchRequestBody requestBody = SearchRequestBody.newBuilder() .addStoredFields("field1") .addStoredFields("field2") .addStoredFields("field3") .build(); - // Create a SearchSourceBuilder to populate - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // Create a protobuf SearchRequest with the request body + org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() + .setSearchRequestBody(requestBody) + .build(); + + // Create a SearchRequest to populate + SearchRequest searchRequest = new SearchRequest(); // Call the method under test - SearchRequestProtoUtils.parseSearchSource(searchSourceBuilder, protoRequest, size -> {}); + SearchRequestProtoUtils.parseSearchRequest(searchRequest, protoRequest, namedWriteableRegistry, size -> {}, queryUtils); // Verify the result - assertNotNull("SearchSourceBuilder should not be null", searchSourceBuilder); - StoredFieldsContext storedFieldsContext = searchSourceBuilder.storedFields(); + assertNotNull("SearchRequest should not be null", searchRequest); + assertNotNull("Source should not be null", searchRequest.source()); + StoredFieldsContext storedFieldsContext = searchRequest.source().storedFields(); assertNotNull("StoredFieldsContext should not be null", storedFieldsContext); assertEquals("Should have 3 stored fields", 3, storedFieldsContext.fieldNames().size()); assertTrue("Should contain field1", storedFieldsContext.fieldNames().contains("field1")); @@ -201,58 +205,73 @@ public void testParseSearchSourceWithSource() throws IOException { } public void testParseSearchSourceWithTrackTotalHitsBoolean() throws IOException { - // Create a protobuf SearchRequest with track total hits boolean - org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() + // Create a protobuf SearchRequestBody with track total hits boolean + SearchRequestBody requestBody = SearchRequestBody.newBuilder() .setTrackTotalHits(TrackHits.newBuilder().setEnabled(true).build()) .build(); - // Create a SearchSourceBuilder to populate - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // Create a protobuf SearchRequest with the request body + org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() + .setSearchRequestBody(requestBody) + .build(); + + // Create a SearchRequest to populate + SearchRequest searchRequest = new SearchRequest(); // Call the method under test - SearchRequestProtoUtils.parseSearchSource(searchSourceBuilder, protoRequest, size -> {}); + SearchRequestProtoUtils.parseSearchRequest(searchRequest, protoRequest, namedWriteableRegistry, size -> {}, queryUtils); // Verify the result - assertNotNull("SearchSourceBuilder should not be null", searchSourceBuilder); - assertTrue("TrackTotalHits should be true", searchSourceBuilder.trackTotalHitsUpTo() == SearchContext.TRACK_TOTAL_HITS_ACCURATE); + assertNotNull("SearchRequest should not be null", searchRequest); + assertNotNull("Source should not be null", searchRequest.source()); + assertTrue("TrackTotalHits should be true", searchRequest.source().trackTotalHitsUpTo() == SearchContext.TRACK_TOTAL_HITS_ACCURATE); } public void testParseSearchSourceWithTrackTotalHitsInteger() throws IOException { - // Create a protobuf SearchRequest with track total hits integer - org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() + // Create a protobuf SearchRequestBody with track total hits integer + SearchRequestBody requestBody = SearchRequestBody.newBuilder() .setTrackTotalHits(TrackHits.newBuilder().setCount(1000).build()) .build(); - // Create a SearchSourceBuilder to populate - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // Create a protobuf SearchRequest with the request body + org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() + .setSearchRequestBody(requestBody) + .build(); + + // Create a SearchRequest to populate + SearchRequest searchRequest = new SearchRequest(); // Call the method under test - SearchRequestProtoUtils.parseSearchSource(searchSourceBuilder, protoRequest, size -> {}); + SearchRequestProtoUtils.parseSearchRequest(searchRequest, protoRequest, namedWriteableRegistry, size -> {}, queryUtils); // Verify the result - assertNotNull("SearchSourceBuilder should not be null", searchSourceBuilder); - assertEquals("TrackTotalHitsUpTo should match", 1000, searchSourceBuilder.trackTotalHitsUpTo().intValue()); + assertNotNull("SearchRequest should not be null", searchRequest); + assertNotNull("Source should not be null", searchRequest.source()); + assertEquals("TrackTotalHitsUpTo should match", 1000, searchRequest.source().trackTotalHitsUpTo().intValue()); } public void testParseSearchSourceWithStats() throws IOException { - // Create a protobuf SearchRequest with stats + // Create a protobuf SearchRequestBody with stats + SearchRequestBody requestBody = SearchRequestBody.newBuilder().addStats("stat1").addStats("stat2").build(); + + // Create a protobuf SearchRequest with the request body org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() - .addStats("stat1") - .addStats("stat2") + .setSearchRequestBody(requestBody) .build(); - // Create a SearchSourceBuilder to populate - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // Create a SearchRequest to populate + SearchRequest searchRequest = new SearchRequest(); // Call the method under test - SearchRequestProtoUtils.parseSearchSource(searchSourceBuilder, protoRequest, size -> {}); + SearchRequestProtoUtils.parseSearchRequest(searchRequest, protoRequest, namedWriteableRegistry, size -> {}, queryUtils); // Verify the result - assertNotNull("SearchSourceBuilder should not be null", searchSourceBuilder); - assertNotNull("Stats should not be null", searchSourceBuilder.stats()); - assertEquals("Should have 2 stats", 2, searchSourceBuilder.stats().size()); - assertTrue("Should contain stat1", searchSourceBuilder.stats().contains("stat1")); - assertTrue("Should contain stat2", searchSourceBuilder.stats().contains("stat2")); + assertNotNull("SearchRequest should not be null", searchRequest); + assertNotNull("Source should not be null", searchRequest.source()); + assertNotNull("Stats should not be null", searchRequest.source().stats()); + assertEquals("Should have 2 stats", 2, searchRequest.source().stats().size()); + assertTrue("Should contain stat1", searchRequest.source().stats().contains("stat1")); + assertTrue("Should contain stat2", searchRequest.source().stats().contains("stat2")); } public void testParseSearchSourceWithSuggest() throws IOException { @@ -286,9 +305,9 @@ public void testParseSearchSourceWithSuggest() throws IOException { } public void testCheckProtoTotalHitsWithRestTotalHitsAsInt() throws IOException { - // Create a protobuf SearchRequest with rest_total_hits_as_int + // Create a protobuf SearchRequest with total_hits_as_int org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() - .setRestTotalHitsAsInt(true) + .setTotalHitsAsInt(true) .build(); // Create a SearchRequest to populate @@ -304,9 +323,9 @@ public void testCheckProtoTotalHitsWithRestTotalHitsAsInt() throws IOException { } public void testCheckProtoTotalHitsWithTrackTotalHitsUpTo() throws IOException { - // Create a protobuf SearchRequest with rest_total_hits_as_int and track_total_hits_up_to + // Create a protobuf SearchRequest with total_hits_as_int and track_total_hits_up_to org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() - .setRestTotalHitsAsInt(true) + .setTotalHitsAsInt(true) .build(); // Create a SearchRequest with track_total_hits_up_to @@ -327,9 +346,9 @@ public void testCheckProtoTotalHitsWithTrackTotalHitsUpTo() throws IOException { } public void testCheckProtoTotalHitsWithInvalidTrackTotalHitsUpTo() throws IOException { - // Create a protobuf SearchRequest with rest_total_hits_as_int + // Create a protobuf SearchRequest with total_hits_as_int org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() - .setRestTotalHitsAsInt(true) + .setTotalHitsAsInt(true) .build(); // Create a SearchRequest with invalid track_total_hits_up_to @@ -346,18 +365,21 @@ public void testCheckProtoTotalHitsWithInvalidTrackTotalHitsUpTo() throws IOExce } public void testParseSearchSourceWithInvalidTerminateAfter() throws IOException { - // Create a protobuf SearchRequest with invalid terminateAfter + // Create a protobuf SearchRequestBody with invalid terminateAfter + SearchRequestBody requestBody = SearchRequestBody.newBuilder().setTerminateAfter(-1).build(); + + // Create a protobuf SearchRequest with the request body org.opensearch.protobufs.SearchRequest protoRequest = org.opensearch.protobufs.SearchRequest.newBuilder() - .setTerminateAfter(-1) + .setSearchRequestBody(requestBody) .build(); - // Create a SearchSourceBuilder to populate - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // Create a SearchRequest to populate + SearchRequest searchRequest = new SearchRequest(); // Call the method under test, should throw IllegalArgumentException IllegalArgumentException exception = expectThrows( IllegalArgumentException.class, - () -> SearchRequestProtoUtils.parseSearchSource(searchSourceBuilder, protoRequest, size -> {}) + () -> SearchRequestProtoUtils.parseSearchRequest(searchRequest, protoRequest, namedWriteableRegistry, size -> {}, queryUtils) ); assertTrue( diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtilsTests.java index 760444b1f8904..ecd01a96ef5f0 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/SearchSourceBuilderProtoUtilsTests.java @@ -14,7 +14,6 @@ import org.opensearch.protobufs.DerivedField; import org.opensearch.protobufs.FieldAndFormat; import org.opensearch.protobufs.FieldValue; -import org.opensearch.protobufs.FloatMap; import org.opensearch.protobufs.InlineScript; import org.opensearch.protobufs.MatchAllQuery; import org.opensearch.protobufs.ObjectMap; @@ -357,9 +356,7 @@ public void testParseProtoWithIndicesBoost() throws IOException { boostMap.put("index1", 1.0f); boostMap.put("index2", 2.0f); - SearchRequestBody protoRequest = SearchRequestBody.newBuilder() - .addIndicesBoost(FloatMap.newBuilder().putAllFloatMap(boostMap).build()) - .build(); + SearchRequestBody protoRequest = SearchRequestBody.newBuilder().putAllIndicesBoost(boostMap).build(); // Create a SearchSourceBuilder to populate SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtilsTests.java index 3a954c8aad40b..70d5e591f2884 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/StoredFieldsContextProtoUtilsTests.java @@ -8,7 +8,6 @@ package org.opensearch.transport.grpc.proto.request.search; -import org.opensearch.protobufs.SearchRequest; import org.opensearch.search.fetch.StoredFieldsContext; import org.opensearch.test.OpenSearchTestCase; @@ -63,12 +62,14 @@ public void testFromProtoWithSingleField() throws IOException { } public void testFromProtoRequestWithStoredFields() { - // Create a SearchRequest with stored fields + // Create a SearchRequestBody with stored fields List fieldNames = Arrays.asList("field1", "field2", "field3"); - SearchRequest searchRequest = SearchRequest.newBuilder().addAllStoredFields(fieldNames).build(); + org.opensearch.protobufs.SearchRequestBody searchRequestBody = org.opensearch.protobufs.SearchRequestBody.newBuilder() + .addAllStoredFields(fieldNames) + .build(); // Call the method under test - StoredFieldsContext storedFieldsContext = StoredFieldsContextProtoUtils.fromProtoRequest(searchRequest); + StoredFieldsContext storedFieldsContext = StoredFieldsContextProtoUtils.fromProtoRequest(searchRequestBody); // Verify the result assertNotNull("StoredFieldsContext should not be null", storedFieldsContext); @@ -77,22 +78,24 @@ public void testFromProtoRequestWithStoredFields() { } public void testFromProtoRequestWithNoStoredFields() { - // Create a SearchRequest with no stored fields - SearchRequest searchRequest = SearchRequest.newBuilder().build(); + // Create a SearchRequestBody with no stored fields + org.opensearch.protobufs.SearchRequestBody searchRequestBody = org.opensearch.protobufs.SearchRequestBody.newBuilder().build(); // Call the method under test - StoredFieldsContext storedFieldsContext = StoredFieldsContextProtoUtils.fromProtoRequest(searchRequest); + StoredFieldsContext storedFieldsContext = StoredFieldsContextProtoUtils.fromProtoRequest(searchRequestBody); // Verify the result assertNull("StoredFieldsContext should be null for request with no stored fields", storedFieldsContext); } public void testFromProtoRequestWithEmptyStoredFields() { - // Create a SearchRequest with empty stored fields list - SearchRequest searchRequest = SearchRequest.newBuilder().addAllStoredFields(Collections.emptyList()).build(); + // Create a SearchRequestBody with empty stored fields list + org.opensearch.protobufs.SearchRequestBody searchRequestBody = org.opensearch.protobufs.SearchRequestBody.newBuilder() + .addAllStoredFields(Collections.emptyList()) + .build(); // Call the method under test - StoredFieldsContext storedFieldsContext = StoredFieldsContextProtoUtils.fromProtoRequest(searchRequest); + StoredFieldsContext storedFieldsContext = StoredFieldsContextProtoUtils.fromProtoRequest(searchRequestBody); // Verify the result assertNull("StoredFieldsContext should be null for request with empty stored fields", storedFieldsContext); diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/BulkRequestProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/BulkRequestProtoUtilsTests.java index 804d14ed81c18..5a5055320ee99 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/BulkRequestProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/services/BulkRequestProtoUtilsTests.java @@ -117,7 +117,7 @@ private BulkRequest createBulkRequestWithIndexOperation() { .build(); return BulkRequest.newBuilder() - .addRequestBody(requestBody) + .addBulkRequestBody(requestBody) .setRefresh(org.opensearch.protobufs.Refresh.REFRESH_TRUE) .setPipeline("test-pipeline") .build(); @@ -129,7 +129,7 @@ private BulkRequest createBulkRequestWithCreateOperation() { .setOperationContainer(OperationContainer.newBuilder().setCreate(writeOp).build()) .build(); - return BulkRequest.newBuilder().addRequestBody(requestBody).build(); + return BulkRequest.newBuilder().addBulkRequestBody(requestBody).build(); } private BulkRequest createBulkRequestWithDeleteOperation() { @@ -138,7 +138,7 @@ private BulkRequest createBulkRequestWithDeleteOperation() { .setOperationContainer(OperationContainer.newBuilder().setDelete(deleteOp).build()) .build(); - return BulkRequest.newBuilder().addRequestBody(requestBody).build(); + return BulkRequest.newBuilder().addBulkRequestBody(requestBody).build(); } private BulkRequest createBulkRequestWithUpdateOperation() { @@ -147,6 +147,6 @@ private BulkRequest createBulkRequestWithUpdateOperation() { .setOperationContainer(OperationContainer.newBuilder().setUpdate(updateOp).build()) .build(); - return BulkRequest.newBuilder().addRequestBody(requestBody).build(); + return BulkRequest.newBuilder().addBulkRequestBody(requestBody).build(); } } 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..379452e11770b 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 @@ -92,6 +92,9 @@ public void testSearchWithException() throws IOException { } private SearchRequest createTestSearchRequest() { - return SearchRequest.newBuilder().addIndex("test-index").setRequestBody(SearchRequestBody.newBuilder().setSize(10).build()).build(); + return SearchRequest.newBuilder() + .addIndex("test-index") + .setSearchRequestBody(SearchRequestBody.newBuilder().setSize(10).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..3215238247bbd 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 @@ -76,6 +76,6 @@ private BulkRequest createTestBulkRequest() { .setObject(ByteString.copyFromUtf8("{\"field\":\"value\"}")) .build(); - return BulkRequest.newBuilder().addRequestBody(requestBody).build(); + return BulkRequest.newBuilder().addBulkRequestBody(requestBody).build(); } } From d83a0f1a192f045eb74cbb43f0dfa8f9083f93a9 Mon Sep 17 00:00:00 2001 From: xil Date: Fri, 31 Oct 2025 00:51:32 +0000 Subject: [PATCH 2/2] Add changelog Signed-off-by: xil --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bd7b95779676..f3dc6dc907cf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Remove FeatureFlag.MERGED_SEGMENT_WARMER_EXPERIMENTAL_FLAG. ([#19715](https://github.com/opensearch-project/OpenSearch/pull/19715)) - Change the default value of doc_values in WildcardFieldMapper to true. ([#19796](https://github.com/opensearch-project/OpenSearch/pull/19796)) - Make Engine#loadHistoryUUID() protected and Origin#isFromTranslog() public ([#19753](https://github.com/opensearch-project/OpenSearch/pull/19752)) +- Bump opensearch-protobufs dependency to 0.23.0 and update transport-grpc module compatibility ([#19831](https://github.com/opensearch-project/OpenSearch/pull/19831)) ### Fixed - Fix Allocation and Rebalance Constraints of WeightFunction are incorrectly reset ([#19012](https://github.com/opensearch-project/OpenSearch/pull/19012))