From 9ff093de3e9f067d08bcc6d3134121128974a681 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 11 Apr 2014 13:47:56 +0000
Subject: [PATCH] OPENDJ-1308 Migrate schema support

---
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java |  109 +++++++++++++++++++++++-------------------------------
 1 files changed, 46 insertions(+), 63 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
index d65f259..4460f8e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
@@ -161,7 +161,7 @@
     if (indexConfig.getIndexType().contains(IndexType.SUBSTRING))
     {
       Index substringIndex = buildExtIndex(name, attrType, indexEntryLimit,
-          attrType.getSubstringMatchingRule(), new SubstringIndexer(attrType, config));
+          attrType.getSubstringMatchingRule(), new SubstringIndexer(attrType));
       nameToIndexes.put(IndexType.SUBSTRING.toString(), substringIndex);
     }
 
@@ -300,6 +300,16 @@
   }
 
   /**
+   * Return the indexing options of this AttributeIndex.
+   *
+   * @return the indexing options of this AttributeIndex.
+   */
+  public IndexingOptions getIndexingOptions()
+  {
+    return indexQueryFactory.getIndexingOptions();
+  }
+
+  /**
    * Get the JE index configuration used by this index.
    * @return The configuration in effect.
    */
@@ -319,25 +329,25 @@
    * @throws DatabaseException If an error occurs in the JE database.
    * @throws DirectoryException If a Directory Server error occurs.
    */
