Skip to content

Commit a6e2cf9

Browse files
committed
Fix: Include script params in BulkRequest size calculation
The BulkRequest's size calculation in internalAdd(UpdateRequest) method currently doesn't account for the size of script parameters. This can lead to underestimating the actual request size when script parameters are used. Added script parameters size calculation using script.getParams().toString().length()
1 parent a79ea5d commit a6e2cf9

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.elasticsearch.core.RestApiVersion;
3636
import org.elasticsearch.core.TimeValue;
3737
import org.elasticsearch.index.shard.ShardId;
38+
import org.elasticsearch.script.Script;
3839
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
3940
import org.elasticsearch.transport.RawIndexingDataTransportRequest;
4041
import org.elasticsearch.xcontent.XContentType;
@@ -195,8 +196,10 @@ BulkRequest internalAdd(UpdateRequest request) {
195196
if (request.upsertRequest() != null) {
196197
sizeInBytes += request.upsertRequest().source().length();
197198
}
198-
if (request.script() != null) {
199-
sizeInBytes += request.script().getIdOrCode().length() * 2;
199+
Script script = request.script();
200+
if (script != null) {
201+
sizeInBytes += (long) script.getIdOrCode().length() * 2L;
202+
sizeInBytes += script.getParams().toString().length();
200203
}
201204
indices.add(request.index());
202205
return this;

server/src/test/java/org/elasticsearch/action/bulk/BulkRequestTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.elasticsearch.common.io.stream.BytesStreamOutput;
2323
import org.elasticsearch.common.xcontent.XContentHelper;
2424
import org.elasticsearch.script.Script;
25+
import org.elasticsearch.script.ScriptType;
2526
import org.elasticsearch.test.ESTestCase;
2627
import org.elasticsearch.xcontent.XContentBuilder;
2728
import org.elasticsearch.xcontent.XContentFactory;
@@ -30,6 +31,7 @@
3031
import java.io.IOException;
3132
import java.nio.charset.StandardCharsets;
3233
import java.util.ArrayList;
34+
import java.util.Collections;
3335
import java.util.HashMap;
3436
import java.util.List;
3537
import java.util.Map;
@@ -40,6 +42,8 @@
4042
import static org.hamcrest.Matchers.containsString;
4143
import static org.hamcrest.Matchers.empty;
4244
import static org.hamcrest.Matchers.equalTo;
45+
import static org.hamcrest.Matchers.greaterThan;
46+
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
4347
import static org.hamcrest.Matchers.hasSize;
4448
import static org.hamcrest.Matchers.instanceOf;
4549
import static org.hamcrest.Matchers.is;
@@ -496,4 +500,27 @@ public void testShallowClone() {
496500
assertThat(shallowCopy.requireAlias(), equalTo(bulkRequest.requireAlias()));
497501
assertThat(shallowCopy.requireDataStream(), equalTo(bulkRequest.requireDataStream()));
498502
}
503+
504+
public void testScriptParamsAreIncludedInSize() {
505+
BulkRequest bulkRequest = new BulkRequest();
506+
507+
UpdateRequest requestWithEmptyParams = new UpdateRequest("index", "id1");
508+
requestWithEmptyParams.script(
509+
new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, "test script", Collections.emptyMap())
510+
);
511+
bulkRequest.add(requestWithEmptyParams);
512+
long sizeWithEmptyParams = bulkRequest.estimatedSizeInBytes();
513+
514+
UpdateRequest requestWithParams = new UpdateRequest("index", "id2");
515+
Map<String, Object> params = new HashMap<>();
516+
params.put("param1", "test_value");
517+
requestWithParams.script(
518+
new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, "test script", params)
519+
);
520+
bulkRequest.add(requestWithParams);
521+
long sizeWithParams = bulkRequest.estimatedSizeInBytes();
522+
523+
assertThat(sizeWithParams, greaterThan(sizeWithEmptyParams));
524+
assertThat(sizeWithParams - sizeWithEmptyParams, greaterThanOrEqualTo((long) params.toString().length()));
525+
}
499526
}

0 commit comments

Comments
 (0)