From 20fdcbef0d17440c367d2943f9c5799bddfe661f Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 07 Apr 2015 10:45:33 +0000
Subject: [PATCH] OPENDJ-1628 - Simplify Index hierarchy and remove Indexer classes

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexBuffer.java |  151 +++++++++++++++++++++-----------------------------
 1 files changed, 63 insertions(+), 88 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexBuffer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexBuffer.java
index c8dbee7..3b3666a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexBuffer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexBuffer.java
@@ -67,106 +67,74 @@
    * state is only ever used when updating the id2children and id2subtree indexes when deleting an
    * entry.
    */
-  static class BufferedIndexValues
+  private static class BufferedIndexValues
   {
-    private EntryIDSet addedIDs;
-    private EntryIDSet deletedIDs;
+    private EntryIDSet addedEntryIDs;
+    private EntryIDSet deletedEntryIDs;
 
-    /**
-     * Adds the provided entryID to this object associating it with the provided keyBytes.
-     *
-     * @param keyBytes the keyBytes mapping for this entryID
-     * @param entryID the entryID to add
-     */
-    void addEntryID(ByteString keyBytes, EntryID entryID)
+    void addEntryID(EntryID entryID)
     {
-      if (!remove(deletedIDs, entryID))
+      if (!remove(deletedEntryIDs, entryID))
       {
-        if (this.addedIDs == null)
+        if (this.addedEntryIDs == null)
         {
-          this.addedIDs = newDefinedSet();
+          this.addedEntryIDs = newDefinedSet();
         }
-        this.addedIDs.add(entryID);
+        this.addedEntryIDs.add(entryID);
       }
     }
 
-    /**
-     * Deletes the provided entryID from this object.
-     *
-     * @param keyBytes the keyBytes mapping for this entryID
-     * @param entryID the entryID to delete
-     */
-    void deleteEntryID(ByteString keyBytes, EntryID entryID)
+    void deleteEntryID(EntryID entryID)
     {
-      if (!remove(addedIDs, entryID))
+      if (!remove(addedEntryIDs, entryID))
       {
-        if (this.deletedIDs == null)
+        if (this.deletedEntryIDs == null)
         {
-          this.deletedIDs = newDefinedSet();
+          this.deletedEntryIDs = newDefinedSet();
         }
-        this.deletedIDs.add(entryID);
+        this.deletedEntryIDs.add(entryID);
       }
     }
 
-    private boolean remove(EntryIDSet ids, EntryID entryID)
+    private static boolean remove(EntryIDSet entryIDs, EntryID entryID)
     {
-      if (ids != null && ids.contains(entryID))
-      {
-        ids.remove(entryID);
-        return true;
-      }
-      return false;
+      return entryIDs != null ? entryIDs.remove(entryID) : false;
     }
   }
 
   /** A simple class representing a pair of added and deleted VLV values. */
-  static class BufferedVLVIndexValues
+  private static class BufferedVLVIndexValues
   {
-    private TreeSet<ByteString> addedValues;
-    private TreeSet<ByteString> deletedValues;
+    private TreeSet<ByteString> addedSortKeys;
+    private TreeSet<ByteString> deletedSortKeys;
 
-    /**
-     * Adds the provided values to this object.
-     *
-     * @param sortValues the values to add
-     */
-    void addValues(ByteString sortValues)
+    void addSortKey(ByteString sortKey)
     {
-      if (!remove(deletedValues, sortValues))
+      if (!remove(deletedSortKeys, sortKey))
       {
-        if (addedValues == null)
+        if (addedSortKeys == null)
         {
-          addedValues = new TreeSet<ByteString>();
+          addedSortKeys = new TreeSet<ByteString>();
         }
-        addedValues.add(sortValues);
+        addedSortKeys.add(sortKey);
       }
     }
 
-    /**
-     * Deletes the provided values from this object.
-     *
-     * @param sortValues the values to delete
-     */
-    void deleteValues(ByteString sortValues)
+    void deleteSortKey(ByteString sortKey)
     {
-      if (!remove(addedValues, sortValues))
+      if (!remove(addedSortKeys, sortKey))
       {
-        if (deletedValues == null)
+        if (deletedSortKeys == null)
         {
-          deletedValues = new TreeSet<ByteString>();
+          deletedSortKeys = new TreeSet<ByteString>();
         }
-        deletedValues.add(sortValues);
+        deletedSortKeys.add(sortKey);
       }
     }
 
-    private boolean remove(TreeSet<ByteString> values, ByteString sortValues)
+    private static boolean remove(TreeSet<ByteString> sortKeys, ByteString sortKey)
     {
-      if (values != null && values.contains(sortValues))
-      {
-        values.remove(sortValues);
-        return true;
-      }
-      return false;
+      return sortKeys != null ? sortKeys.remove(sortKey) : false;
     }
   }
 
