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

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


The following commit(s) were added to refs/heads/trunk by this push:
     new dbc7f375de OAK-11892 - Expose hidden mount for elasticsearch indexes 
in IndexStats (#2490)
dbc7f375de is described below

commit dbc7f375de571dadd0ed72b296b05a60f0c24b9b
Author: chibulcuteanu <[email protected]>
AuthorDate: Wed Oct 8 15:42:54 2025 +0300

    OAK-11892 - Expose hidden mount for elasticsearch indexes in IndexStats 
(#2490)
    
    Co-authored-by: chibulcu <[email protected]>
---
 .../oak/plugins/index/inventory/IndexPrinter.java  |  5 ++-
 .../plugins/index/inventory/IndexPrinterTest.java  | 37 +++++++++++++++++++++-
 .../index/elastic/ElasticIndexInfoProvider.java    | 18 ++++++++---
 3 files changed, 54 insertions(+), 6 deletions(-)

diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinter.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinter.java
index 8902dec5c4..97f29ce226 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinter.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinter.java
@@ -158,9 +158,12 @@ public class IndexPrinter implements InventoryPrinter {
         }
 
         if ("lucene".equals(info.getType())) {
-            // Only valid for lucene type indexes, for others it will simply 
show false.
+            // Only valid for lucene type indexes
             po.text("Has hidden oak mount", info.hasHiddenOakLibsMount());
             po.text("Has property index", info.hasPropertyIndexNode());
+        } else if ("elasticsearch".equals(info.getType())) {
+            // For elastic only the mount flag is applicable
+            po.text("Has hidden oak mount", info.hasHiddenOakLibsMount());
         }
         po.text("Is active", info.isActive());
 
diff --git 
a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinterTest.java
 
b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinterTest.java
index 8c8a406e10..072ba8f7a9 100644
--- 
a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinterTest.java
+++ 
b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/inventory/IndexPrinterTest.java
@@ -118,6 +118,39 @@ public class IndexPrinterTest {
         
assertFalse(jsonMap.get("property").getChildren().containsKey("/oak:index/barIndex"));
     }
 
+    @Test
+    public void indexInfoElasticMountPrintedJson() {
+        when(asyncInfo.getAsyncLanes()).thenReturn(emptyList());
+
+        TestInfo elasticInfo = new TestInfo("/oak:index/esIndex", 
"elasticsearch");
+        elasticInfo.hasHiddenOakLibsMount = true;
+
+        when(indexInfo.getAllIndexInfo()).thenReturn(asList(elasticInfo));
+
+        String output = getPrintOutput(Format.JSON);
+        JsonObject json = JsonObject.fromJson(output, true);
+        Map<String, JsonObject> jsonMap = json.getChildren();
+        assertTrue(jsonMap.containsKey("elasticsearch"));
+        JsonObject elasticJson = jsonMap.get("elasticsearch");
+        
assertTrue(elasticJson.getChildren().containsKey("/oak:index/esIndex"));
+        JsonObject idxJson = 
elasticJson.getChildren().get("/oak:index/esIndex");
+        assertEquals("true", idxJson.getProperties().get("Has hidden oak 
mount"));
+    }
+
+    @Test
+    public void indexInfoElasticMountPrinted() {
+        when(asyncInfo.getAsyncLanes()).thenReturn(emptyList());
+
+        TestInfo elasticInfo = new TestInfo("/oak:index/esIndex", 
"elasticsearch");
+        elasticInfo.hasHiddenOakLibsMount = true;
+
+        when(indexInfo.getAllIndexInfo()).thenReturn(asList(elasticInfo));
+
+        String output = getPrintOutput(Format.TEXT);
+        assertThat(output, containsString("/oak:index/esIndex"));
+        assertThat(output, containsString("Has hidden oak mount"));
+    }
+
     private String getPrintOutput(Format format) {
         StringWriter sw = new StringWriter();
         printer.print(new PrintWriter(sw), format, false);
@@ -128,6 +161,8 @@ public class IndexPrinterTest {
         final String indexPath;
         final String type;
         String laneName;
+        boolean hasHiddenOakLibsMount;
+
 
         private TestInfo(String indexPath, String type) {
             this.indexPath = indexPath;
@@ -181,7 +216,7 @@ public class IndexPrinterTest {
 
         @Override
         public boolean hasHiddenOakLibsMount() {
-            return false;
+            return hasHiddenOakLibsMount;
         }
 
         @Override
diff --git 
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexInfoProvider.java
 
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexInfoProvider.java
index f552962d7c..683d34e539 100644
--- 
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexInfoProvider.java
+++ 
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexInfoProvider.java
@@ -66,6 +66,13 @@ class ElasticIndexInfoProvider implements IndexInfoProvider {
             NodeState idxState = NodeStateUtils.getNode(nodeStore.getRoot(), 
indexPath);
             String asyncName = IndexUtils.getAsyncLaneName(idxState, 
indexPath);
             AsyncIndexInfo asyncInfo = 
asyncIndexInfoService.getInfo(asyncName);
+            boolean hasHiddenOakMount = false;
+            for (String c : idxState.getChildNodeNames()) {
+                if (c.startsWith(IndexDefinition.HIDDEN_OAK_MOUNT_PREFIX)) {
+                    hasHiddenOakMount = true;
+                    break;
+                }
+            }
 
             return new ElasticIndexInfo(
                     indexPath,
@@ -75,7 +82,8 @@ class ElasticIndexInfoProvider implements IndexInfoProvider {
                     node.getIndexStatistics().numDocs(),
                     node.getIndexStatistics().primaryStoreSize(),
                     node.getIndexStatistics().creationDate(),
-                    getStatusTimestamp(idxState, 
IndexDefinition.REINDEX_COMPLETION_TIMESTAMP)
+                    getStatusTimestamp(idxState, 
IndexDefinition.REINDEX_COMPLETION_TIMESTAMP),
+                    hasHiddenOakMount
             );
         } finally {
             node.release();
@@ -117,9 +125,11 @@ class ElasticIndexInfoProvider implements 
IndexInfoProvider {
         private final long sizeInBytes;
         private final long creationTimestamp;
         private final long reindexCompletionTimestamp;
+        private final boolean hasHiddenOakLibsMount;
 
         ElasticIndexInfo(String indexPath, String asyncLane, long 
indexedUpToTime, long lastUpdatedTime,
-                         long estimatedEntryCount, long sizeInBytes, long 
creationTimestamp, long reindexCompletionTimestamp) {
+                         long estimatedEntryCount, long sizeInBytes, long 
creationTimestamp, long reindexCompletionTimestamp,
+                         boolean hasHiddenOakLibsMount) {
             this.indexPath = indexPath;
             this.asyncLane = asyncLane;
             this.indexedUpToTime = indexedUpToTime;
@@ -128,6 +138,7 @@ class ElasticIndexInfoProvider implements IndexInfoProvider 
{
             this.sizeInBytes = sizeInBytes;
             this.creationTimestamp = creationTimestamp;
             this.reindexCompletionTimestamp = reindexCompletionTimestamp;
+            this.hasHiddenOakLibsMount = hasHiddenOakLibsMount;
         }
 
         @Override
@@ -179,8 +190,7 @@ class ElasticIndexInfoProvider implements IndexInfoProvider 
{
 
         @Override
         public boolean hasHiddenOakLibsMount() {
-            // not available in elastic
-            return false;
+            return hasHiddenOakLibsMount;
         }
 
         @Override

Reply via email to