From 8cbcb142b7e59f244aff334187b55a58ad4dd1b9 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 09 Apr 2015 22:16:52 +0000
Subject: [PATCH] Minor code cleanup: use matching rule's index ID for verifying indexes.

---
 opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java |   99 ++++---------------------------------------------
 1 files changed, 9 insertions(+), 90 deletions(-)

diff --git a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java
index 1547d74..c7f1559 100644
--- a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java
+++ b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java
@@ -35,6 +35,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -49,11 +50,7 @@
 import org.forgerock.opendj.ldap.ByteSequence;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ConditionResult;
-import org.forgerock.opendj.ldap.DecodeException;
-import org.forgerock.opendj.ldap.ResultCode;
-import org.forgerock.opendj.ldap.schema.MatchingRule;
 import org.forgerock.opendj.ldap.spi.IndexingOptions;
-import org.opends.server.admin.std.meta.BackendIndexCfgDefn.IndexType;
 import org.opends.server.backends.VerifyConfig;
 import org.opends.server.backends.pluggable.AttributeIndex.MatchingRuleIndex;
 import org.opends.server.backends.pluggable.spi.Cursor;
@@ -61,7 +58,6 @@
 import org.opends.server.backends.pluggable.spi.ReadableTransaction;
 import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
@@ -1308,24 +1304,7 @@
   {
     for (AttributeIndex attrIndex : attrIndexList)
     {
-      try
-      {
-        List<Attribute> attrList = entry.getAttribute(attrIndex.getAttributeType());
-        if (attrList != null)
-        {
-          verifyAttribute(txn, attrIndex, entryID, attrList);
-        }
-      }
-      catch (DirectoryException e)
-      {
-        if (logger.isTraceEnabled())
-        {
-          logger.traceException(e);
-
-          logger.trace("Error normalizing values of attribute %s in entry <%s>: %s.%n",
-              attrIndex.getAttributeType(), entry.getName(), e.getMessageObject());
-        }
-      }
+      verifyAttribute(txn, entryID, entry, attrIndex);
     }
 
     for (VLVIndex vlvIndex : vlvIndexList)
@@ -1366,64 +1345,17 @@
 
   /**
    * Check that an attribute index is complete for a given attribute.
-   *
-   * @param attrIndex The attribute index to be checked.
-   * @param entryID The entry ID.
-   * @param attrList The attribute to be checked.
-   * @throws DirectoryException If a Directory Server error occurs.
    */
-  private void verifyAttribute(ReadableTransaction txn, AttributeIndex attrIndex, EntryID entryID,
-      List<Attribute> attrList) throws DirectoryException
+  private void verifyAttribute(ReadableTransaction txn, EntryID entryID, Entry entry, AttributeIndex attrIndex)
   {
-    if (attrList == null || attrList.isEmpty())
+    IndexingOptions options = attrIndex.getIndexingOptions();
+    for (MatchingRuleIndex index : attrIndex.getNameToIndexes().values())
     {
-      return;
-    }
-
-    final Map<String, MatchingRuleIndex> nameToIndexes = attrIndex.getNameToIndexes();
-    Index equalityIndex = nameToIndexes.get(IndexType.EQUALITY.toString());
-    Index presenceIndex = nameToIndexes.get(IndexType.PRESENCE.toString());
-    Index substringIndex = nameToIndexes.get(IndexType.SUBSTRING.toString());
-    Index orderingIndex = nameToIndexes.get(IndexType.ORDERING.toString());
-    Index approximateIndex = nameToIndexes.get(IndexType.APPROXIMATE.toString());
-    // TODO: Add support for Extended Matching Rules indexes.
-
-    if (presenceIndex != null)
-    {
-      verifyAttributeInIndex(presenceIndex, txn, AttributeIndex.PRESENCE_KEY, entryID);
-    }
-
-    for (Attribute attr : attrList)
-    {
-      final AttributeType attrType = attr.getAttributeType();
-      for (ByteString value : attr)
+      Set<ByteString> keys = new HashSet<ByteString>();
+      index.indexEntry(entry, keys, options);
+      for (ByteString key : keys)
       {
-        ByteString normalizedBytes = normalize(attrType.getEqualityMatchingRule(), value);
-
-        if (equalityIndex != null)
-        {
-          verifyAttributeInIndex(equalityIndex, txn, normalizedBytes, entryID);
-        }
-
-        if (substringIndex != null)
-        {
-          for (ByteString key : attrIndex.substringKeys(normalizedBytes))
-          {
-            verifyAttributeInIndex(substringIndex, txn, key, entryID);
-          }
-        }
-
-        if (orderingIndex != null)
-        {
-          ByteString key = normalize(attrType.getOrderingMatchingRule(), value);
-          verifyAttributeInIndex(orderingIndex, txn, key, entryID);
-        }
-
-        if (approximateIndex != null)
-        {
-          ByteString key = normalize(attrType.getApproximateMatchingRule(), value);
-          verifyAttributeInIndex(approximateIndex, txn, key, entryID);
-        }
+        verifyAttributeInIndex(index, txn, key, entryID);
       }
     }
   }
@@ -1469,19 +1401,6 @@
     return ConditionResult.UNDEFINED;
   }
 
-  private ByteString normalize(MatchingRule matchingRule, ByteString value) throws DirectoryException
-  {
-    try
-    {
-      return matchingRule.normalizeAttributeValue(value);
-    }
-    catch (DecodeException e)
-    {
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-          e.getMessageObject(), e);
-    }
-  }
-
   /**
    * Get the parent DN of a given DN.
    *

--
Gitblit v1.10.0