@@ -181,14 +149,7 @@
     this.entryContainer = entryContainer;
   }
 
-  /**
-   * Get the buffered VLV values for the given VLV index.
-   *
-   * @param vlvIndex The VLV index with the buffered values to retrieve.
-   * @return The buffered VLV values or <code>null</code> if there are
-   * no buffered VLV values for the specified VLV index.
-   */
-  BufferedVLVIndexValues getBufferedVLVIndexValues(VLVIndex vlvIndex)
+  private BufferedVLVIndexValues createOrGetBufferedVLVIndexValues(VLVIndex vlvIndex)
   {
     BufferedVLVIndexValues bufferedValues = bufferedVLVIndexes.get(vlvIndex);
     if (bufferedValues == null)
@@ -199,16 +160,7 @@
     return bufferedValues;
   }
 
-  /**
-   * Get the buffered index values for the given index and keyBytes.
-   *
-   * @param index
-   *          The index for which to retrieve the buffered index values
-   * @param keyBytes
-   *          The keyBytes for which to retrieve the buffered index values
-   * @return The buffered index values, it can never be null
-   */
-  BufferedIndexValues getBufferedIndexValues(Index index, ByteString keyBytes)
+  private BufferedIndexValues createOrGetBufferedIndexValues(Index index, ByteString keyBytes)
   {
     BufferedIndexValues values = null;
 
@@ -250,7 +202,7 @@
     {
       for (Index index : attributeIndex.getAllIndexes())
       {
-        updateKeys(index, txn, bufferedIndexes.remove(index));
+        flushIndex(index, txn, bufferedIndexes.remove(index));
       }
     }
 
@@ -259,12 +211,12 @@
       BufferedVLVIndexValues bufferedVLVValues = bufferedVLVIndexes.remove(vlvIndex);
       if (bufferedVLVValues != null)
       {
-        vlvIndex.updateIndex(txn, bufferedVLVValues.addedValues, bufferedVLVValues.deletedValues);
+        vlvIndex.updateIndex(txn, bufferedVLVValues.addedSortKeys, bufferedVLVValues.deletedSortKeys);
       }
     }
 
     final Index id2children = entryContainer.getID2Children();
-    updateKeys(id2children, txn, bufferedIndexes.remove(id2children));
+    flushIndex(id2children, txn, bufferedIndexes.remove(id2children));
 
     final Index id2subtree = entryContainer.getID2Subtree();
     final TreeMap<ByteString, BufferedIndexValues> bufferedValues = bufferedIndexes.remove(id2subtree);
@@ -275,11 +227,36 @@
        * entry processing in add/delete processing. This is necessary in order
        * to avoid deadlocks.
        */
-      updateKeys(id2subtree, txn, bufferedValues.descendingMap());
+      flushIndex(id2subtree, txn, bufferedValues.descendingMap());
     }
   }
 
-  private void updateKeys(Index index, WriteableTransaction txn,
+  void put(Index index, ByteString key, EntryID entryID)
+  {
+    createOrGetBufferedIndexValues(index, key).addEntryID(entryID);
+  }
+
+  void put(VLVIndex index, ByteString sortKey)
+  {
+    createOrGetBufferedVLVIndexValues(index).addSortKey(sortKey);
+  }
+
+  void remove(VLVIndex index, ByteString sortKey)
+  {
+    createOrGetBufferedVLVIndexValues(index).deleteSortKey(sortKey);
+  }
+
+  void remove(Index index, ByteString key)
+  {
+    createOrGetBufferedIndexValues(index, key);
+  }
+
+  void remove(Index index, ByteString key, EntryID entryID)
+  {
+    createOrGetBufferedIndexValues(index, key).deleteEntryID(entryID);
+  }
+
+  private void flushIndex(Index index, WriteableTransaction txn,
       Map<ByteString, BufferedIndexValues> bufferedValues)
   {
     if (bufferedValues != null)
@@ -290,9 +267,7 @@
         final Map.Entry<ByteString, BufferedIndexValues> entry = it.next();
         final ByteString key = entry.getKey();
         final BufferedIndexValues values = entry.getValue();
-
-        index.updateKey(txn, key, values.deletedIDs, values.addedIDs);
-
+        index.update(txn, key, values.deletedEntryIDs, values.addedEntryIDs);
         it.remove();
       }
     }

--
Gitblit v1.10.0