diff --git a/server/src/main/java/org/opensearch/action/bulk/BulkRequest.java b/server/src/main/java/org/opensearch/action/bulk/BulkRequest.java index 84d1bee38fb47..7454c43946db7 100644 --- a/server/src/main/java/org/opensearch/action/bulk/BulkRequest.java +++ b/server/src/main/java/org/opensearch/action/bulk/BulkRequest.java @@ -54,16 +54,12 @@ import org.opensearch.core.common.io.stream.StreamInput; import org.opensearch.core.common.io.stream.StreamOutput; import org.opensearch.core.xcontent.MediaType; +import org.opensearch.script.Script; import org.opensearch.search.fetch.subphase.FetchSourceContext; import org.opensearch.transport.client.Client; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import static org.opensearch.action.ValidateActions.addValidationError; @@ -198,8 +194,10 @@ BulkRequest internalAdd(UpdateRequest request) { if (request.upsertRequest() != null) { sizeInBytes += request.upsertRequest().source().length(); } - if (request.script() != null) { - sizeInBytes += request.script().getIdOrCode().length() * 2; + Script script = request.script(); + if (script != null) { + sizeInBytes += (long) script.getIdOrCode().length() * 2L; + sizeInBytes += script.getParams().toString().length(); } indices.add(request.index()); return this; diff --git a/server/src/test/java/org/opensearch/action/bulk/BulkRequestTests.java b/server/src/test/java/org/opensearch/action/bulk/BulkRequestTests.java index e68ab8c793004..fc1e133dc3901 100644 --- a/server/src/test/java/org/opensearch/action/bulk/BulkRequestTests.java +++ b/server/src/test/java/org/opensearch/action/bulk/BulkRequestTests.java @@ -47,6 +47,7 @@ import org.opensearch.core.xcontent.MediaTypeRegistry; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.script.Script; +import org.opensearch.script.ScriptType; import org.opensearch.test.OpenSearchTestCase; import org.opensearch.transport.client.Requests; @@ -423,4 +424,27 @@ public void testBulkTerminatedByNewline() throws Exception { ); assertEquals(3, bulkRequestWithNewLine.numberOfActions()); } + + public void testScriptParamsAreIncludedInSize() { + BulkRequest bulkRequest = new BulkRequest(); + + UpdateRequest requestWithEmptyParams = new UpdateRequest("index", "id1"); + requestWithEmptyParams.script( + new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, "test script", Collections.emptyMap()) + ); + bulkRequest.add(requestWithEmptyParams); + long sizeWithEmptyParams = bulkRequest.estimatedSizeInBytes(); + + UpdateRequest requestWithParams = new UpdateRequest("index", "id2"); + Map params = new HashMap<>(); + params.put("param1", "test_value"); + requestWithParams.script( + new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, "test script", params) + ); + bulkRequest.add(requestWithParams); + long sizeWithParams = bulkRequest.estimatedSizeInBytes(); + + assertTrue(sizeWithParams > sizeWithEmptyParams); + assertTrue(sizeWithParams - sizeWithEmptyParams >= params.toString().length()); + } }