This is an automated email from the ASF dual-hosted git repository.

thomasm pushed a commit to branch OAK-11530
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit 44a1faaab183e76dec223fad7a08802646372daa
Author: Thomas Mueller <[email protected]>
AuthorDate: Wed Feb 26 14:47:20 2025 +0100

    OAK-11530 Elasticsearch: 'field name cannot be an empty string' if fields 
start with a dot
---
 .../index/elastic/index/ElasticIndexWriter.java    | 24 ++++++++++++++++++++++
 .../elastic/index/ElasticIndexWriterTest.java      | 14 +++++++++++++
 2 files changed, 38 insertions(+)

diff --git 
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
 
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
index d7465632a7..d6fe68ff87 100644
--- 
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
+++ 
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
@@ -204,11 +204,35 @@ class ElasticIndexWriter implements 
FulltextIndexWriter<ElasticDocument> {
             if (ese.status() == 400 && 
ese.getMessage().contains("resource_already_exists_exception")) {
                 LOG.warn("Index {} already exists. Ignoring error", indexName);
             } else {
+                LOG.warn("Failed to create index {}", indexName, ese);
+                StringBuilder sb = new StringBuilder();
+                int old = JsonpUtils.maxToStringLength();
+                try {
+                    JsonpUtils.maxToStringLength(16_000_000);
+                    JsonpUtils.toString(request, sb);
+                    String[] array = splitLargeString(sb.toString(), 1024);
+                    for (int i = 0; i < array.length; i++) {
+                        LOG.warn("request chunk[{}] = {}", i, array[i]);
+                    }
+                } finally {
+                    JsonpUtils.maxToStringLength(old);
+                }
                 throw ese;
             }
         }
     }
 
+    public static String[] splitLargeString(String largeString, int chunkSize) 
{
+        int totalChunks = (largeString.length() + chunkSize - 1) / chunkSize;
+        String[] array = new String[totalChunks];
+        for (int i = 0; i < totalChunks; i++) {
+            int start = i * chunkSize;
+            int end = Math.min(start + chunkSize, largeString.length());
+            array[i] = largeString.substring(start, end);
+        }
+        return array;
+    }
+
     private void enableIndex() throws IOException {
         ElasticsearchIndicesClient client = 
elasticConnection.getClient().indices();
         // check if index already exists
diff --git 
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
 
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
index ccd7dc2e05..2b58d80cfa 100644
--- 
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
+++ 
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
@@ -27,6 +27,7 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
 import java.io.IOException;
+import java.util.Arrays;
 
 import static 
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticTestUtils.randomString;
 import static org.hamcrest.CoreMatchers.not;
@@ -130,4 +131,17 @@ public class ElasticIndexWriterTest {
         verify(bulkProcessorHandlerMock).update(anyString(), 
any(ElasticDocument.class));
     }
 
+    @Test
+    public void splitLargeString() {
+        assertEquals("[a]",
+                Arrays.toString(ElasticIndexWriter.splitLargeString(
+                        "a", 1024)));
+        assertEquals("[h, e, l, l, o,  , w, o, r, l, d]",
+                Arrays.toString(ElasticIndexWriter.splitLargeString(
+                        "hello world", 1)));
+        assertEquals("[he, ll, o , wo, rl, d]",
+                Arrays.toString(ElasticIndexWriter.splitLargeString(
+                        "hello world", 2)));
+    }
+
 }

Reply via email to