From 429a25b92b7036e6387c58edc26099a7cb68978e Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Thu, 01 Oct 2026 10:19:15 +0000
Subject: [PATCH] [#1134] Give a VLV row of backendstat show-index-status its Confidential cell, so that its record count lands under Record Count (#1139)

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendStat.java |  104 +++++++++++++++++++++++++++++-----------------------
 1 files changed, 58 insertions(+), 46 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendStat.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendStat.java
index 4ee981c..200c1b1 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendStat.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendStat.java
@@ -314,6 +314,7 @@
    */
   public static int main(String[] args, OutputStream outStream, OutputStream errStream)
   {
+    JDKLogging.disableLogging();
     BackendStat app = new BackendStat(outStream, errStream);
     return app.run(args);
   }
@@ -328,7 +329,6 @@
   {
     this.out = NullOutputStream.wrapOrNullStream(out);
     this.err = NullOutputStream.wrapOrNullStream(err);
-    JDKLogging.disableLogging();
 
     LocalizableMessage toolDescription = INFO_DESCRIPTION_BACKEND_TOOL.get();
     this.parser = new SubCommandArgumentParser(getClass().getName(), toolDescription, false);
@@ -1022,58 +1022,16 @@
 
     try
     {
-      // Create a table of their properties.
-      TableBuilder builder = new TableBuilder();
-      int count = 0;
-
-      builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_INDEX_NAME.get());
-      builder.appendHeading(INFO_LABEL_BACKEND_TOOL_RAW_DB_NAME.get());
-      builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_INDEX_STATUS.get());
-      builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_INDEX_CONFIDENTIAL.get());
-      builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_RECORD_COUNT.get());
-      builder.appendHeading(INFO_LABEL_BACKEND_TOOL_INDEX_UNDEFINED_RECORD_COUNT.get());
-      builder.appendHeading(LocalizableMessage.raw("95%"));
-      builder.appendHeading(LocalizableMessage.raw("90%"));
-      builder.appendHeading(LocalizableMessage.raw("85%"));
-
       EntryContainer ec = rc.getEntryContainer(base);
       if (ec == null)
       {
         return printEntryContainerError(backend, base);
       }
 
+      // Create a table of their properties.
+      TableBuilder builder = new TableBuilder();
       Map<Index, StringBuilder> undefinedKeys = new HashMap<>();
-      for (AttributeIndex attrIndex : ec.getAttributeIndexes())
-      {
-        for (AttributeIndex.MatchingRuleIndex index : attrIndex.getNameToIndexes().values())
-        {
-          builder.startRow();
-          builder.appendCell(index.getName().getIndexId());
-          builder.appendCell(index.getName());
-          builder.appendCell(index.isTrusted());
-          builder.appendCell(index.isEncrypted());
-          if (index.isTrusted())
-          {
-            appendIndexStats(builder, ec, index, undefinedKeys);
-          }
-          else
-          {
-            appendStatsNoData(builder, 5);
-          }
-          count++;
-        }
-      }
-
-      for (VLVIndex vlvIndex : ec.getVLVIndexes())
-      {
-        builder.startRow();
-        builder.appendCell(vlvIndex.getName().getIndexId());
-        builder.appendCell(vlvIndex.getName());
-        builder.appendCell(vlvIndex.isTrusted());
-        builder.appendCell(getTreeRecordCount(ec, vlvIndex));
-        appendStatsNoData(builder, 4);
-        count++;
-      }
+      int count = appendIndexStatusTable(builder, ec, undefinedKeys);
 
       builder.print(new TextTablePrinter(out));
       out.print(INFO_LABEL_BACKEND_TOOL_TOTAL.get(count).toString());
@@ -1091,6 +1049,60 @@
     }
   }
 
+  /**
+   * Fills the table {@code show-index-status} prints for the indexes of an entry container, a row
+   * per index, and returns the number of its rows. The keys of an index that are over its entry
+   * limit are collected into {@code undefinedKeys}.
+   */
+  int appendIndexStatusTable(TableBuilder builder, EntryContainer ec, Map<Index, StringBuilder> undefinedKeys)
+  {
+    builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_INDEX_NAME.get());
+    builder.appendHeading(INFO_LABEL_BACKEND_TOOL_RAW_DB_NAME.get());
+    builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_INDEX_STATUS.get());
+    builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_INDEX_CONFIDENTIAL.get());
+    builder.appendHeading(INFO_LABEL_BACKEND_DEBUG_RECORD_COUNT.get());
+    builder.appendHeading(INFO_LABEL_BACKEND_TOOL_INDEX_UNDEFINED_RECORD_COUNT.get());
+    builder.appendHeading(LocalizableMessage.raw("95%"));
+    builder.appendHeading(LocalizableMessage.raw("90%"));
+    builder.appendHeading(LocalizableMessage.raw("85%"));
+
+    int count = 0;
+    for (AttributeIndex attrIndex : ec.getAttributeIndexes())
+    {
+      for (AttributeIndex.MatchingRuleIndex index : attrIndex.getNameToIndexes().values())
+      {
+        builder.startRow();
+        builder.appendCell(index.getName().getIndexId());
+        builder.appendCell(index.getName());
+        builder.appendCell(index.isTrusted());
+        builder.appendCell(index.isEncrypted());
+        if (index.isTrusted())
+        {
+          appendIndexStats(builder, ec, index, undefinedKeys);
+        }
+        else
+        {
+          appendStatsNoData(builder, 5);
+        }
+        count++;
+      }
+    }
+
+    for (VLVIndex vlvIndex : ec.getVLVIndexes())
+    {
+      builder.startRow();
+      builder.appendCell(vlvIndex.getName().getIndexId());
+      builder.appendCell(vlvIndex.getName());
+      builder.appendCell(vlvIndex.isTrusted());
+      // A VLV index has no confidentiality setting, but its row still needs the cell of that column
+      appendStatsNoData(builder, 1);
+      builder.appendCell(getTreeRecordCount(ec, vlvIndex));
+      appendStatsNoData(builder, 4);
+      count++;
+    }
+    return count;
+  }
+
   private void appendStatsNoData(TableBuilder builder, int columns)
   {
     while (columns > 0)

--
Gitblit v1.10.0