From 077e3f20eaecd6e99027850d61167fc86df6468f Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 30 Jul 2025 15:18:11 -0400 Subject: [PATCH] ESQL: Stabilize heap attack test (#132045) In some contexts ESQL's HeapAttack tests were failing because the TranslogWriter keeps a map with the contents of the documents in it around. But only when assertions are enabled. Fun. This flushes the map away, preventing the odd OOM we were seeing in the HeapAttack tests. --- .../xpack/esql/heap_attack/HeapAttackIT.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/HeapAttackIT.java b/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/HeapAttackIT.java index 893acbd22cc23..8ae9db4c904c9 100644 --- a/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/HeapAttackIT.java +++ b/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/HeapAttackIT.java @@ -884,8 +884,17 @@ private void initManyBigFieldsIndex(int docs, String type) throws IOException { } private void initGiantTextField(int docs) throws IOException { - logger.info("loading many documents with one big text field"); - int docsPerBulk = 3; + int docsPerBulk = 10; + for (Map nodeInfo : getNodesInfo(adminClient()).values()) { + for (Object module : (List) nodeInfo.get("modules")) { + Map moduleInfo = (Map) module; + final String moduleName = moduleInfo.get("name").toString(); + if (moduleName.startsWith("serverless-")) { + docsPerBulk = 3; + } + } + } + logger.info("loading many documents with one big text field - docs per bulk {}", docsPerBulk); int fieldSize = Math.toIntExact(ByteSizeValue.ofMb(5).getBytes()); Request request = new Request("PUT", "/bigtext"); @@ -1052,6 +1061,15 @@ private void bulk(String name, String bulk) throws IOException { ); Response response = client().performRequest(request); assertThat(entityAsMap(response), matchesMap().entry("errors", false).extraOk()); + + /* + * Flush after each bulk to clear the test-time seenSequenceNumbers Map in + * TranslogWriter. Without this the server will OOM from time to time keeping + * stuff around to run assertions on. + */ + request = new Request("POST", "/" + name + "/_flush"); + response = client().performRequest(request); + assertThat(entityAsMap(response), matchesMap().entry("_shards", matchesMap().extraOk().entry("failed", 0)).extraOk()); } private void initIndex(String name, String bulk) throws IOException {