From b863e237d8a0ba39af6cb61340db95cfc5166237 Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Fri, 12 Jun 2015 09:18:01 +0000
Subject: [PATCH] OPENDJ-2108 CR-7212 Some indexes are evaluated as indexed but should be not-indexed.

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java |   41 +++++++++++++++++++++++++++++++++--------
 1 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
index d513ee7..1f41856 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
@@ -498,12 +498,13 @@
       StringBuilder debugBuffer, BackendMonitor monitor)
   {
     LocalizableMessageBuilder debugMessage = monitor.isFilterUseEnabled() ? new LocalizableMessageBuilder() : null;
-    EntryIDSet results = indexQuery.evaluate(debugMessage);
+    StringBuilder indexNameOut = debugBuffer == null ? null : new StringBuilder();
+    EntryIDSet results = indexQuery.evaluate(debugMessage, indexNameOut);
 
     if (debugBuffer != null)
     {
-      debugBuffer.append("[INDEX:").append(config.getAttribute().getNameOrOID())
-        .append(".").append(indexName).append("]");
+      appendDebugIndexInformation(debugBuffer, indexName);
+      appendDebugUnindexedInformation(debugBuffer, indexNameOut);
     }
 
     if (monitor.isFilterUseEnabled())
@@ -521,6 +522,27 @@
   }
 
   /**
+   * Appends additional traces to {@code debugsearchindex} when a filter successfully used
+   * an auxiliary index type during index query.
+   *
+   * @param debugBuffer the current debugsearchindex buffer
+   * @param indexNameOut the name of the index type
+   */
+  private void appendDebugUnindexedInformation(StringBuilder debugBuffer, StringBuilder indexNameOut)
+  {
+    if (indexNameOut.length() > 0)
+    {
+      debugBuffer.append(newUndefinedSet().toString());
+      appendDebugIndexInformation(debugBuffer, indexNameOut.toString());
+    }
+  }
+
+  private void appendDebugIndexInformation(final StringBuilder debugBuffer, final String infos)
+  {
+    debugBuffer.append("[INDEX:").append(config.getAttribute().getNameOrOID()).append(".").append(infos).append("]");
+  }
+
+  /**
    * Retrieve the entry IDs that might match two filters that restrict a value
    * to both a lower bound and an upper bound.
    *
@@ -881,11 +903,16 @@
         monitor.updateStats(filter,
             INFO_INDEX_FILTER_MATCHING_RULE_NOT_INDEXED.get(matchRuleOID, config.getAttribute().getNameOrOID()));
       }
-      return IndexQuery.createNullIndexQuery().evaluate(null);
+      return IndexQuery.createNullIndexQuery().evaluate(null, null);
     }
 
     try
     {
+      final IndexQuery indexQuery = rule.getAssertion(filter.getAssertionValue()).createIndexQuery(indexQueryFactory);
+      LocalizableMessageBuilder debugMessage = monitor.isFilterUseEnabled() ? new LocalizableMessageBuilder() : null;
+      StringBuilder indexNameOut = debugBuffer == null ? null : new StringBuilder();
+      EntryIDSet results = indexQuery.evaluate(debugMessage, indexNameOut);
+
       if (debugBuffer != null)
       {
         debugBuffer.append("[INDEX:");
@@ -897,11 +924,9 @@
               .append(indexer.getIndexID());
         }
         debugBuffer.append("]");
+        appendDebugUnindexedInformation(debugBuffer, indexNameOut);
       }
 
-      final IndexQuery indexQuery = rule.getAssertion(filter.getAssertionValue()).createIndexQuery(indexQueryFactory);
-      LocalizableMessageBuilder debugMessage = monitor.isFilterUseEnabled() ? new LocalizableMessageBuilder() : null;
-      EntryIDSet results = indexQuery.evaluate(debugMessage);
       if (monitor.isFilterUseEnabled())
       {
         if (results.isDefined())
@@ -918,7 +943,7 @@
     catch (DecodeException e)
     {
       logger.traceException(e);
-      return IndexQuery.createNullIndexQuery().evaluate(null);
+      return IndexQuery.createNullIndexQuery().evaluate(null, null);
     }
   }
 

--
Gitblit v1.10.0