-  public boolean addEntry(IndexBuffer buffer, EntryID entryID,
-                          Entry entry)
+  public boolean addEntry(IndexBuffer buffer, EntryID entryID, Entry entry)
        throws DatabaseException, DirectoryException
   {
     boolean success = true;
 
+    final IndexingOptions options = indexQueryFactory.getIndexingOptions();
     for (Index index : nameToIndexes.values())
     {
-      if (!index.addEntry(buffer, entryID, entry))
+      if (!index.addEntry(buffer, entryID, entry, options))
       {
         success = false;
       }
     }
 
-    if(extensibleIndexes!=null)
+    if (extensibleIndexes != null)
     {
-      for(Index extensibleIndex:extensibleIndexes.getIndexes())
+      for (Index index : extensibleIndexes.getIndexes())
       {
-        if(!extensibleIndex.addEntry(buffer, entryID,entry))
+        if (!index.addEntry(buffer, entryID, entry, options))
         {
           success = false;
         }
@@ -363,19 +373,20 @@
   {
     boolean success = true;
 
+    final IndexingOptions options = indexQueryFactory.getIndexingOptions();
     for (Index index : nameToIndexes.values())
     {
-      if (!index.addEntry(txn, entryID, entry))
+      if (!index.addEntry(txn, entryID, entry, options))
       {
         success = false;
       }
     }
 
-    if(extensibleIndexes!=null)
+    if (extensibleIndexes != null)
     {
-      for(Index extensibleIndex:extensibleIndexes.getIndexes())
+      for (Index index : extensibleIndexes.getIndexes())
       {
-        if(!extensibleIndex.addEntry(txn, entryID,entry))
+        if (!index.addEntry(txn, entryID, entry, options))
         {
           success = false;
         }
@@ -394,20 +405,20 @@
    * @throws DatabaseException If an error occurs in the JE database.
    * @throws DirectoryException If a Directory Server error occurs.
    */
-  public void removeEntry(IndexBuffer buffer, EntryID entryID,
-                          Entry entry)
+  public void removeEntry(IndexBuffer buffer, EntryID entryID, Entry entry)
        throws DatabaseException, DirectoryException
   {
+    final IndexingOptions options = indexQueryFactory.getIndexingOptions();
     for (Index index : nameToIndexes.values())
     {
-      index.removeEntry(buffer, entryID, entry);
+      index.removeEntry(buffer, entryID, entry, options);
     }
 
-    if(extensibleIndexes!=null)
+    if (extensibleIndexes != null)
     {
-      for(Index extensibleIndex:extensibleIndexes.getIndexes())
+      for (Index index : extensibleIndexes.getIndexes())
       {
-        extensibleIndex.removeEntry(buffer, entryID, entry);
+        index.removeEntry(buffer, entryID, entry, options);
       }
     }
   }
@@ -424,16 +435,17 @@
   public void removeEntry(Transaction txn, EntryID entryID, Entry entry)
        throws DatabaseException, DirectoryException
   {
+    final IndexingOptions options = indexQueryFactory.getIndexingOptions();
     for (Index index : nameToIndexes.values())
     {
-      index.removeEntry(txn, entryID, entry);
+      index.removeEntry(txn, entryID, entry, options);
     }
 
-    if(extensibleIndexes!=null)
+    if (extensibleIndexes != null)
     {
-      for(Index extensibleIndex:extensibleIndexes.getIndexes())
+      for (Index index : extensibleIndexes.getIndexes())
       {
-        extensibleIndex.removeEntry(txn, entryID, entry);
+        index.removeEntry(txn, entryID, entry, options);
       }
     }
   }
@@ -457,16 +469,17 @@
                           List<Modification> mods)
        throws DatabaseException
   {
+    final IndexingOptions options = indexQueryFactory.getIndexingOptions();
     for (Index index : nameToIndexes.values())
     {
-      index.modifyEntry(txn, entryID, oldEntry, newEntry, mods);
+      index.modifyEntry(txn, entryID, oldEntry, newEntry, mods, options);
     }
 
-    if(extensibleIndexes!=null)
+    if (extensibleIndexes != null)
     {
-      for(Index extensibleIndex:extensibleIndexes.getIndexes())
+      for (Index index : extensibleIndexes.getIndexes())
       {
-        extensibleIndex.modifyEntry(txn, entryID, oldEntry, newEntry, mods);
+        index.modifyEntry(txn, entryID, oldEntry, newEntry, mods, options);
       }
     }
   }
@@ -490,16 +503,17 @@
                           List<Modification> mods)
        throws DatabaseException
   {
+    final IndexingOptions options = indexQueryFactory.getIndexingOptions();
     for (Index index : nameToIndexes.values())
     {
-      index.modifyEntry(buffer, entryID, oldEntry, newEntry, mods);
+      index.modifyEntry(buffer, entryID, oldEntry, newEntry, mods, options);
     }
 
     if(extensibleIndexes!=null)
     {
-      for(Index extensibleIndex:extensibleIndexes.getIndexes())
+      for (Index index : extensibleIndexes.getIndexes())
       {
-        extensibleIndex.modifyEntry(buffer, entryID, oldEntry, newEntry, mods);
+        index.modifyEntry(buffer, entryID, oldEntry, newEntry, mods, options);
       }
     }
   }
@@ -1024,9 +1038,6 @@
       final int indexEntryLimit = cfg.getIndexEntryLimit();
       final JEIndexConfig config = new JEIndexConfig(cfg.getSubstringLength());
 
-      applyChangeToIndex(cfg, attrType, name, IndexType.EQUALITY,
-          new EqualityIndexer(attrType), adminActionRequired, messages);
-
       Index presenceIndex = nameToIndexes.get(IndexType.PRESENCE.toString());
       if (cfg.getIndexType().contains(IndexType.PRESENCE))
       {
@@ -1052,38 +1063,10 @@
         removeIndex(presenceIndex, IndexType.PRESENCE);
       }
 
-      Index substringIndex = nameToIndexes.get(IndexType.SUBSTRING.toString());
-      if (cfg.getIndexType().contains(IndexType.SUBSTRING))
-      {
-        SubstringIndexer indexer = new SubstringIndexer(attrType, config);
-        Indexer extIndexer = new JEExtensibleIndexer(attrType, indexer);
-        if(substringIndex == null)
-        {
-          Index index = newIndex(name + "." + indexer.getExtensibleIndexID(),
-              indexEntryLimit, extIndexer);
-          substringIndex = openIndex(index, adminActionRequired, messages);
-          nameToIndexes.put(IndexType.SUBSTRING.toString(), substringIndex);
-        }
-        else
-        {
-          // already exists. Just update index entry limit.
-          if(substringIndex.setIndexEntryLimit(indexEntryLimit))
-          {
-            adminActionRequired.set(true);
-            messages.add(NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(substringIndex.getName()));
-          }
-
-          if (indexConfig.getSubstringLength() != cfg.getSubstringLength())
-          {
-            substringIndex.setIndexer(extIndexer);
-          }
-        }
-      }
-      else
-      {
-        removeIndex(substringIndex, IndexType.SUBSTRING);
-      }
-
+      applyChangeToIndex(cfg, attrType, name, IndexType.EQUALITY,
+          new EqualityIndexer(attrType), adminActionRequired, messages);
+      applyChangeToIndex(cfg, attrType, name, IndexType.SUBSTRING,
+          new SubstringIndexer(attrType), adminActionRequired, messages);
       applyChangeToIndex(cfg, attrType, name, IndexType.ORDERING,
           new OrderingIndexer(attrType), adminActionRequired, messages);
       applyChangeToIndex(cfg, attrType, name, IndexType.APPROXIMATE,

--
Gitblit v1.10.0