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