From b12119c55b89ece2495e84fba229d96439e8219b Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Fri, 30 Jul 2010 14:52:40 +0000
Subject: [PATCH] Implements index analysis features. There are 2 components: Index Filter Analyzer : Part of DatabaseEnvironmentProvider, it gathers search filter statistics and displays the index filter, number of hits, max matching entries, and a message. Compound filters are broken down to their basic elements. f an index was not utilized while evaluating the search filter, max matching entries will be -1 and a diagnostic message will be included. The monitor entry also includes when the analyzer was enabled along with the number of total index and unindexed searches processed. 

---
 opends/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java |   61 ++++++++++++++++++++++++++++--
 1 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java b/opends/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java
index 4811e06..1f54213 100644
--- a/opends/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java
+++ b/opends/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009 Sun Microsystems, Inc.
+ *      Copyright 2009-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.server.backends.jeb;
@@ -32,10 +32,19 @@
 import com.sleepycat.je.DatabaseEntry;
 import com.sleepycat.je.LockMode;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
+
+import org.opends.messages.Message;
 import org.opends.server.api.IndexQueryFactory;
 import org.opends.server.types.ByteSequence;
 
+import static org.opends.messages.JebMessages.
+    INFO_JEB_INDEX_FILTER_INDEX_LIMIT_EXCEEDED;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_INDEX_FILTER_INDEX_NOT_TRUSTED;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_INDEX_FILTER_INDEX_REBUILD_IN_PROGRESS;
 
 
 /**
@@ -76,7 +85,7 @@
       {
 
         @Override
-        public EntryIDSet evaluate()
+        public EntryIDSet evaluate(List<Message> debugMessages)
         {
           // Read the database and get Record for the key.
           DatabaseEntry key = new DatabaseEntry(value.toByteArray());
@@ -85,6 +94,27 @@
           Index index = indexMap.get(indexID);
           EntryIDSet entrySet =
               index.readKey(key, null, LockMode.DEFAULT);
+          if(debugMessages != null && !entrySet.isDefined())
+          {
+            if(!index.isTrusted())
+            {
+              debugMessages.add(
+                  INFO_JEB_INDEX_FILTER_INDEX_NOT_TRUSTED.get(
+                      index.getName()));
+            }
+            else if(index.isRebuildRunning())
+            {
+              debugMessages.add(
+                  INFO_JEB_INDEX_FILTER_INDEX_REBUILD_IN_PROGRESS.get(
+                      index.getName()));
+            }
+            else
+            {
+              debugMessages.add(
+                  INFO_JEB_INDEX_FILTER_INDEX_LIMIT_EXCEEDED.get(
+                      index.getName()));
+            }
+          }
           return entrySet;
         }
       };
@@ -103,13 +133,34 @@
       {
 
         @Override
-        public EntryIDSet evaluate()
+        public EntryIDSet evaluate(List<Message> debugMessages)
         {
           // Find the right index.
           Index index = indexMap.get(indexID);
           EntryIDSet entrySet =
               index.readRange(lowerBound.toByteArray(), upperBound
                   .toByteArray(), includeLowerBound, includeUpperBound);
+          if(debugMessages != null && !entrySet.isDefined())
+          {
+            if(!index.isTrusted())
+            {
+              debugMessages.add(
+                  INFO_JEB_INDEX_FILTER_INDEX_NOT_TRUSTED.get(
+                      index.getName()));
+            }
+            else if(index.isRebuildRunning())
+            {
+              debugMessages.add(
+                  INFO_JEB_INDEX_FILTER_INDEX_REBUILD_IN_PROGRESS.get(
+                      index.getName()));
+            }
+            else
+            {
+              debugMessages.add(
+                  INFO_JEB_INDEX_FILTER_INDEX_LIMIT_EXCEEDED.get(
+                      index.getName()));
+            }
+          }
           return entrySet;
         }
       };
@@ -150,10 +201,10 @@
       {
 
         @Override
-        public EntryIDSet evaluate()
+        public EntryIDSet evaluate(List<Message> debugMessages)
         {
           return new EntryIDSet();
         }
       };
   }
-}
\ No newline at end of file
+}

--
Gitblit v1.10.0