diff --git a/CHANGELOG.md b/CHANGELOG.md index feb9f3e0944c5..861473cbe1957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased 3.x] ### Added +- Upgrade opensearch-protobufs dependency to 0.7.0 and update transport-grpc module compatibility ([#19003](https://github.com/opensearch-project/OpenSearch/pull/19003)) ### Changed diff --git a/modules/transport-grpc/build.gradle b/modules/transport-grpc/build.gradle index 1e51154877d3b..86e3030f09976 100644 --- a/modules/transport-grpc/build.gradle +++ b/modules/transport-grpc/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation "io.grpc:grpc-stub:${versions.grpc}" implementation "io.grpc:grpc-util:${versions.grpc}" implementation "io.perfmark:perfmark-api:0.27.0" - implementation "org.opensearch:protobufs:0.6.0" + implementation "org.opensearch:protobufs:0.7.0" testImplementation project(':test:framework') } diff --git a/modules/transport-grpc/licenses/protobufs-0.6.0.jar.sha1 b/modules/transport-grpc/licenses/protobufs-0.6.0.jar.sha1 deleted file mode 100644 index a02b4926d87f5..0000000000000 --- a/modules/transport-grpc/licenses/protobufs-0.6.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -1675c5085e1376fd1a107b87f7e325944ab5b4dc \ No newline at end of file diff --git a/modules/transport-grpc/licenses/protobufs-0.7.0.jar.sha1 b/modules/transport-grpc/licenses/protobufs-0.7.0.jar.sha1 new file mode 100644 index 0000000000000..6b72f1f3464d7 --- /dev/null +++ b/modules/transport-grpc/licenses/protobufs-0.7.0.jar.sha1 @@ -0,0 +1 @@ +d83e08f04da8ec6a5b8925934e5a599b7592aba0 \ 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 bb899bc4542b9..f658245ffb66d 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 @@ -37,11 +37,11 @@ public void testDocumentServiceBulk() throws Exception { DocumentServiceGrpc.DocumentServiceBlockingStub documentStub = DocumentServiceGrpc.newBlockingStub(channel); // Create a bulk request with an index operation - IndexOperation indexOp = IndexOperation.newBuilder().setIndex(indexName).setId("1").build(); + IndexOperation indexOp = IndexOperation.newBuilder().setUnderscoreIndex(indexName).setUnderscoreId("1").build(); BulkRequestBody requestBody = BulkRequestBody.newBuilder() - .setIndex(indexOp) - .setDoc(com.google.protobuf.ByteString.copyFromUtf8(DEFAULT_DOCUMENT_SOURCE)) + .setOperationContainer(org.opensearch.protobufs.OperationContainer.newBuilder().setIndex(indexOp).build()) + .setObject(com.google.protobuf.ByteString.copyFromUtf8(DEFAULT_DOCUMENT_SOURCE)) .build(); BulkRequest bulkRequest = BulkRequest.newBuilder().addRequestBody(requestBody).build(); diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtils.java index 3ce4dc4bb876d..6d0530f1fd038 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtils.java @@ -43,25 +43,25 @@ public static FetchSourceContext parseFromProtoRequest(org.opensearch.protobufs. String[] sourceIncludes = null; // Set up source context if source parameters are provided - if (request.hasSource()) { - switch (request.getSource().getSourceConfigParamCase()) { - case SourceConfigParam.SourceConfigParamCase.BOOL_VALUE: - fetchSource = request.getSource().getBoolValue(); + if (request.hasUnderscoreSource()) { + switch (request.getUnderscoreSource().getSourceConfigParamCase()) { + case BOOL_VALUE: + fetchSource = request.getUnderscoreSource().getBoolValue(); break; - case SourceConfigParam.SourceConfigParamCase.STRING_ARRAY: - sourceIncludes = request.getSource().getStringArray().getStringArrayList().toArray(new String[0]); + case STRING_ARRAY: + sourceIncludes = request.getUnderscoreSource().getStringArray().getStringArrayList().toArray(new String[0]); break; default: throw new UnsupportedOperationException("Invalid sourceConfig provided."); } } - if (request.getSourceIncludesList().size() > 0) { - sourceIncludes = request.getSourceIncludesList().toArray(new String[0]); + if (request.getUnderscoreSourceIncludesCount() > 0) { + sourceIncludes = request.getUnderscoreSourceIncludesList().toArray(new String[0]); } - if (request.getSourceExcludesList().size() > 0) { - sourceExcludes = request.getSourceExcludesList().toArray(new String[0]); + if (request.getUnderscoreSourceExcludesCount() > 0) { + sourceExcludes = request.getUnderscoreSourceExcludesList().toArray(new String[0]); } if (fetchSource != null || sourceIncludes != null || sourceExcludes != null) { return new FetchSourceContext(fetchSource == null ? true : fetchSource, sourceIncludes, sourceExcludes); @@ -118,22 +118,16 @@ public static FetchSourceContext fromProto(SourceConfig sourceConfig) { String[] excludes = Strings.EMPTY_ARRAY; if (sourceConfig.getSourceConfigCase() == SourceConfig.SourceConfigCase.FETCH) { fetchSource = sourceConfig.getFetch(); - } else if (sourceConfig.hasIncludes()) { - ArrayList list = new ArrayList<>(); - for (String string : sourceConfig.getIncludes().getStringArrayList()) { - list.add(string); - } - includes = list.toArray(new String[0]); } else if (sourceConfig.hasFilter()) { SourceFilter sourceFilter = sourceConfig.getFilter(); - if (!sourceFilter.getIncludesList().isEmpty()) { + if (sourceFilter.getIncludesCount() > 0) { List includesList = new ArrayList<>(); for (String s : sourceFilter.getIncludesList()) { includesList.add(s); } includes = includesList.toArray(new String[0]); } - if (!sourceFilter.getExcludesList().isEmpty()) { + if (sourceFilter.getExcludesCount() > 0) { List excludesList = new ArrayList<>(); for (String s : sourceFilter.getExcludesList()) { excludesList.add(s); diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtils.java index 15ae8861ba760..94257c765f49b 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtils.java @@ -32,11 +32,12 @@ private OpTypeProtoUtils() { */ public static DocWriteRequest.OpType fromProto(OpType opType) { - switch (opType) { + switch (opType.getOpTypeCase()) { case OP_TYPE_CREATE: return DocWriteRequest.OpType.CREATE; case OP_TYPE_INDEX: return DocWriteRequest.OpType.INDEX; + case OPTYPE_NOT_SET: default: throw new UnsupportedOperationException("Invalid optype: " + opType); } diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtils.java index c498bf08f8925..1c3b1ed3ee488 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtils.java @@ -30,13 +30,13 @@ private RefreshProtoUtils() { * @return The corresponding OpenSearch refresh policy string value */ public static String getRefreshPolicy(org.opensearch.protobufs.Refresh refresh) { - switch (refresh) { + switch (refresh.getRefreshCase()) { case REFRESH_TRUE: return WriteRequest.RefreshPolicy.IMMEDIATE.getValue(); case REFRESH_WAIT_FOR: return WriteRequest.RefreshPolicy.WAIT_UNTIL.getValue(); case REFRESH_FALSE: - case REFRESH_UNSPECIFIED: + case REFRESH_NOT_SET: default: return WriteRequest.RefreshPolicy.NONE.getValue(); } diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtils.java index fc2da8e1444fc..832ccea613a4b 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtils.java @@ -56,10 +56,10 @@ public static Script parseFromProtoRequest(org.opensearch.protobufs.Script scrip private static Script parseFromProtoRequest(org.opensearch.protobufs.Script script, String defaultLang) { Objects.requireNonNull(defaultLang); - if (script.hasInlineScript()) { - return parseInlineScript(script.getInlineScript(), defaultLang); - } else if (script.hasStoredScriptId()) { - return parseStoredScriptId(script.getStoredScriptId()); + if (script.hasInline()) { + return parseInlineScript(script.getInline(), defaultLang); + } else if (script.hasStored()) { + return parseStoredScriptId(script.getStored()); } else { throw new UnsupportedOperationException("No valid script type detected"); } @@ -118,10 +118,10 @@ public static Script parseStoredScriptId(StoredScriptId storedScriptId) { * @throws UnsupportedOperationException if no language was specified */ public static String parseScriptLanguage(ScriptLanguage language, String defaultLang) { - if (language.hasStringValue()) { - return language.getStringValue(); + if (language.hasCustom()) { + return language.getCustom(); } - switch (language.getBuiltinScriptLanguage()) { + switch (language.getBuiltin()) { case BUILTIN_SCRIPT_LANGUAGE_EXPRESSION: return "expression"; case BUILTIN_SCRIPT_LANGUAGE_JAVA: diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtils.java index 91d3075763a72..efb7e334c0338 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtils.java @@ -38,17 +38,18 @@ private ActiveShardCountProtoUtils() { public static ActiveShardCount parseProto(WaitForActiveShards waitForActiveShards) { switch (waitForActiveShards.getWaitForActiveShardsCase()) { - case WaitForActiveShards.WaitForActiveShardsCase.WAIT_FOR_ACTIVE_SHARD_OPTIONS: - switch (waitForActiveShards.getWaitForActiveShardOptions()) { - case WAIT_FOR_ACTIVE_SHARD_OPTIONS_UNSPECIFIED: - throw new UnsupportedOperationException("No mapping for WAIT_FOR_ACTIVE_SHARD_OPTIONS_UNSPECIFIED"); + case WAIT_FOR_ACTIVE_SHARD_OPTIONS: + switch (waitForActiveShards.getWaitForActiveShardOptions().getWaitForActiveShardOptionsCase()) { case WAIT_FOR_ACTIVE_SHARD_OPTIONS_ALL: return ActiveShardCount.ALL; + case NULL_VALUE: + case WAITFORACTIVESHARDOPTIONS_NOT_SET: default: return ActiveShardCount.DEFAULT; } - case WaitForActiveShards.WaitForActiveShardsCase.INT32_VALUE: + case INT32_VALUE: return ActiveShardCount.from(waitForActiveShards.getInt32Value()); + case WAITFORACTIVESHARDS_NOT_SET: default: return ActiveShardCount.DEFAULT; } 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 1c1ba65700a22..b323f70a436d7 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 @@ -23,11 +23,13 @@ import org.opensearch.index.seqno.SequenceNumbers; import org.opensearch.protobufs.BulkRequest; import org.opensearch.protobufs.BulkRequestBody; -import org.opensearch.protobufs.CreateOperation; import org.opensearch.protobufs.DeleteOperation; import org.opensearch.protobufs.IndexOperation; import org.opensearch.protobufs.OpType; +import org.opensearch.protobufs.OperationContainer; +import org.opensearch.protobufs.UpdateAction; import org.opensearch.protobufs.UpdateOperation; +import org.opensearch.protobufs.WriteOperation; import org.opensearch.script.Script; import org.opensearch.search.fetch.subphase.FetchSourceContext; import org.opensearch.transport.grpc.proto.request.common.FetchSourceContextProtoUtils; @@ -121,12 +123,12 @@ public static DocWriteRequest[] getDocWriteRequests( String pipeline = valueOrDefault(defaultPipeline, request.getPipeline()); Boolean requireAlias = valueOrDefault(defaultRequireAlias, request.getRequireAlias()); - // Parse the operation type: create, index, update, delete, or none provided (which is invalid). - switch (bulkRequestBodyEntry.getOperationContainerCase()) { + OperationContainer operationContainer = bulkRequestBodyEntry.getOperationContainer(); + switch (operationContainer.getOperationContainerCase()) { case CREATE: docWriteRequest = buildCreateRequest( - bulkRequestBodyEntry.getCreate(), - bulkRequestBodyEntry.getDoc().toByteArray(), + operationContainer.getCreate(), + bulkRequestBodyEntry.getObject().toByteArray(), index, id, routing, @@ -140,8 +142,8 @@ public static DocWriteRequest[] getDocWriteRequests( break; case INDEX: docWriteRequest = buildIndexRequest( - bulkRequestBodyEntry.getIndex(), - bulkRequestBodyEntry.getDoc().toByteArray(), + operationContainer.getIndex(), + bulkRequestBodyEntry.getObject().toByteArray(), opType, index, id, @@ -156,8 +158,8 @@ public static DocWriteRequest[] getDocWriteRequests( break; case UPDATE: docWriteRequest = buildUpdateRequest( - bulkRequestBodyEntry.getUpdate(), - bulkRequestBodyEntry.getDoc().toByteArray(), + operationContainer.getUpdate(), + bulkRequestBodyEntry.getObject().toByteArray(), bulkRequestBodyEntry, index, id, @@ -172,7 +174,7 @@ public static DocWriteRequest[] getDocWriteRequests( break; case DELETE: docWriteRequest = buildDeleteRequest( - bulkRequestBodyEntry.getDelete(), + operationContainer.getDelete(), index, id, routing, @@ -211,7 +213,7 @@ public static DocWriteRequest[] getDocWriteRequests( * @return The constructed IndexRequest */ public static IndexRequest buildCreateRequest( - CreateOperation createOperation, + WriteOperation createOperation, byte[] document, String index, String id, @@ -223,17 +225,10 @@ public static IndexRequest buildCreateRequest( long ifPrimaryTerm, boolean requireAlias ) { - index = createOperation.hasIndex() ? createOperation.getIndex() : index; - id = createOperation.hasId() ? createOperation.getId() : id; + index = createOperation.hasUnderscoreIndex() ? createOperation.getUnderscoreIndex() : index; + id = createOperation.hasUnderscoreId() ? createOperation.getUnderscoreId() : id; routing = createOperation.hasRouting() ? createOperation.getRouting() : routing; - version = createOperation.hasVersion() ? createOperation.getVersion() : version; - if (createOperation.hasVersionType()) { - versionType = VersionTypeProtoUtils.fromProto(createOperation.getVersionType()); - - } pipeline = createOperation.hasPipeline() ? createOperation.getPipeline() : pipeline; - ifSeqNo = createOperation.hasIfSeqNo() ? createOperation.getIfSeqNo() : ifSeqNo; - ifPrimaryTerm = createOperation.hasIfPrimaryTerm() ? createOperation.getIfPrimaryTerm() : ifPrimaryTerm; requireAlias = createOperation.hasRequireAlias() ? createOperation.getRequireAlias() : requireAlias; IndexRequest indexRequest = new IndexRequest(index).id(id) @@ -281,8 +276,8 @@ public static IndexRequest buildIndexRequest( boolean requireAlias ) { opType = indexOperation.hasOpType() ? indexOperation.getOpType() : opType; - index = indexOperation.hasIndex() ? indexOperation.getIndex() : index; - id = indexOperation.hasId() ? indexOperation.getId() : id; + index = indexOperation.hasUnderscoreIndex() ? indexOperation.getUnderscoreIndex() : index; + id = indexOperation.hasUnderscoreId() ? indexOperation.getUnderscoreId() : id; routing = indexOperation.hasRouting() ? indexOperation.getRouting() : routing; version = indexOperation.hasVersion() ? indexOperation.getVersion() : version; if (indexOperation.hasVersionType()) { @@ -309,7 +304,7 @@ public static IndexRequest buildIndexRequest( .routing(routing) .version(version) .versionType(versionType) - .create(opType.equals(OpType.OP_TYPE_CREATE)) + .create(opType.getOpTypeCase() == OpType.OpTypeCase.OP_TYPE_CREATE) .setPipeline(pipeline) .setIfSeqNo(ifSeqNo) .setIfPrimaryTerm(ifPrimaryTerm) @@ -350,11 +345,11 @@ public static UpdateRequest buildUpdateRequest( long ifPrimaryTerm, boolean requireAlias ) { - index = updateOperation.hasIndex() ? updateOperation.getIndex() : index; - id = updateOperation.hasId() ? updateOperation.getId() : id; + index = updateOperation.hasUnderscoreIndex() ? updateOperation.getUnderscoreIndex() : index; + id = updateOperation.hasUnderscoreId() ? updateOperation.getUnderscoreId() : id; routing = updateOperation.hasRouting() ? updateOperation.getRouting() : routing; - fetchSourceContext = bulkRequestBody.hasSource() - ? FetchSourceContextProtoUtils.fromProto(bulkRequestBody.getSource()) + fetchSourceContext = bulkRequestBody.hasUpdateAction() && bulkRequestBody.getUpdateAction().hasUnderscoreSource() + ? FetchSourceContextProtoUtils.fromProto(bulkRequestBody.getUpdateAction().getUnderscoreSource()) : fetchSourceContext; retryOnConflict = updateOperation.hasRetryOnConflict() ? updateOperation.getRetryOnConflict() : retryOnConflict; ifSeqNo = updateOperation.hasIfSeqNo() ? updateOperation.getIfSeqNo() : ifSeqNo; @@ -400,36 +395,36 @@ public static UpdateRequest fromProto( BulkRequestBody bulkRequestBody, UpdateOperation updateOperation ) { - if (bulkRequestBody.hasScript()) { - Script script = ScriptProtoUtils.parseFromProtoRequest(bulkRequestBody.getScript()); - updateRequest.script(script); - } + if (bulkRequestBody.hasUpdateAction()) { + UpdateAction updateAction = bulkRequestBody.getUpdateAction(); - if (bulkRequestBody.hasScriptedUpsert()) { - updateRequest.scriptedUpsert(bulkRequestBody.getScriptedUpsert()); - } + if (updateAction.hasScript()) { + Script script = ScriptProtoUtils.parseFromProtoRequest(updateAction.getScript()); + updateRequest.script(script); + } - if (bulkRequestBody.hasUpsert()) { - updateRequest.upsert(bulkRequestBody.getUpsert(), MediaTypeRegistry.JSON); - } + if (updateAction.hasScriptedUpsert()) { + updateRequest.scriptedUpsert(updateAction.getScriptedUpsert()); + } - updateRequest.doc(document, MediaTypeRegistry.JSON); + if (updateAction.hasUpsert()) { + updateRequest.upsert(updateAction.getUpsert(), MediaTypeRegistry.JSON); + } - if (bulkRequestBody.hasDocAsUpsert()) { - updateRequest.docAsUpsert(bulkRequestBody.getDocAsUpsert()); - } + if (updateAction.hasDocAsUpsert()) { + updateRequest.docAsUpsert(updateAction.getDocAsUpsert()); + } - if (bulkRequestBody.hasDetectNoop()) { - updateRequest.detectNoop(bulkRequestBody.getDetectNoop()); - } + if (updateAction.hasDetectNoop()) { + updateRequest.detectNoop(updateAction.getDetectNoop()); + } - if (bulkRequestBody.hasDocAsUpsert()) { - updateRequest.docAsUpsert(bulkRequestBody.getDocAsUpsert()); + if (updateAction.hasUnderscoreSource()) { + updateRequest.fetchSource(FetchSourceContextProtoUtils.fromProto(updateAction.getUnderscoreSource())); + } } - if (bulkRequestBody.hasSource()) { - updateRequest.fetchSource(FetchSourceContextProtoUtils.fromProto(bulkRequestBody.getSource())); - } + updateRequest.doc(document, MediaTypeRegistry.JSON); if (updateOperation.hasIfSeqNo()) { updateRequest.setIfSeqNo(updateOperation.getIfSeqNo()); @@ -465,8 +460,8 @@ public static DeleteRequest buildDeleteRequest( long ifSeqNo, long ifPrimaryTerm ) { - index = deleteOperation.hasIndex() ? deleteOperation.getIndex() : index; - id = deleteOperation.hasId() ? deleteOperation.getId() : id; + index = deleteOperation.hasUnderscoreIndex() ? deleteOperation.getUnderscoreIndex() : index; + id = deleteOperation.hasUnderscoreId() ? deleteOperation.getUnderscoreId() : id; routing = deleteOperation.hasRouting() ? deleteOperation.getRouting() : routing; version = deleteOperation.hasVersion() ? deleteOperation.getVersion() : version; if (deleteOperation.hasVersionType()) { diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtils.java index 5e04f99b67914..2c7be6c6c71c4 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtils.java @@ -100,8 +100,8 @@ protected static InnerHitBuilder fromProto(List innerHits) throws IOE if (innerHit.getSortCount() > 0) { innerHitBuilder.setSorts(SortBuilderProtoUtils.fromProto(innerHit.getSortList())); } - if (innerHit.hasSource()) { - innerHitBuilder.setFetchSourceContext(FetchSourceContextProtoUtils.fromProto(innerHit.getSource())); + if (innerHit.hasUnderscoreSource()) { + innerHitBuilder.setFetchSourceContext(FetchSourceContextProtoUtils.fromProto(innerHit.getUnderscoreSource())); } if (innerHit.hasHighlight()) { innerHitBuilder.setHighlightBuilder(HighlightBuilderProtoUtils.fromProto(innerHit.getHighlight())); diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtils.java index 5dcdeebd96631..16d56493baed3 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtils.java @@ -14,9 +14,10 @@ import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.index.get.GetResult; import org.opensearch.protobufs.ErrorCause; -import org.opensearch.protobufs.Item; +import org.opensearch.protobufs.Id; import org.opensearch.protobufs.NullValue; import org.opensearch.protobufs.ResponseItem; +import org.opensearch.protobufs.ResponseOpType; import org.opensearch.transport.grpc.proto.response.document.common.DocWriteResponseProtoUtils; import org.opensearch.transport.grpc.proto.response.document.get.GetResultProtoUtils; import org.opensearch.transport.grpc.proto.response.exceptions.opensearchexception.OpenSearchExceptionProtoUtils; @@ -41,14 +42,13 @@ private BulkItemResponseProtoUtils() { * * * @param response The BulkItemResponse to convert - * @return A Protocol Buffer Item representation + * @return A Protocol Buffer ResponseItem representation * @throws IOException if there's an error during conversion * */ - public static Item toProto(BulkItemResponse response) throws IOException { - Item.Builder itemBuilder = Item.newBuilder(); - + public static ResponseItem toProto(BulkItemResponse response) throws IOException { ResponseItem.Builder responseItemBuilder; + if (response.isFailed() == false) { DocWriteResponse docResponse = response.getResponse(); responseItemBuilder = DocWriteResponseProtoUtils.toProto(docResponse); @@ -59,31 +59,29 @@ public static Item toProto(BulkItemResponse response) throws IOException { BulkItemResponse.Failure failure = response.getFailure(); responseItemBuilder = ResponseItem.newBuilder(); - responseItemBuilder.setIndex(failure.getIndex()); + responseItemBuilder.setUnderscoreIndex(failure.getIndex()); if (response.getId().isEmpty()) { - responseItemBuilder.setId(ResponseItem.Id.newBuilder().setNullValue(NullValue.NULL_VALUE_NULL).build()); + responseItemBuilder.setUnderscoreId(Id.newBuilder().setNullValue(NullValue.NULL_VALUE_NULL).build()); } else { - responseItemBuilder.setId(ResponseItem.Id.newBuilder().setString(response.getId()).build()); + responseItemBuilder.setUnderscoreId(Id.newBuilder().setString(response.getId()).build()); } int grpcStatusCode = RestToGrpcStatusConverter.getGrpcStatusCode(failure.getStatus()); responseItemBuilder.setStatus(grpcStatusCode); ErrorCause errorCause = OpenSearchExceptionProtoUtils.generateThrowableProto(failure.getCause()); - responseItemBuilder.setError(errorCause); } - ResponseItem responseItem; + // Set the operation type in ResponseItem switch (response.getOpType()) { case CREATE: - responseItem = responseItemBuilder.build(); - itemBuilder.setCreate(responseItem); + responseItemBuilder.setResponseOpType(ResponseOpType.RESPONSE_OP_TYPE_CREATE); break; case INDEX: - responseItem = responseItemBuilder.build(); - itemBuilder.setIndex(responseItem); + responseItemBuilder.setResponseOpType(ResponseOpType.RESPONSE_OP_TYPE_INDEX); break; case UPDATE: + responseItemBuilder.setResponseOpType(ResponseOpType.RESPONSE_OP_TYPE_UPDATE); UpdateResponse updateResponse = response.getResponse(); if (updateResponse != null) { GetResult getResult = updateResponse.getGetResult(); @@ -91,17 +89,14 @@ public static Item toProto(BulkItemResponse response) throws IOException { responseItemBuilder = GetResultProtoUtils.toProto(getResult, responseItemBuilder); } } - responseItem = responseItemBuilder.build(); - itemBuilder.setUpdate(responseItem); break; case DELETE: - responseItem = responseItemBuilder.build(); - itemBuilder.setDelete(responseItem); + responseItemBuilder.setResponseOpType(ResponseOpType.RESPONSE_OP_TYPE_DELETE); break; default: throw new UnsupportedOperationException("Invalid op type: " + response.getOpType()); } - return itemBuilder.build(); + return responseItemBuilder.build(); } } diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtils.java index dfea0c2627d5f..b33a7ab85b7f3 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtils.java @@ -10,6 +10,7 @@ import org.opensearch.action.DocWriteResponse; import org.opensearch.core.xcontent.ToXContent; import org.opensearch.core.xcontent.XContentBuilder; +import org.opensearch.protobufs.Id; import org.opensearch.protobufs.NullValue; import org.opensearch.protobufs.ResponseItem; import org.opensearch.protobufs.ShardInfo; @@ -39,17 +40,17 @@ public static ResponseItem.Builder toProto(DocWriteResponse response) throws IOE ResponseItem.Builder responseItem = ResponseItem.newBuilder(); // Set the index name - responseItem.setIndex(response.getIndex()); + responseItem.setUnderscoreIndex(response.getIndex()); // Handle document ID (can be null in some cases) if (response.getId().isEmpty()) { - responseItem.setId(ResponseItem.Id.newBuilder().setNullValue(NullValue.NULL_VALUE_NULL).build()); + responseItem.setUnderscoreId(Id.newBuilder().setNullValue(NullValue.NULL_VALUE_NULL).build()); } else { - responseItem.setId(ResponseItem.Id.newBuilder().setString(response.getId()).build()); + responseItem.setUnderscoreId(Id.newBuilder().setString(response.getId()).build()); } // Set document version - responseItem.setVersion(response.getVersion()); + responseItem.setUnderscoreVersion(response.getVersion()); // Set operation result (CREATED, UPDATED, DELETED, NOT_FOUND, NOOP) responseItem.setResult(response.getResult().getLowercase()); @@ -60,12 +61,12 @@ public static ResponseItem.Builder toProto(DocWriteResponse response) throws IOE } // Handle shard information ShardInfo shardInfo = ShardInfoProtoUtils.toProto(response.getShardInfo()); - responseItem.setShards(shardInfo); + responseItem.setUnderscoreShards(shardInfo); // Set sequence number and primary term if available if (response.getSeqNo() >= 0) { - responseItem.setSeqNo(response.getSeqNo()); - responseItem.setPrimaryTerm(response.getPrimaryTerm()); + responseItem.setUnderscoreSeqNo(response.getSeqNo()); + responseItem.setUnderscorePrimaryTerm(response.getPrimaryTerm()); } return responseItem; diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtils.java index ddb30f6b20e7f..b4daee1292abd 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtils.java @@ -29,11 +29,15 @@ private VersionTypeProtoUtils() { * @return The corresponding OpenSearch VersionType */ public static VersionType fromProto(org.opensearch.protobufs.VersionType versionType) { - switch (versionType) { + switch (versionType.getVersionTypeCase()) { case VERSION_TYPE_EXTERNAL: return VersionType.EXTERNAL; case VERSION_TYPE_EXTERNAL_GTE: return VersionType.EXTERNAL_GTE; + case VERSION_TYPE_INTERNAL: + return VersionType.INTERNAL; + case VERSION_TYPE_FORCE: + case VERSIONTYPE_NOT_SET: default: return VersionType.INTERNAL; } diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtils.java index b309f8b6fbd17..e705e8ddfdd2e 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtils.java @@ -14,6 +14,7 @@ import org.opensearch.index.get.GetResult; import org.opensearch.index.mapper.IgnoredFieldMapper; import org.opensearch.index.seqno.SequenceNumbers; +import org.opensearch.protobufs.Id; import org.opensearch.protobufs.InlineGetDictUserDefined; import org.opensearch.protobufs.ObjectMap; import org.opensearch.protobufs.ResponseItem; @@ -40,11 +41,11 @@ private GetResultProtoUtils() { */ public static ResponseItem.Builder toProto(GetResult getResult, ResponseItem.Builder responseItemBuilder) { // Reuse the builder passed in by reference - responseItemBuilder.setIndex(getResult.getIndex()); + responseItemBuilder.setUnderscoreIndex(getResult.getIndex()); // Avoid creating a new Id builder for each call - ResponseItem.Id id = ResponseItem.Id.newBuilder().setString(getResult.getId()).build(); - responseItemBuilder.setId(id); + Id id = Id.newBuilder().setString(getResult.getId()).build(); + responseItemBuilder.setUnderscoreId(id); // Create the inline get dict builder only once InlineGetDictUserDefined.Builder inlineGetDictUserDefinedBuilder = InlineGetDictUserDefined.newBuilder(); @@ -52,7 +53,7 @@ public static ResponseItem.Builder toProto(GetResult getResult, ResponseItem.Bui if (getResult.isExists()) { // Set document version if available if (getResult.getVersion() != -1) { - responseItemBuilder.setVersion(getResult.getVersion()); + responseItemBuilder.setUnderscoreVersion(getResult.getVersion()); } toProtoEmbedded(getResult, inlineGetDictUserDefinedBuilder); } else { @@ -74,7 +75,7 @@ public static void toProtoEmbedded(GetResult getResult, InlineGetDictUserDefined // Set sequence number and primary term if available if (getResult.getSeqNo() != SequenceNumbers.UNASSIGNED_SEQ_NO) { builder.setSeqNo(getResult.getSeqNo()); - builder.setPrimaryTerm(getResult.getPrimaryTerm()); + builder.setUnderscorePrimaryTerm(getResult.getPrimaryTerm()); } // Set existence status @@ -82,7 +83,7 @@ public static void toProtoEmbedded(GetResult getResult, InlineGetDictUserDefined // Set source if available - avoid unnecessary copying if possible if (getResult.source() != null) { - builder.setSource(ByteString.copyFrom(getResult.source())); + builder.setUnderscoreSource(ByteString.copyFrom(getResult.source())); } // Process metadata fields diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtilsTests.java index e0f068c72e605..a5b61f66adf5b 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/FetchSourceContextProtoUtilsTests.java @@ -22,7 +22,9 @@ public class FetchSourceContextProtoUtilsTests extends OpenSearchTestCase { public void testParseFromProtoRequestWithBoolValue() { // Create a BulkRequest with source as boolean - BulkRequest request = BulkRequest.newBuilder().setSource(SourceConfigParam.newBuilder().setBoolValue(true).build()).build(); + BulkRequest request = BulkRequest.newBuilder() + .setUnderscoreSource(SourceConfigParam.newBuilder().setBoolValue(true).build()) + .build(); // Parse the request FetchSourceContext context = FetchSourceContextProtoUtils.parseFromProtoRequest(request); @@ -37,7 +39,7 @@ public void testParseFromProtoRequestWithBoolValue() { public void testParseFromProtoRequestWithStringArray() { // Create a BulkRequest with source as string array BulkRequest request = BulkRequest.newBuilder() - .setSource( + .setUnderscoreSource( SourceConfigParam.newBuilder() .setStringArray(StringArray.newBuilder().addStringArray("field1").addStringArray("field2").build()) .build() @@ -56,7 +58,7 @@ public void testParseFromProtoRequestWithStringArray() { public void testParseFromProtoRequestWithSourceIncludes() { // Create a BulkRequest with source includes - BulkRequest request = BulkRequest.newBuilder().addSourceIncludes("field1").addSourceIncludes("field2").build(); + BulkRequest request = BulkRequest.newBuilder().addUnderscoreSourceIncludes("field1").addUnderscoreSourceIncludes("field2").build(); // Parse the request FetchSourceContext context = FetchSourceContextProtoUtils.parseFromProtoRequest(request); @@ -70,7 +72,7 @@ public void testParseFromProtoRequestWithSourceIncludes() { public void testParseFromProtoRequestWithSourceExcludes() { // Create a BulkRequest with source excludes - BulkRequest request = BulkRequest.newBuilder().addSourceExcludes("field1").addSourceExcludes("field2").build(); + BulkRequest request = BulkRequest.newBuilder().addUnderscoreSourceExcludes("field1").addUnderscoreSourceExcludes("field2").build(); // Parse the request FetchSourceContext context = FetchSourceContextProtoUtils.parseFromProtoRequest(request); @@ -85,10 +87,10 @@ public void testParseFromProtoRequestWithSourceExcludes() { public void testParseFromProtoRequestWithBothIncludesAndExcludes() { // Create a BulkRequest with both source includes and excludes BulkRequest request = BulkRequest.newBuilder() - .addSourceIncludes("include1") - .addSourceIncludes("include2") - .addSourceExcludes("exclude1") - .addSourceExcludes("exclude2") + .addUnderscoreSourceIncludes("include1") + .addUnderscoreSourceIncludes("include2") + .addUnderscoreSourceExcludes("exclude1") + .addUnderscoreSourceExcludes("exclude2") .build(); // Parse the request @@ -134,7 +136,7 @@ public void testFromProtoWithFetch() { public void testFromProtoWithIncludes() { // Create a SourceConfig with includes SourceConfig sourceConfig = SourceConfig.newBuilder() - .setIncludes(StringArray.newBuilder().addStringArray("field1").addStringArray("field2").build()) + .setFilter(SourceFilter.newBuilder().addIncludes("field1").addIncludes("field2").build()) .build(); // Convert to FetchSourceContext @@ -288,7 +290,7 @@ public void testFromProtoWithSourceConfigFetch() { public void testFromProtoWithSourceConfigIncludes() { // Create a SourceConfig with includes SourceConfig sourceConfig = SourceConfig.newBuilder() - .setIncludes(StringArray.newBuilder().addStringArray("field1").addStringArray("field2").build()) + .setFilter(SourceFilter.newBuilder().addIncludes("field1").addIncludes("field2").build()) .build(); // Convert to FetchSourceContext diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtilsTests.java index dac49e1c8e32d..d01acd015f4cb 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/OpTypeProtoUtilsTests.java @@ -15,40 +15,36 @@ public class OpTypeProtoUtilsTests extends OpenSearchTestCase { public void testFromProtoWithOpTypeCreate() { - // Test conversion from OpType.OP_TYPE_CREATE to DocWriteRequest.OpType.CREATE - DocWriteRequest.OpType result = OpTypeProtoUtils.fromProto(OpType.OP_TYPE_CREATE); + OpType opType = OpType.newBuilder().setOpTypeCreate(true).build(); + DocWriteRequest.OpType result = OpTypeProtoUtils.fromProto(opType); - // Verify the result assertEquals("OP_TYPE_CREATE should convert to DocWriteRequest.OpType.CREATE", DocWriteRequest.OpType.CREATE, result); } public void testFromProtoWithOpTypeIndex() { - // Test conversion from OpType.OP_TYPE_INDEX to DocWriteRequest.OpType.INDEX - DocWriteRequest.OpType result = OpTypeProtoUtils.fromProto(OpType.OP_TYPE_INDEX); + OpType opType = OpType.newBuilder().setOpTypeIndex(true).build(); + DocWriteRequest.OpType result = OpTypeProtoUtils.fromProto(opType); - // Verify the result assertEquals("OP_TYPE_INDEX should convert to DocWriteRequest.OpType.INDEX", DocWriteRequest.OpType.INDEX, result); } public void testFromProtoWithOpTypeUnspecified() { - // Test conversion from OpType.OP_TYPE_UNSPECIFIED, should throw UnsupportedOperationException + OpType opType = OpType.newBuilder().build(); UnsupportedOperationException exception = expectThrows( UnsupportedOperationException.class, - () -> OpTypeProtoUtils.fromProto(OpType.OP_TYPE_UNSPECIFIED) + () -> OpTypeProtoUtils.fromProto(opType) ); - // Verify the exception message assertTrue("Exception message should mention 'Invalid optype'", exception.getMessage().contains("Invalid optype")); } public void testFromProtoWithUnrecognizedOpType() { - // Test conversion with an unrecognized OpType, should throw UnsupportedOperationException + OpType opType = OpType.newBuilder().build(); UnsupportedOperationException exception = expectThrows( UnsupportedOperationException.class, - () -> OpTypeProtoUtils.fromProto(OpType.UNRECOGNIZED) + () -> OpTypeProtoUtils.fromProto(opType) ); - // Verify the exception message assertTrue("Exception message should mention 'Invalid optype'", exception.getMessage().contains("Invalid optype")); } } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtilsTests.java index 52c8c195172d4..6339e8fd8567a 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/RefreshProtoUtilsTests.java @@ -17,47 +17,42 @@ public class RefreshProtoUtilsTests extends OpenSearchTestCase { public void testGetRefreshPolicyWithRefreshTrue() { - // Call getRefreshPolicy - String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(Refresh.REFRESH_TRUE); + Refresh refresh = Refresh.newBuilder().setRefreshTrue(true).build(); + + String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(refresh); - // Verify the result assertEquals("Should return IMMEDIATE refresh policy", WriteRequest.RefreshPolicy.IMMEDIATE.getValue(), refreshPolicy); } public void testGetRefreshPolicyWithRefreshWaitFor() { + Refresh refresh = Refresh.newBuilder().setRefreshWaitFor(true).build(); - // Call getRefreshPolicy - String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(Refresh.REFRESH_WAIT_FOR); + String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(refresh); - // Verify the result assertEquals("Should return WAIT_UNTIL refresh policy", WriteRequest.RefreshPolicy.WAIT_UNTIL.getValue(), refreshPolicy); } public void testGetRefreshPolicyWithRefreshFalse() { - // Call getRefreshPolicy - String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(Refresh.REFRESH_FALSE); + Refresh refresh = Refresh.newBuilder().setRefreshFalse(true).build(); + + String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(refresh); - // Verify the result assertEquals("Should return NONE refresh policy", WriteRequest.RefreshPolicy.NONE.getValue(), refreshPolicy); } public void testGetRefreshPolicyWithRefreshUnspecified() { - // Call getRefreshPolicy - String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(Refresh.REFRESH_UNSPECIFIED); + Refresh refresh = Refresh.newBuilder().build(); + + String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(refresh); - // Verify the result assertEquals("Should return NONE refresh policy", WriteRequest.RefreshPolicy.NONE.getValue(), refreshPolicy); } public void testGetRefreshPolicyWithNoRefresh() { - // Create a protobuf BulkRequest with no refresh value BulkRequest request = BulkRequest.newBuilder().build(); - // Call getRefreshPolicy String refreshPolicy = RefreshProtoUtils.getRefreshPolicy(request.getRefresh()); - // Verify the result - assertEquals("Should default to REFRESH_UNSPECIFIED", Refresh.REFRESH_UNSPECIFIED, request.getRefresh()); assertEquals("Should return NONE refresh policy", WriteRequest.RefreshPolicy.NONE.getValue(), refreshPolicy); } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtilsTests.java index ed34435c90700..388e37d48ced1 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/ScriptProtoUtilsTests.java @@ -11,7 +11,6 @@ import org.opensearch.protobufs.InlineScript; import org.opensearch.protobufs.ObjectMap; import org.opensearch.protobufs.ScriptLanguage; -import org.opensearch.protobufs.ScriptLanguage.BuiltinScriptLanguage; import org.opensearch.protobufs.StoredScriptId; import org.opensearch.script.Script; import org.opensearch.script.ScriptType; @@ -25,20 +24,20 @@ public class ScriptProtoUtilsTests extends OpenSearchTestCase { public void testParseFromProtoRequestWithInlineScript() { - // Create a protobuf Script with an inline script org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS)) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + ) .build() ) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script type should be INLINE", ScriptType.INLINE, script.getType()); assertEquals("Script language should be painless", "painless", script.getLang()); @@ -47,20 +46,17 @@ public void testParseFromProtoRequestWithInlineScript() { } public void testParseFromProtoRequestWithInlineScriptAndCustomLanguage() { - // Create a protobuf Script with an inline script and custom language org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setStringValue("custom_lang")) + .setLang(ScriptLanguage.newBuilder().setCustom("custom_lang")) .build() ) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script type should be INLINE", ScriptType.INLINE, script.getType()); assertEquals("Script language should be custom_lang", "custom_lang", script.getLang()); @@ -69,26 +65,26 @@ public void testParseFromProtoRequestWithInlineScriptAndCustomLanguage() { } public void testParseFromProtoRequestWithInlineScriptAndParams() { - // Create a protobuf Script with an inline script and parameters ObjectMap params = ObjectMap.newBuilder() .putFields("factor", ObjectMap.Value.newBuilder().setDouble(2.5).build()) .putFields("name", ObjectMap.Value.newBuilder().setString("test").build()) .build(); org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * params.factor") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS)) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + ) .setParams(params) .build() ) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script type should be INLINE", ScriptType.INLINE, script.getType()); assertEquals("Script language should be painless", "painless", script.getLang()); @@ -99,24 +95,24 @@ public void testParseFromProtoRequestWithInlineScriptAndParams() { } public void testParseFromProtoRequestWithInlineScriptAndOptions() { - // Create a protobuf Script with an inline script and options Map options = new HashMap<>(); options.put("content_type", "application/json"); org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS)) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + ) .putAllOptions(options) .build() ) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script type should be INLINE", ScriptType.INLINE, script.getType()); assertEquals("Script language should be painless", "painless", script.getLang()); @@ -130,35 +126,33 @@ public void testParseFromProtoRequestWithInlineScriptAndOptions() { } public void testParseFromProtoRequestWithInlineScriptAndInvalidOptions() { - // Create a protobuf Script with an inline script and invalid options Map options = new HashMap<>(); options.put("content_type", "application/json"); options.put("invalid_option", "value"); org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS)) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + ) .putAllOptions(options) .build() ) .build(); - // Parse the protobuf Script, should throw IllegalArgumentException expectThrows(IllegalArgumentException.class, () -> ScriptProtoUtils.parseFromProtoRequest(protoScript)); } public void testParseFromProtoRequestWithStoredScript() { - // Create a protobuf Script with a stored script org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setStoredScriptId(StoredScriptId.newBuilder().setId("my-stored-script").build()) + .setStored(StoredScriptId.newBuilder().setId("my-stored-script").build()) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script type should be STORED", ScriptType.STORED, script.getType()); assertNull("Script language should be null for stored scripts", script.getLang()); @@ -168,20 +162,17 @@ public void testParseFromProtoRequestWithStoredScript() { } public void testParseFromProtoRequestWithStoredScriptAndParams() { - // Create a protobuf Script with a stored script and parameters ObjectMap params = ObjectMap.newBuilder() .putFields("factor", ObjectMap.Value.newBuilder().setDouble(2.5).build()) .putFields("name", ObjectMap.Value.newBuilder().setString("test").build()) .build(); org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setStoredScriptId(StoredScriptId.newBuilder().setId("my-stored-script").setParams(params).build()) + .setStored(StoredScriptId.newBuilder().setId("my-stored-script").setParams(params).build()) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script type should be STORED", ScriptType.STORED, script.getType()); assertNull("Script language should be null for stored scripts", script.getLang()); @@ -192,78 +183,75 @@ public void testParseFromProtoRequestWithStoredScriptAndParams() { } public void testParseFromProtoRequestWithNoScriptType() { - // Create a protobuf Script with no script type org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder().build(); - // Parse the protobuf Script, should throw UnsupportedOperationException expectThrows(UnsupportedOperationException.class, () -> ScriptProtoUtils.parseFromProtoRequest(protoScript)); } public void testParseScriptLanguageWithExpressionLanguage() { - // Create a protobuf Script with expression language org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_EXPRESSION)) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_EXPRESSION) + ) .build() ) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script language should be expression", "expression", script.getLang()); } public void testParseScriptLanguageWithJavaLanguage() { - // Create a protobuf Script with java language org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_JAVA)) + .setLang( + ScriptLanguage.newBuilder().setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_JAVA) + ) .build() ) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script language should be java", "java", script.getLang()); } public void testParseScriptLanguageWithMustacheLanguage() { - // Create a protobuf Script with mustache language org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_MUSTACHE)) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_MUSTACHE) + ) .build() ) .build(); - // Parse the protobuf Script Script script = ScriptProtoUtils.parseFromProtoRequest(protoScript); - // Verify the result assertNotNull("Script should not be null", script); assertEquals("Script language should be mustache", "mustache", script.getLang()); } public void testParseScriptLanguageWithUnspecifiedLanguage() { - // Create a protobuf Script with unspecified language org.opensearch.protobufs.Script protoScript = org.opensearch.protobufs.Script.newBuilder() - .setInlineScript( + .setInline( InlineScript.newBuilder() .setSource("doc['field'].value * 2") .setLang( - ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_UNSPECIFIED) + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_UNSPECIFIED) ) .build() ) diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtilsTests.java index b8837e2d6795a..6abfa59a564ec 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/ActiveShardCountProtoUtilsTests.java @@ -25,7 +25,9 @@ public void testGetActiveShardCountWithNoWaitForActiveShards() { public void testGetActiveShardCountWithWaitForActiveShardsAll() { // Create a protobuf BulkRequest with wait_for_active_shards = ALL (value 1) WaitForActiveShards waitForActiveShards = WaitForActiveShards.newBuilder() - .setWaitForActiveShardOptionsValue(1) // WAIT_FOR_ACTIVE_SHARD_OPTIONS_ALL = 1 + .setWaitForActiveShardOptions( + org.opensearch.protobufs.WaitForActiveShardOptions.newBuilder().setWaitForActiveShardOptionsAll(true).build() + ) .build(); ActiveShardCount result = ActiveShardCountProtoUtils.parseProto(waitForActiveShards); @@ -38,7 +40,11 @@ public void testGetActiveShardCountWithWaitForActiveShardsDefault() { // Create a protobuf BulkRequest with wait_for_active_shards = DEFAULT (value 2) WaitForActiveShards waitForActiveShards = WaitForActiveShards.newBuilder() - .setWaitForActiveShardOptionsValue(2) // WAIT_FOR_ACTIVE_SHARD_OPTIONS_DEFAULT = 2 + .setWaitForActiveShardOptions( + org.opensearch.protobufs.WaitForActiveShardOptions.newBuilder() + .setNullValue(org.opensearch.protobufs.NullValue.NULL_VALUE_NULL) + .build() + ) .build(); ActiveShardCount result = ActiveShardCountProtoUtils.parseProto(waitForActiveShards); @@ -50,10 +56,13 @@ public void testGetActiveShardCountWithWaitForActiveShardsDefault() { public void testGetActiveShardCountWithWaitForActiveShardsUnspecified() { // Create a protobuf BulkRequest with wait_for_active_shards = UNSPECIFIED (value 0) WaitForActiveShards waitForActiveShards = WaitForActiveShards.newBuilder() - .setWaitForActiveShardOptionsValue(0) // WAIT_FOR_ACTIVE_SHARD_OPTIONS_UNSPECIFIED = 0 + .setWaitForActiveShardOptions(org.opensearch.protobufs.WaitForActiveShardOptions.newBuilder().build()) .build(); - expectThrows(UnsupportedOperationException.class, () -> ActiveShardCountProtoUtils.parseProto(waitForActiveShards)); + ActiveShardCount result = ActiveShardCountProtoUtils.parseProto(waitForActiveShards); + + // Verify the result - UNSPECIFIED should default to DEFAULT + assertEquals("Should have DEFAULT active shard count", ActiveShardCount.DEFAULT, result); } public void testGetActiveShardCountWithWaitForActiveShardsInt32() { 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 efcb7c6dd56b5..5ab44830ce3cd 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 @@ -18,11 +18,12 @@ import org.opensearch.index.seqno.SequenceNumbers; import org.opensearch.protobufs.BulkRequest; import org.opensearch.protobufs.BulkRequestBody; -import org.opensearch.protobufs.CreateOperation; import org.opensearch.protobufs.DeleteOperation; import org.opensearch.protobufs.IndexOperation; import org.opensearch.protobufs.OpType; +import org.opensearch.protobufs.OperationContainer; import org.opensearch.protobufs.UpdateOperation; +import org.opensearch.protobufs.WriteOperation; import org.opensearch.test.OpenSearchTestCase; import java.nio.charset.StandardCharsets; @@ -32,25 +33,17 @@ public class BulkRequestParserProtoUtilsTests extends OpenSearchTestCase { public void testBuildCreateRequest() { - // Create a CreateOperation - CreateOperation createOperation = CreateOperation.newBuilder() - .setIndex("test-index") - .setId("test-id") + WriteOperation writeOperation = WriteOperation.newBuilder() + .setUnderscoreIndex("test-index") + .setUnderscoreId("test-id") .setRouting("test-routing") - .setVersion(2) - .setVersionTypeValue(1) // VERSION_TYPE_EXTERNAL = 1 - .setPipeline("test-pipeline") - .setIfSeqNo(3) - .setIfPrimaryTerm(4) .setRequireAlias(true) .build(); - // Create document content byte[] document = "{\"field\":\"value\"}".getBytes(StandardCharsets.UTF_8); - // Call buildCreateRequest IndexRequest indexRequest = BulkRequestParserProtoUtils.buildCreateRequest( - createOperation, + writeOperation, document, "default-index", "default-id", @@ -63,38 +56,34 @@ public void testBuildCreateRequest() { false ); - // Verify the result assertNotNull("IndexRequest should not be null", indexRequest); assertEquals("Index should match", "test-index", indexRequest.index()); assertEquals("Id should match", "test-id", indexRequest.id()); assertEquals("Routing should match", "test-routing", indexRequest.routing()); - assertEquals("Version should match", 2L, indexRequest.version()); - assertEquals("VersionType should match", VersionType.EXTERNAL, indexRequest.versionType()); - assertEquals("Pipeline should match", "test-pipeline", indexRequest.getPipeline()); - assertEquals("IfSeqNo should match", 3L, indexRequest.ifSeqNo()); - assertEquals("IfPrimaryTerm should match", 4L, indexRequest.ifPrimaryTerm()); + assertEquals("Version should match", 1L, indexRequest.version()); + assertEquals("VersionType should match", VersionType.INTERNAL, indexRequest.versionType()); + assertEquals("Pipeline should match", "default-pipeline", indexRequest.getPipeline()); + assertEquals("IfSeqNo should match", 1L, indexRequest.ifSeqNo()); + assertEquals("IfPrimaryTerm should match", 2L, indexRequest.ifPrimaryTerm()); assertTrue("RequireAlias should match", indexRequest.isRequireAlias()); assertEquals("Create flag should be true", DocWriteRequest.OpType.CREATE, indexRequest.opType()); } public void testBuildIndexRequest() { - // Create an IndexOperation IndexOperation indexOperation = IndexOperation.newBuilder() - .setIndex("test-index") - .setId("test-id") + .setUnderscoreIndex("test-index") + .setUnderscoreId("test-id") .setRouting("test-routing") .setVersion(2) - .setVersionTypeValue(2) // VERSION_TYPE_EXTERNAL_GTE = 2 + .setVersionType(org.opensearch.protobufs.VersionType.newBuilder().setVersionTypeExternalGte(true).build()) .setPipeline("test-pipeline") .setIfSeqNo(3) .setIfPrimaryTerm(4) .setRequireAlias(true) .build(); - // Create document content byte[] document = "{\"field\":\"value\"}".getBytes(StandardCharsets.UTF_8); - // Call buildIndexRequest IndexRequest indexRequest = BulkRequestParserProtoUtils.buildIndexRequest( indexOperation, document, @@ -110,7 +99,6 @@ public void testBuildIndexRequest() { false ); - // Verify the result assertNotNull("IndexRequest should not be null", indexRequest); assertEquals("Index should match", "test-index", indexRequest.index()); assertEquals("Id should match", "test-id", indexRequest.id()); @@ -125,21 +113,16 @@ public void testBuildIndexRequest() { } public void testBuildIndexRequestWithOpType() { - // Create an IndexOperation with OpType - IndexOperation indexOperation = IndexOperation.newBuilder() - .setIndex("test-index") - .setId("test-id") - .setOpType(OpType.OP_TYPE_CREATE) - .build(); + IndexOperation indexOperation = IndexOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id").build(); - // Create document content byte[] document = "{\"field\":\"value\"}".getBytes(StandardCharsets.UTF_8); - // Call buildIndexRequest + OpType opType = OpType.newBuilder().setOpTypeCreate(true).build(); + IndexRequest indexRequest = BulkRequestParserProtoUtils.buildIndexRequest( indexOperation, document, - OpType.OP_TYPE_CREATE, + opType, "default-index", "default-id", "default-routing", @@ -151,7 +134,6 @@ public void testBuildIndexRequestWithOpType() { false ); - // Verify the result assertNotNull("IndexRequest should not be null", indexRequest); assertEquals("Index should match", "test-index", indexRequest.index()); assertEquals("Id should match", "test-id", indexRequest.id()); @@ -159,18 +141,16 @@ public void testBuildIndexRequestWithOpType() { } public void testBuildDeleteRequest() { - // Create a DeleteOperation DeleteOperation deleteOperation = DeleteOperation.newBuilder() - .setIndex("test-index") - .setId("test-id") + .setUnderscoreIndex("test-index") + .setUnderscoreId("test-id") .setRouting("test-routing") .setVersion(2) - .setVersionTypeValue(1) // VERSION_TYPE_EXTERNAL = 1 + .setVersionType(org.opensearch.protobufs.VersionType.newBuilder().setVersionTypeExternal(true).build()) .setIfSeqNo(3) .setIfPrimaryTerm(4) .build(); - // Call buildDeleteRequest DeleteRequest deleteRequest = BulkRequestParserProtoUtils.buildDeleteRequest( deleteOperation, "default-index", @@ -182,7 +162,6 @@ public void testBuildDeleteRequest() { 2L ); - // Verify the result assertNotNull("DeleteRequest should not be null", deleteRequest); assertEquals("Index should match", "test-index", deleteRequest.index()); assertEquals("Id should match", "test-id", deleteRequest.id()); @@ -194,10 +173,9 @@ public void testBuildDeleteRequest() { } public void testBuildUpdateRequest() { - // Create an UpdateOperation UpdateOperation updateOperation = UpdateOperation.newBuilder() - .setIndex("test-index") - .setId("test-id") + .setUnderscoreIndex("test-index") + .setUnderscoreId("test-id") .setRouting("test-routing") .setRetryOnConflict(3) .setIfSeqNo(4) @@ -205,18 +183,14 @@ public void testBuildUpdateRequest() { .setRequireAlias(true) .build(); - // Create document content byte[] document = "{\"doc\":{\"field\":\"value\"}}".getBytes(StandardCharsets.UTF_8); - // Create BulkRequestBody BulkRequestBody bulkRequestBody = BulkRequestBody.newBuilder() - .setUpdate(updateOperation) - .setDoc(ByteString.copyFrom(document)) - .setDocAsUpsert(true) - .setDetectNoop(true) + .setOperationContainer(OperationContainer.newBuilder().setUpdate(updateOperation).build()) + .setObject(ByteString.copyFrom(document)) + .setUpdateAction(org.opensearch.protobufs.UpdateAction.newBuilder().setDocAsUpsert(true).setDetectNoop(true).build()) .build(); - // Call buildUpdateRequest UpdateRequest updateRequest = BulkRequestParserProtoUtils.buildUpdateRequest( updateOperation, document, @@ -232,7 +206,6 @@ public void testBuildUpdateRequest() { false ); - // Verify the result assertNotNull("UpdateRequest should not be null", updateRequest); assertEquals("Index should match", "test-index", updateRequest.index()); assertEquals("Id should match", "test-id", updateRequest.id()); @@ -246,28 +219,29 @@ public void testBuildUpdateRequest() { } public void testGetDocWriteRequests() { - // Create a BulkRequest with multiple operations - IndexOperation indexOp = IndexOperation.newBuilder().setIndex("test-index").setId("test-id-1").build(); - CreateOperation createOp = CreateOperation.newBuilder().setIndex("test-index").setId("test-id-2").build(); - UpdateOperation updateOp = UpdateOperation.newBuilder().setIndex("test-index").setId("test-id-3").build(); - DeleteOperation deleteOp = DeleteOperation.newBuilder().setIndex("test-index").setId("test-id-4").build(); + IndexOperation indexOp = IndexOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id-1").build(); + WriteOperation writeOp = WriteOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id-2").build(); + UpdateOperation updateOp = UpdateOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id-3").build(); + DeleteOperation deleteOp = DeleteOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id-4").build(); BulkRequestBody indexBody = BulkRequestBody.newBuilder() - .setIndex(indexOp) - .setDoc(ByteString.copyFromUtf8("{\"field\":\"value1\"}")) + .setOperationContainer(OperationContainer.newBuilder().setIndex(indexOp).build()) + .setObject(ByteString.copyFromUtf8("{\"field\":\"value1\"}")) .build(); BulkRequestBody createBody = BulkRequestBody.newBuilder() - .setCreate(createOp) - .setDoc(ByteString.copyFromUtf8("{\"field\":\"value2\"}")) + .setOperationContainer(OperationContainer.newBuilder().setCreate(writeOp).build()) + .setObject(ByteString.copyFromUtf8("{\"field\":\"value2\"}")) .build(); BulkRequestBody updateBody = BulkRequestBody.newBuilder() - .setUpdate(updateOp) - .setDoc(ByteString.copyFromUtf8("{\"field\":\"value3\"}")) + .setOperationContainer(OperationContainer.newBuilder().setUpdate(updateOp).build()) + .setObject(ByteString.copyFromUtf8("{\"field\":\"value3\"}")) .build(); - BulkRequestBody deleteBody = BulkRequestBody.newBuilder().setDelete(deleteOp).build(); + BulkRequestBody deleteBody = BulkRequestBody.newBuilder() + .setOperationContainer(OperationContainer.newBuilder().setDelete(deleteOp).build()) + .build(); BulkRequest request = BulkRequest.newBuilder() .addRequestBody(indexBody) @@ -276,7 +250,6 @@ public void testGetDocWriteRequests() { .addRequestBody(deleteBody) .build(); - // Call getDocWriteRequests DocWriteRequest[] requests = BulkRequestParserProtoUtils.getDocWriteRequests( request, "default-index", @@ -286,7 +259,6 @@ public void testGetDocWriteRequests() { false ); - // Verify the result assertNotNull("Requests should not be null", requests); assertEquals("Should have 4 requests", 4, requests.length); assertTrue("First request should be an IndexRequest", requests[0] instanceof IndexRequest); @@ -297,35 +269,29 @@ public void testGetDocWriteRequests() { assertTrue("Third request should be an UpdateRequest", requests[2] instanceof UpdateRequest); assertTrue("Fourth request should be a DeleteRequest", requests[3] instanceof DeleteRequest); - // Verify the index request IndexRequest indexRequest = (IndexRequest) requests[0]; assertEquals("Index should match", "test-index", indexRequest.index()); assertEquals("Id should match", "test-id-1", indexRequest.id()); - // Verify the create request IndexRequest createRequest = (IndexRequest) requests[1]; assertEquals("Index should match", "test-index", createRequest.index()); assertEquals("Id should match", "test-id-2", createRequest.id()); assertEquals("Create flag should be true", DocWriteRequest.OpType.CREATE, createRequest.opType()); - // Verify the update request UpdateRequest updateRequest = (UpdateRequest) requests[2]; assertEquals("Index should match", "test-index", updateRequest.index()); assertEquals("Id should match", "test-id-3", updateRequest.id()); - // Verify the delete request DeleteRequest deleteRequest = (DeleteRequest) requests[3]; assertEquals("Index should match", "test-index", deleteRequest.index()); assertEquals("Id should match", "test-id-4", deleteRequest.id()); } public void testGetDocWriteRequestsWithInvalidOperation() { - // Create a BulkRequest with an invalid operation (no operation container) BulkRequestBody invalidBody = BulkRequestBody.newBuilder().build(); BulkRequest request = BulkRequest.newBuilder().addRequestBody(invalidBody).build(); - // Call getDocWriteRequests, should throw IllegalArgumentException expectThrows( IllegalArgumentException.class, () -> BulkRequestParserProtoUtils.getDocWriteRequests( diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestProtoUtilsTests.java index b580ab8c79fe6..5abb674fb16e2 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/document/bulk/BulkRequestProtoUtilsTests.java @@ -24,7 +24,7 @@ public void testPrepareRequestWithBasicSettings() { BulkRequest request = BulkRequest.newBuilder() .setIndex("test-index") .setRouting("test-routing") - .setRefresh(Refresh.REFRESH_TRUE) + .setRefresh(Refresh.newBuilder().setRefreshTrue(true).build()) .setTimeout("30s") .build(); @@ -105,7 +105,7 @@ public void testPrepareRequestWithPipeline() { public void testPrepareRequestWithRefreshWait() { // Create a protobuf BulkRequest with refresh set to WAIT_FOR - BulkRequest request = BulkRequest.newBuilder().setRefresh(Refresh.REFRESH_WAIT_FOR).build(); + BulkRequest request = BulkRequest.newBuilder().setRefresh(Refresh.newBuilder().setRefreshWaitFor(true).build()).build(); // Call prepareRequest org.opensearch.action.bulk.BulkRequest bulkRequest = BulkRequestProtoUtils.prepareRequest(request); @@ -117,7 +117,7 @@ public void testPrepareRequestWithRefreshWait() { public void testPrepareRequestWithRefreshFalse() { // Create a protobuf BulkRequest with refresh set to FALSE - BulkRequest request = BulkRequest.newBuilder().setRefresh(Refresh.REFRESH_FALSE).build(); + BulkRequest request = BulkRequest.newBuilder().setRefresh(Refresh.newBuilder().setRefreshFalse(true).build()).build(); // Call prepareRequest org.opensearch.action.bulk.BulkRequest bulkRequest = BulkRequestProtoUtils.prepareRequest(request); diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtilsTests.java index 6708ab2b3817c..e55f5f18ff438 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/InnerHitsBuilderProtoUtilsTests.java @@ -14,7 +14,6 @@ import org.opensearch.protobufs.InnerHits; import org.opensearch.protobufs.ScriptField; import org.opensearch.protobufs.ScriptLanguage; -import org.opensearch.protobufs.ScriptLanguage.BuiltinScriptLanguage; import org.opensearch.protobufs.SourceConfig; import org.opensearch.protobufs.SourceFilter; import org.opensearch.search.builder.SearchSourceBuilder; @@ -148,18 +147,26 @@ public void testFromProtoWithScriptFields() throws IOException { // Create script field 1 InlineScript inlineScript1 = InlineScript.newBuilder() .setSource("doc['field1'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS).build()) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + .build() + ) .build(); - org.opensearch.protobufs.Script script1 = org.opensearch.protobufs.Script.newBuilder().setInlineScript(inlineScript1).build(); + org.opensearch.protobufs.Script script1 = org.opensearch.protobufs.Script.newBuilder().setInline(inlineScript1).build(); ScriptField scriptField1 = ScriptField.newBuilder().setScript(script1).setIgnoreFailure(true).build(); innerHitsBuilder.putScriptFields("script_field1", scriptField1); // Create script field 2 InlineScript inlineScript2 = InlineScript.newBuilder() .setSource("doc['field2'].value + '_suffix'") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS).build()) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + .build() + ) .build(); - org.opensearch.protobufs.Script script2 = org.opensearch.protobufs.Script.newBuilder().setInlineScript(inlineScript2).build(); + org.opensearch.protobufs.Script script2 = org.opensearch.protobufs.Script.newBuilder().setInline(inlineScript2).build(); ScriptField scriptField2 = ScriptField.newBuilder().setScript(script2).build(); innerHitsBuilder.putScriptFields("script_field2", scriptField2); @@ -196,7 +203,7 @@ public void testFromProtoWithSource() throws IOException { .setFilter(SourceFilter.newBuilder().addIncludes("include1").addIncludes("include2").addExcludes("exclude1").build()) .build(); - InnerHits innerHits = InnerHits.newBuilder().setName("test_inner_hits").setSource(sourceContext).build(); + InnerHits innerHits = InnerHits.newBuilder().setName("test_inner_hits").setUnderscoreSource(sourceContext).build(); // Call the method under test InnerHitBuilder innerHitBuilder = InnerHitsBuilderProtoUtils.fromProto(Collections.singletonList(innerHits)); diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/ScriptFieldProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/ScriptFieldProtoUtilsTests.java index 2c8bfe6ab1f7f..1cd7cc2902ce2 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/ScriptFieldProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/ScriptFieldProtoUtilsTests.java @@ -12,7 +12,6 @@ import org.opensearch.protobufs.ObjectMap; import org.opensearch.protobufs.ScriptField; import org.opensearch.protobufs.ScriptLanguage; -import org.opensearch.protobufs.ScriptLanguage.BuiltinScriptLanguage; import org.opensearch.protobufs.StoredScriptId; import org.opensearch.script.Script; import org.opensearch.script.ScriptType; @@ -30,10 +29,14 @@ public void testFromProtoWithInlineScript() throws IOException { // Create a protobuf ScriptField with inline script InlineScript inlineScript = InlineScript.newBuilder() .setSource("doc['field'].value * 2") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS).build()) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + .build() + ) .build(); - org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInlineScript(inlineScript).build(); + org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInline(inlineScript).build(); ScriptField scriptField = ScriptField.newBuilder().setScript(script).setIgnoreFailure(true).build(); @@ -60,7 +63,7 @@ public void testFromProtoWithStoredScript() throws IOException { // Create a protobuf ScriptField with stored script StoredScriptId storedScriptId = StoredScriptId.newBuilder().setId("my_stored_script").build(); - org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setStoredScriptId(storedScriptId).build(); + org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setStored(storedScriptId).build(); ScriptField scriptField = ScriptField.newBuilder().setScript(script).build(); @@ -97,11 +100,11 @@ public void testFromProtoWithScriptParams() throws IOException { // Create a protobuf ScriptField with inline script and parameters InlineScript inlineScript = InlineScript.newBuilder() .setSource("doc[params.field].value * params.factor") - .setLang(ScriptLanguage.newBuilder().setStringValue("painless").build()) + .setLang(ScriptLanguage.newBuilder().setCustom("painless").build()) .setParams(objectMapBuilder.build()) .build(); - org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInlineScript(inlineScript).build(); + org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInline(inlineScript).build(); ScriptField scriptField = ScriptField.newBuilder().setScript(script).build(); @@ -131,10 +134,10 @@ public void testFromProtoWithCustomLanguage() throws IOException { // Create a protobuf ScriptField with custom language InlineScript inlineScript = InlineScript.newBuilder() .setSource("custom script code") - .setLang(ScriptLanguage.newBuilder().setStringValue("mylang").build()) + .setLang(ScriptLanguage.newBuilder().setCustom("mylang").build()) .build(); - org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInlineScript(inlineScript).build(); + org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInline(inlineScript).build(); ScriptField scriptField = ScriptField.newBuilder().setScript(script).build(); @@ -160,11 +163,15 @@ public void testFromProtoWithScriptOptions() throws IOException { // Create a protobuf ScriptField with inline script and options InlineScript inlineScript = InlineScript.newBuilder() .setSource("doc['field'].value") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS).build()) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + .build() + ) .putAllOptions(optionsMap) .build(); - org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInlineScript(inlineScript).build(); + org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInline(inlineScript).build(); ScriptField scriptField = ScriptField.newBuilder().setScript(script).build(); @@ -191,11 +198,15 @@ public void testFromProtoWithInvalidScriptOptions() throws IOException { // Create a protobuf ScriptField with inline script and invalid options InlineScript inlineScript = InlineScript.newBuilder() .setSource("doc['field'].value") - .setLang(ScriptLanguage.newBuilder().setBuiltinScriptLanguage(BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS).build()) + .setLang( + ScriptLanguage.newBuilder() + .setBuiltin(org.opensearch.protobufs.BuiltinScriptLanguage.BUILTIN_SCRIPT_LANGUAGE_PAINLESS) + .build() + ) .putAllOptions(optionsMap) .build(); - org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInlineScript(inlineScript).build(); + org.opensearch.protobufs.Script script = org.opensearch.protobufs.Script.newBuilder().setInline(inlineScript).build(); ScriptField scriptField = ScriptField.newBuilder().setScript(script).build(); 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 ddbfd4908a6ff..7dc5893971b5d 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 @@ -414,18 +414,14 @@ public void testParseProtoWithScriptFields() throws IOException { scriptFieldsMap.put( "script_field_1", ScriptField.newBuilder() - .setScript( - Script.newBuilder().setInlineScript(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build() - ) + .setScript(Script.newBuilder().setInline(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) .setIgnoreFailure(true) .build() ); scriptFieldsMap.put( "script_field_2", ScriptField.newBuilder() - .setScript( - Script.newBuilder().setInlineScript(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build() - ) + .setScript(Script.newBuilder().setInline(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) .build() ); @@ -482,18 +478,14 @@ public void testParseProtoWithDerivedFields() throws IOException { "derived_field_1", DerivedField.newBuilder() .setType("number") - .setScript( - Script.newBuilder().setInlineScript(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build() - ) + .setScript(Script.newBuilder().setInline(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) .build() ); derivedFieldsMap.put( "derived_field_2", DerivedField.newBuilder() .setType("string") - .setScript( - Script.newBuilder().setInlineScript(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build() - ) + .setScript(Script.newBuilder().setInline(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) .build() ); @@ -571,7 +563,7 @@ public void testParseProtoWithExtThrowsUnsupportedOperationException() throws IO public void testScriptFieldProtoUtilsFromProto() throws IOException { // Create a protobuf ScriptField ScriptField scriptFieldProto = ScriptField.newBuilder() - .setScript(Script.newBuilder().setInlineScript(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) + .setScript(Script.newBuilder().setInline(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) .setIgnoreFailure(true) .build(); @@ -592,7 +584,7 @@ public void testScriptFieldProtoUtilsFromProto() throws IOException { public void testScriptFieldProtoUtilsFromProtoWithDefaultIgnoreFailure() throws IOException { // Create a protobuf ScriptField without ignoreFailure ScriptField scriptFieldProto = ScriptField.newBuilder() - .setScript(Script.newBuilder().setInlineScript(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) + .setScript(Script.newBuilder().setInline(InlineScript.newBuilder().setSource("doc['field'].value * 2").build()).build()) .build(); // Call the method under test diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/BulkResponseProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/BulkResponseProtoUtilsTests.java index 2b904fe11617e..9163f3e657c8c 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/BulkResponseProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/BulkResponseProtoUtilsTests.java @@ -45,10 +45,9 @@ public void testToProtoWithSuccessfulResponse() throws IOException { assertEquals("Should have 1 item", 1, protoResponse.getBulkResponseBody().getItemsCount()); // Verify the item response - org.opensearch.protobufs.Item item = protoResponse.getBulkResponseBody().getItems(0); - org.opensearch.protobufs.ResponseItem responseItem = item.getIndex(); - assertEquals("Should have the correct index", "test-index", responseItem.getIndex()); - assertEquals("Should have the correct id", "test-id", responseItem.getId().getString()); + org.opensearch.protobufs.ResponseItem responseItem = protoResponse.getBulkResponseBody().getItems(0); + assertEquals("Should have the correct index", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Should have the correct id", "test-id", responseItem.getUnderscoreId().getString()); assertEquals("Should have the correct status", Status.OK.getCode().value(), responseItem.getStatus()); } @@ -73,10 +72,9 @@ public void testToProtoWithFailedResponse() throws IOException { assertEquals("Should have 1 item", 1, protoResponse.getBulkResponseBody().getItemsCount()); // Verify the item response - org.opensearch.protobufs.Item item = protoResponse.getBulkResponseBody().getItems(0); - org.opensearch.protobufs.ResponseItem responseItem = item.getIndex(); - assertEquals("Should have the correct index", "test-index", responseItem.getIndex()); - assertEquals("Should have the correct id", "test-id", responseItem.getId().getString()); + org.opensearch.protobufs.ResponseItem responseItem = protoResponse.getBulkResponseBody().getItems(0); + assertEquals("Should have the correct index", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Should have the correct id", "test-id", responseItem.getUnderscoreId().getString()); assertTrue("Should have error", responseItem.getError().getReason().length() > 0); } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtilsTests.java index f389e8f05b650..eadba2613bf30 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/bulk/BulkItemResponseProtoUtilsTests.java @@ -20,7 +20,6 @@ import org.opensearch.core.index.shard.ShardId; import org.opensearch.core.rest.RestStatus; import org.opensearch.index.get.GetResult; -import org.opensearch.protobufs.Item; import org.opensearch.test.OpenSearchTestCase; import java.io.IOException; @@ -47,16 +46,15 @@ public void testToProtoWithIndexResponse() throws IOException { // Create a BulkItemResponse with the IndexResponse BulkItemResponse bulkItemResponse = new BulkItemResponse(0, DocWriteRequest.OpType.INDEX, indexResponse); - // Convert to protobuf Item - Item item = BulkItemResponseProtoUtils.toProto(bulkItemResponse); + // Convert to protobuf ResponseItem + org.opensearch.protobufs.ResponseItem responseItem = BulkItemResponseProtoUtils.toProto(bulkItemResponse); // Verify the result - assertNotNull("Item should not be null", item); - assertTrue("Item should have index field set", item.hasIndex()); - assertEquals("Index should match", "test-index", item.getIndex().getIndex()); - assertEquals("Id should match", "test-id", item.getIndex().getId().getString()); - assertEquals("Version should match", indexResponse.getVersion(), item.getIndex().getVersion()); - assertEquals("Result should match", DocWriteResponse.Result.CREATED.getLowercase(), item.getIndex().getResult()); + assertNotNull("ResponseItem should not be null", responseItem); + assertEquals("Index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertEquals("Version should match", indexResponse.getVersion(), responseItem.getUnderscoreVersion()); + assertEquals("Result should match", DocWriteResponse.Result.CREATED.getLowercase(), responseItem.getResult()); } public void testToProtoWithCreateResponse() throws IOException { @@ -73,16 +71,15 @@ public void testToProtoWithCreateResponse() throws IOException { // Create a BulkItemResponse with the IndexResponse and CREATE op type BulkItemResponse bulkItemResponse = new BulkItemResponse(0, DocWriteRequest.OpType.CREATE, indexResponse); - // Convert to protobuf Item - Item item = BulkItemResponseProtoUtils.toProto(bulkItemResponse); + // Convert to protobuf ResponseItem + org.opensearch.protobufs.ResponseItem responseItem = BulkItemResponseProtoUtils.toProto(bulkItemResponse); // Verify the result - assertNotNull("Item should not be null", item); - assertTrue("Item should have create field set", item.hasCreate()); - assertEquals("Index should match", "test-index", item.getCreate().getIndex()); - assertEquals("Id should match", "test-id", item.getCreate().getId().getString()); - assertEquals("Version should match", indexResponse.getVersion(), item.getCreate().getVersion()); - assertEquals("Result should match", DocWriteResponse.Result.CREATED.getLowercase(), item.getCreate().getResult()); + assertNotNull("ResponseItem should not be null", responseItem); + assertEquals("Index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertEquals("Version should match", indexResponse.getVersion(), responseItem.getUnderscoreVersion()); + assertEquals("Result should match", DocWriteResponse.Result.CREATED.getLowercase(), responseItem.getResult()); } public void testToProtoWithDeleteResponse() throws IOException { @@ -99,16 +96,15 @@ public void testToProtoWithDeleteResponse() throws IOException { // Create a BulkItemResponse with the DeleteResponse BulkItemResponse bulkItemResponse = new BulkItemResponse(0, DocWriteRequest.OpType.DELETE, deleteResponse); - // Convert to protobuf Item - Item item = BulkItemResponseProtoUtils.toProto(bulkItemResponse); + // Convert to protobuf ResponseItem + org.opensearch.protobufs.ResponseItem responseItem = BulkItemResponseProtoUtils.toProto(bulkItemResponse); // Verify the result - assertNotNull("Item should not be null", item); - assertTrue("Item should have delete field set", item.hasDelete()); - assertEquals("Index should match", "test-index", item.getDelete().getIndex()); - assertEquals("Id should match", "test-id", item.getDelete().getId().getString()); - assertEquals("Version should match", deleteResponse.getVersion(), item.getDelete().getVersion()); - assertEquals("Result should match", DocWriteResponse.Result.DELETED.getLowercase(), item.getDelete().getResult()); + assertNotNull("ResponseItem should not be null", responseItem); + assertEquals("Index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertEquals("Version should match", deleteResponse.getVersion(), responseItem.getUnderscoreVersion()); + assertEquals("Result should match", DocWriteResponse.Result.DELETED.getLowercase(), responseItem.getResult()); } public void testToProtoWithUpdateResponse() throws IOException { @@ -126,15 +122,14 @@ public void testToProtoWithUpdateResponse() throws IOException { BulkItemResponse bulkItemResponse = new BulkItemResponse(0, DocWriteRequest.OpType.UPDATE, updateResponse); // Convert to protobuf Item - Item item = BulkItemResponseProtoUtils.toProto(bulkItemResponse); + org.opensearch.protobufs.ResponseItem responseItem = BulkItemResponseProtoUtils.toProto(bulkItemResponse); // Verify the result - assertNotNull("Item should not be null", item); - assertTrue("Item should have update field set", item.hasUpdate()); - assertEquals("Index should match", "test-index", item.getUpdate().getIndex()); - assertEquals("Id should match", "test-id", item.getUpdate().getId().getString()); - assertEquals("Version should match", updateResponse.getVersion(), item.getUpdate().getVersion()); - assertEquals("Result should match", DocWriteResponse.Result.UPDATED.getLowercase(), item.getUpdate().getResult()); + assertNotNull("ResponseItem should not be null", responseItem); + assertEquals("Index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertEquals("Version should match", updateResponse.getVersion(), responseItem.getUnderscoreVersion()); + assertEquals("Result should match", DocWriteResponse.Result.UPDATED.getLowercase(), responseItem.getResult()); } public void testToProtoWithUpdateResponseAndGetResult() throws IOException { @@ -170,21 +165,20 @@ public void testToProtoWithUpdateResponseAndGetResult() throws IOException { BulkItemResponse bulkItemResponse = new BulkItemResponse(0, DocWriteRequest.OpType.UPDATE, updateResponse); // Convert to protobuf Item - Item item = BulkItemResponseProtoUtils.toProto(bulkItemResponse); + org.opensearch.protobufs.ResponseItem responseItem = BulkItemResponseProtoUtils.toProto(bulkItemResponse); // Verify the result - assertNotNull("Item should not be null", item); - assertTrue("Item should have update field set", item.hasUpdate()); - assertEquals("Index should match", "test-index", item.getUpdate().getIndex()); - assertEquals("Id should match", "test-id", item.getUpdate().getId().getString()); - assertEquals("Version should match", 1, item.getUpdate().getVersion()); - assertEquals("Result should match", DocWriteResponse.Result.UPDATED.getLowercase(), item.getUpdate().getResult()); + assertNotNull("ResponseItem should not be null", responseItem); + assertEquals("Index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertEquals("Version should match", 1, responseItem.getUnderscoreVersion()); + assertEquals("Result should match", DocWriteResponse.Result.UPDATED.getLowercase(), responseItem.getResult()); // Verify GetResult fields - assertTrue("Get field should be set", item.getUpdate().hasGet()); - assertEquals("Get index should match", "test-index", item.getUpdate().getIndex()); - assertEquals("Get id should match", "test-id", item.getUpdate().getId().getString()); - assertTrue("Get found should be true", item.getUpdate().getGet().getFound()); + assertTrue("Get field should be set", responseItem.hasGet()); + assertEquals("Get index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Get id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertTrue("Get found should be true", responseItem.getGet().getFound()); } public void testToProtoWithFailure() throws IOException { @@ -201,18 +195,17 @@ public void testToProtoWithFailure() throws IOException { BulkItemResponse bulkItemResponse = new BulkItemResponse(0, DocWriteRequest.OpType.INDEX, failure); // Convert to protobuf Item - Item item = BulkItemResponseProtoUtils.toProto(bulkItemResponse); + org.opensearch.protobufs.ResponseItem responseItem = BulkItemResponseProtoUtils.toProto(bulkItemResponse); // Verify the result - assertNotNull("Item should not be null", item); - assertTrue("Item should have index field set", item.hasIndex()); - assertEquals("Index should match", "test-index", item.getIndex().getIndex()); - assertEquals("Id should match", "test-id", item.getIndex().getId().getString()); - assertEquals("Status should match", Status.INTERNAL.getCode().value(), item.getIndex().getStatus()); + assertNotNull("ResponseItem should not be null", responseItem); + assertEquals("Index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertEquals("Status should match", Status.INTERNAL.getCode().value(), responseItem.getStatus()); // Verify error - assertTrue("Error should be set", item.getIndex().hasError()); - assertTrue("Error reason should contain exception message", item.getIndex().getError().getReason().contains("Test IO exception")); + assertTrue("Error should be set", responseItem.hasError()); + assertTrue("Error reason should contain exception message", responseItem.getError().getReason().contains("Test IO exception")); } public void testToProtoWithNullResponse() throws IOException { diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtilsTests.java index cb264d05eac35..cf4740fb90921 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/DocWriteResponseProtoUtilsTests.java @@ -41,21 +41,25 @@ public void testToProtoWithIndexResponse() throws IOException { ResponseItem responseItem = responseItemBuilder.build(); // Verify basic fields - assertEquals("Index should match", "test-index", responseItem.getIndex()); - assertEquals("Id should match", "test-id", responseItem.getId().getString()); - assertEquals("Version should match", indexResponse.getVersion(), responseItem.getVersion()); + assertEquals("Index should match", "test-index", responseItem.getUnderscoreIndex()); + assertEquals("Id should match", "test-id", responseItem.getUnderscoreId().getString()); + assertEquals("Version should match", indexResponse.getVersion(), responseItem.getUnderscoreVersion()); assertEquals("Result should match", DocWriteResponse.Result.CREATED.getLowercase(), responseItem.getResult()); assertTrue("ForcedRefresh should be true", responseItem.getForcedRefresh()); // Verify sequence number and primary term - assertEquals("SeqNo should match", indexResponse.getSeqNo(), responseItem.getSeqNo()); - assertEquals("PrimaryTerm should match", indexResponse.getPrimaryTerm(), responseItem.getPrimaryTerm()); + assertEquals("SeqNo should match", indexResponse.getSeqNo(), responseItem.getUnderscoreSeqNo()); + assertEquals("PrimaryTerm should match", indexResponse.getPrimaryTerm(), responseItem.getUnderscorePrimaryTerm()); // Verify ShardInfo - assertNotNull("ShardInfo should not be null", responseItem.getShards()); - assertEquals("Total shards should match", 5, responseItem.getShards().getTotal()); - assertEquals("Successful shards should match", 3, responseItem.getShards().getSuccessful()); - assertEquals("Failed shards should match", indexResponse.getShardInfo().getFailed(), responseItem.getShards().getFailed()); + assertNotNull("ShardInfo should not be null", responseItem.getUnderscoreShards()); + assertEquals("Total shards should match", 5, responseItem.getUnderscoreShards().getTotal()); + assertEquals("Successful shards should match", 3, responseItem.getUnderscoreShards().getSuccessful()); + assertEquals( + "Failed shards should match", + indexResponse.getShardInfo().getFailed(), + responseItem.getUnderscoreShards().getFailed() + ); } public void testToProtoWithEmptyId() throws IOException { @@ -79,7 +83,7 @@ public void testToProtoWithEmptyId() throws IOException { ResponseItem responseItem = responseItemBuilder.build(); // Verify ID is set to null value - assertTrue("Id should be null value", responseItem.getId().hasNullValue()); + assertTrue("Id should be null value", responseItem.getUnderscoreId().hasNullValue()); } public void testToProtoWithNoSeqNo() throws IOException { @@ -103,8 +107,8 @@ public void testToProtoWithNoSeqNo() throws IOException { ResponseItem responseItem = responseItemBuilder.build(); // Verify sequence number and primary term are not set - assertFalse("SeqNo should not be set", responseItem.hasSeqNo()); - assertFalse("PrimaryTerm should not be set", responseItem.hasPrimaryTerm()); + assertFalse("SeqNo should not be set", responseItem.hasUnderscoreSeqNo()); + assertFalse("PrimaryTerm should not be set", responseItem.hasUnderscorePrimaryTerm()); } public void testToProtoWithNullResponse() throws IOException { diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtilsTests.java index 02a97ef191ef3..5b79a2d3196be 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/common/VersionTypeProtoUtilsTests.java @@ -14,35 +14,30 @@ public class VersionTypeProtoUtilsTests extends OpenSearchTestCase { public void testFromProtoWithVersionTypeExternal() { - // Test conversion from VersionType.VERSION_TYPE_EXTERNAL to VersionType.EXTERNAL - VersionType result = VersionTypeProtoUtils.fromProto(org.opensearch.protobufs.VersionType.VERSION_TYPE_EXTERNAL); + VersionType result = VersionTypeProtoUtils.fromProto( + org.opensearch.protobufs.VersionType.newBuilder().setVersionTypeExternal(true).build() + ); - // Verify the result assertEquals("VERSION_TYPE_EXTERNAL should convert to VersionType.EXTERNAL", VersionType.EXTERNAL, result); } public void testFromProtoWithVersionTypeExternalGte() { - // Test conversion from VersionType.VERSION_TYPE_EXTERNAL_GTE to VersionType.EXTERNAL_GTE - VersionType result = VersionTypeProtoUtils.fromProto(org.opensearch.protobufs.VersionType.VERSION_TYPE_EXTERNAL_GTE); + VersionType result = VersionTypeProtoUtils.fromProto( + org.opensearch.protobufs.VersionType.newBuilder().setVersionTypeExternalGte(true).build() + ); - // Verify the result assertEquals("VERSION_TYPE_EXTERNAL_GTE should convert to VersionType.EXTERNAL_GTE", VersionType.EXTERNAL_GTE, result); } public void testFromProtoWithDefaultCase() { - // Test conversion with a default case (should return INTERNAL) - // Using UNSPECIFIED which will hit the default case - VersionType result = VersionTypeProtoUtils.fromProto(org.opensearch.protobufs.VersionType.VERSION_TYPE_UNSPECIFIED); + VersionType result = VersionTypeProtoUtils.fromProto(org.opensearch.protobufs.VersionType.newBuilder().build()); - // Verify the result assertEquals("Default case should convert to VersionType.INTERNAL", VersionType.INTERNAL, result); } public void testFromProtoWithUnrecognizedVersionType() { - // Test conversion with an unrecognized VersionType - VersionType result = VersionTypeProtoUtils.fromProto(org.opensearch.protobufs.VersionType.UNRECOGNIZED); + VersionType result = VersionTypeProtoUtils.fromProto(org.opensearch.protobufs.VersionType.newBuilder().build()); - // Verify the result (should default to INTERNAL) assertEquals("UNRECOGNIZED should default to VersionType.INTERNAL", VersionType.INTERNAL, result); } } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtilsTests.java index 89d07a277d5c5..1abe0b994c748 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/document/get/GetResultProtoUtilsTests.java @@ -50,15 +50,15 @@ public void testToProtoWithExistingDocument() throws IOException { ResponseItem.Builder result = GetResultProtoUtils.toProto(getResult, responseItemBuilder); // Verify the conversion - assertEquals("Should have the correct index", index, result.getIndex()); - assertEquals("Should have the correct id", id, result.getId().getString()); - assertEquals("Should have the correct version", version, result.getVersion()); + assertEquals("Should have the correct index", index, result.getUnderscoreIndex()); + assertEquals("Should have the correct id", id, result.getUnderscoreId().getString()); + assertEquals("Should have the correct version", version, result.getUnderscoreVersion()); InlineGetDictUserDefined get = result.getGet(); assertTrue("Should be found", get.getFound()); assertEquals("Should have the correct sequence number", seqNo, get.getSeqNo()); - assertEquals("Should have the correct primary term", primaryTerm, get.getPrimaryTerm()); - assertEquals("Should have the correct source", ByteString.copyFrom(sourceBytes), get.getSource()); + assertEquals("Should have the correct primary term", primaryTerm, get.getUnderscorePrimaryTerm()); + assertEquals("Should have the correct source", ByteString.copyFrom(sourceBytes), get.getUnderscoreSource()); } public void testToProtoWithNonExistingDocument() throws IOException { @@ -83,8 +83,8 @@ public void testToProtoWithNonExistingDocument() throws IOException { ResponseItem.Builder result = GetResultProtoUtils.toProto(getResult, responseItemBuilder); // Verify the conversion - assertEquals("Should have the correct index", index, result.getIndex()); - assertEquals("Should have the correct id", id, result.getId().getString()); + assertEquals("Should have the correct index", index, result.getUnderscoreIndex()); + assertEquals("Should have the correct id", id, result.getUnderscoreId().getString()); assertFalse("Should not be found", result.getGet().getFound()); } @@ -106,8 +106,8 @@ public void testToProtoEmbeddedWithSequenceNumber() throws IOException { // Verify the conversion assertTrue("Should be found", builder.getFound()); assertEquals("Should have the correct sequence number", seqNo, builder.getSeqNo()); - assertEquals("Should have the correct primary term", primaryTerm, builder.getPrimaryTerm()); - assertEquals("Should have the correct source", ByteString.copyFrom(sourceBytes), builder.getSource()); + assertEquals("Should have the correct primary term", primaryTerm, builder.getUnderscorePrimaryTerm()); + assertEquals("Should have the correct source", ByteString.copyFrom(sourceBytes), builder.getUnderscoreSource()); } public void testToProtoEmbeddedWithoutSequenceNumber() throws IOException { @@ -135,11 +135,11 @@ public void testToProtoEmbeddedWithoutSequenceNumber() throws IOException { // Verify the conversion assertTrue("Should be found", builder.getFound()); - assertEquals("Should have the correct source", ByteString.copyFrom(source.toBytesRef().bytes), builder.getSource()); + assertEquals("Should have the correct source", ByteString.copyFrom(source.toBytesRef().bytes), builder.getUnderscoreSource()); // Sequence number and primary term should not be set assertFalse("Should not have sequence number", builder.hasSeqNo()); - assertFalse("Should not have primary term", builder.hasPrimaryTerm()); + assertFalse("Should not have primary term", builder.hasUnderscorePrimaryTerm()); } public void testToProtoEmbeddedWithoutSource() throws IOException { @@ -167,6 +167,6 @@ public void testToProtoEmbeddedWithoutSource() throws IOException { assertTrue("Should be found", builder.getFound()); // Source should not be set - assertFalse("Should not have source", builder.hasSource()); + assertFalse("Should not have source", builder.hasUnderscoreSource()); } } 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 20bc58c94ec0c..67d9ca7f5c646 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 @@ -8,16 +8,17 @@ package org.opensearch.transport.grpc.services; -import com.google.protobuf.ByteString; import org.opensearch.action.DocWriteRequest; import org.opensearch.action.index.IndexRequest; import org.opensearch.action.support.WriteRequest; import org.opensearch.protobufs.BulkRequest; import org.opensearch.protobufs.BulkRequestBody; -import org.opensearch.protobufs.CreateOperation; import org.opensearch.protobufs.DeleteOperation; import org.opensearch.protobufs.IndexOperation; +import org.opensearch.protobufs.OperationContainer; +import org.opensearch.protobufs.Refresh; import org.opensearch.protobufs.UpdateOperation; +import org.opensearch.protobufs.WriteOperation; import org.opensearch.test.OpenSearchTestCase; import org.opensearch.transport.client.node.NodeClient; import org.opensearch.transport.grpc.proto.request.document.bulk.BulkRequestProtoUtils; @@ -47,8 +48,8 @@ public void testPrepareRequestWithIndexOperation() throws IOException { // Verify the converted request assertEquals("Should have 1 request", 1, bulkRequest.numberOfActions()); - // The actual refresh policy is NONE, not IMMEDIATE - assertEquals("Should have the correct refresh policy", WriteRequest.RefreshPolicy.NONE, bulkRequest.getRefreshPolicy()); + // The actual refresh policy is IMMEDIATE since we set REFRESH_TRUE + assertEquals("Should have the correct refresh policy", WriteRequest.RefreshPolicy.IMMEDIATE, bulkRequest.getRefreshPolicy()); // Verify the index request DocWriteRequest docWriteRequest = bulkRequest.requests().get(0); @@ -111,45 +112,40 @@ public void testPrepareRequestWithUpdateOperation() throws IOException { // Helper methods to create test requests private BulkRequest createBulkRequestWithIndexOperation() { - IndexOperation indexOp = IndexOperation.newBuilder().setIndex("test-index").setId("test-id").build(); - + IndexOperation indexOp = IndexOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id").build(); BulkRequestBody requestBody = BulkRequestBody.newBuilder() - .setIndex(indexOp) - .setDoc(ByteString.copyFromUtf8("{\"field\":\"value\"}")) + .setOperationContainer(OperationContainer.newBuilder().setIndex(indexOp).build()) .build(); return BulkRequest.newBuilder() - .setPipeline("test-pipeline") - .setRefreshValue(1) // REFRESH_TRUE = 1 .addRequestBody(requestBody) + .setRefresh(Refresh.newBuilder().setRefreshTrue(true).build()) + .setPipeline("test-pipeline") .build(); } private BulkRequest createBulkRequestWithCreateOperation() { - CreateOperation createOp = CreateOperation.newBuilder().setIndex("test-index").setId("test-id").build(); - + WriteOperation writeOp = WriteOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id").build(); BulkRequestBody requestBody = BulkRequestBody.newBuilder() - .setCreate(createOp) - .setDoc(ByteString.copyFromUtf8("{\"field\":\"value\"}")) + .setOperationContainer(OperationContainer.newBuilder().setCreate(writeOp).build()) .build(); return BulkRequest.newBuilder().addRequestBody(requestBody).build(); } private BulkRequest createBulkRequestWithDeleteOperation() { - DeleteOperation deleteOp = DeleteOperation.newBuilder().setIndex("test-index").setId("test-id").build(); - - BulkRequestBody requestBody = BulkRequestBody.newBuilder().setDelete(deleteOp).build(); + DeleteOperation deleteOp = DeleteOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id").build(); + BulkRequestBody requestBody = BulkRequestBody.newBuilder() + .setOperationContainer(OperationContainer.newBuilder().setDelete(deleteOp).build()) + .build(); return BulkRequest.newBuilder().addRequestBody(requestBody).build(); } private BulkRequest createBulkRequestWithUpdateOperation() { - UpdateOperation updateOp = UpdateOperation.newBuilder().setIndex("test-index").setId("test-id").build(); - + UpdateOperation updateOp = UpdateOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id").build(); BulkRequestBody requestBody = BulkRequestBody.newBuilder() - .setUpdate(updateOp) - .setDoc(ByteString.copyFromUtf8("{\"field\":\"updated-value\"}")) + .setOperationContainer(OperationContainer.newBuilder().setUpdate(updateOp).build()) .build(); return BulkRequest.newBuilder().addRequestBody(requestBody).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 1dd52e4e434cb..adfb02d93a34a 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 @@ -69,11 +69,11 @@ public void testBulkError() throws IOException { } private BulkRequest createTestBulkRequest() { - IndexOperation indexOp = IndexOperation.newBuilder().setIndex("test-index").setId("test-id").build(); + IndexOperation indexOp = IndexOperation.newBuilder().setUnderscoreIndex("test-index").setUnderscoreId("test-id").build(); BulkRequestBody requestBody = BulkRequestBody.newBuilder() - .setIndex(indexOp) - .setDoc(ByteString.copyFromUtf8("{\"field\":\"value\"}")) + .setOperationContainer(org.opensearch.protobufs.OperationContainer.newBuilder().setIndex(indexOp).build()) + .setObject(ByteString.copyFromUtf8("{\"field\":\"value\"}")) .build(); return BulkRequest.newBuilder().addRequestBody(requestBody).build();