From 17e216ed32e21eddece22d782f8a256711ab3ad8 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 04 Dec 2014 15:08:07 +0000
Subject: [PATCH] OPENDJ-1602 (CR-5566) New pluggable storage based backend

---
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java |  312 ---------------------------------------------------
 1 files changed, 1 insertions(+), 311 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
index aadeb8a..fa4836a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
@@ -198,73 +198,6 @@
     return true;
   }
 
-  /**
-   * Insert an entry ID into the set of IDs indexed by a given key.
-   *
-   * @param txn A database transaction, or null if none is required.
-   * @param key         The index key.
-   * @param entryID     The entry ID.
-   * @return True if the entry ID is inserted or ignored because the entry limit
-   *         count is exceeded. False if it already exists in the entry ID set
-   *         for the given key.
-   * @throws DatabaseException If an error occurs in the JE database.
-   */
-  public boolean insertID(Transaction txn, DatabaseEntry key, EntryID entryID)
-       throws DatabaseException
-  {
-    DatabaseEntry entryIDData = entryID.getDatabaseEntry();
-    DatabaseEntry data = new DatabaseEntry();
-
-    if(maintainCount)
-    {
-      for (int i = 0; i < phantomWriteRetries; i++)
-      {
-        if (insertIDWithRMW(txn, key, data, entryIDData, entryID) == SUCCESS)
-        {
-          return true;
-        }
-      }
-    }
-    else
-    {
-      final OperationStatus status = read(txn, key, data, LockMode.READ_COMMITTED);
-      if(status == OperationStatus.SUCCESS)
-      {
-        EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
-        if (entryIDList.isDefined())
-        {
-          for (int i = 0; i < phantomWriteRetries; i++)
-          {
-            if (insertIDWithRMW(txn, key, data, entryIDData, entryID) == SUCCESS)
-            {
-              return true;
-            }
-          }
-        }
-      }
-      else if(rebuildRunning || trusted)
-      {
-        if (insert(txn, key, entryIDData) == OperationStatus.KEYEXIST)
-        {
-          for (int i = 1; i < phantomWriteRetries; i++)
-          {
-            if (insertIDWithRMW(txn, key, data, entryIDData, entryID) == SUCCESS)
-            {
-              return true;
-            }
-          }
-        }
-      }
-      else
-      {
-        return true;
-      }
-    }
-    return false;
-  }
-
-
-
   private void deleteKey(DatabaseEntry key, ImportIDSet importIdSet, DatabaseEntry data) throws DatabaseException {
     final OperationStatus status = read(null, key, data, LockMode.DEFAULT);
     if(status == SUCCESS) {
@@ -370,56 +303,6 @@
     return true;
   }
 
-  private OperationStatus insertIDWithRMW(Transaction txn, DatabaseEntry key,
-                                          DatabaseEntry data,
-                                          DatabaseEntry entryIDData,
-                                          EntryID entryID)
-      throws DatabaseException
-  {
-    final OperationStatus status = read(txn, key, data, LockMode.RMW);
-    if(status == OperationStatus.SUCCESS)
-    {
-      EntryIDSet entryIDList =
-          new EntryIDSet(key.getData(), data.getData());
-      if (entryIDList.isDefined() && indexEntryLimit > 0 &&
-          entryIDList.size() >= indexEntryLimit)
-      {
-        if(maintainCount)
-        {
-          entryIDList = new EntryIDSet(entryIDList.size());
-        }
-        else
-        {
-          entryIDList = new EntryIDSet();
-        }
-        entryLimitExceededCount++;
-
-        if(logger.isTraceEnabled())
-        {
-          StringBuilder builder = new StringBuilder();
-          StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
-          logger.trace("Index entry exceeded in index %s. " +
-              "Limit: %d. ID list size: %d.\nKey:%s",
-              name, indexEntryLimit, entryIDList.size(), builder);
-        }
-      }
-
-      entryIDList.add(entryID);
-
-      byte[] after = entryIDList.toDatabase();
-      data.setData(after);
-      return put(txn, key, data);
-    }
-    else if(rebuildRunning || trusted)
-    {
-      return insert(txn, key, entryIDData);
-    }
-    else
-    {
-      return OperationStatus.SUCCESS;
-    }
-  }
-
   /**
    * Update the set of entry IDs for a given key.
    *
@@ -633,111 +516,13 @@
     return true;
   }
 
-  /**
-   * Remove an entry ID from the set of IDs indexed by a given key.
-   *
-   * @param txn A database transaction, or null if none is required.
-   * @param key         The index key.
-   * @param entryID     The entry ID.
-   * @throws DatabaseException If an error occurs in the JE database.
-   */
-  public void removeID(Transaction txn, DatabaseEntry key, EntryID entryID)
-      throws DatabaseException
-  {
-    DatabaseEntry data = new DatabaseEntry();
-
-    if(maintainCount)
-    {
-      removeIDWithRMW(txn, key, data, entryID);
-    }
-    else
-    {
-      final OperationStatus status = read(txn, key, data, LockMode.READ_COMMITTED);
-      if(status == SUCCESS)
-      {
-        EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
-        if(entryIDList.isDefined())
-        {
-          removeIDWithRMW(txn, key, data, entryID);
-        }
-      }
-      else if (trusted && !rebuildRunning)
-      {
-        logIndexCorruptError(txn, key);
-      }
-      // Ignore failures if rebuild is running since a empty entryIDset
-      // will probably not be rebuilt.
-    }
-  }
-
-  /**
-   * Delete specified entry ID from all keys in the provided key set.
-   *
-   * @param txn  A Transaction.
-   * @param keySet A set of keys.
-   * @param entryID The entry ID to delete.
-   * @throws DatabaseException If a database error occurs.
-   */
-  public void delete(Transaction txn, Set<byte[]> keySet, EntryID entryID) throws DatabaseException {
-    setTrusted(txn, false);
-    for(byte[] key : keySet) {
-       removeIDWithRMW(txn, new DatabaseEntry(key), new DatabaseEntry(), entryID);
-    }
-    setTrusted(txn, true);
-  }
-
-  private void removeIDWithRMW(Transaction txn, DatabaseEntry key,
-                               DatabaseEntry data, EntryID entryID)
-      throws DatabaseException
-  {
-    final OperationStatus status = read(txn, key, data, LockMode.RMW);
-    if (status == SUCCESS)
-    {
-      EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
-      // Ignore failures if rebuild is running since the entry ID is
-      // probably already removed.
-      if (!entryIDList.remove(entryID) && trusted && !rebuildRunning)
-      {
-        logIndexCorruptError(txn, key,
-            "The expected entry ID does not exist in the entry ID list for index %s.\nKey:%s");
-      }
-      else
-      {
-        byte[] after = entryIDList.toDatabase();
-        if (after != null)
-        {
-          data.setData(after);
-          put(txn, key, data);
-        }
-        else
-        {
-          // No more IDs, so remove the key. If index is not
-          // trusted then this will cause all subsequent reads
-          // for this key to return undefined set.
-          delete(txn, key);
-        }
-      }
-    }
-    else if (trusted && !rebuildRunning)
-    {
-      logIndexCorruptError(txn, key);
-    }
-    // Ignore failures if rebuild is running since a empty entryIDset
-    // will probably not be rebuilt.
-  }
-
   private void logIndexCorruptError(Transaction txn, DatabaseEntry key)
   {
-    logIndexCorruptError(txn, key, "The expected key does not exist in the index %s.\nKey:%s");
-  }
-
-  private void logIndexCorruptError(Transaction txn, DatabaseEntry key, String traceMsg)
-  {
     if (logger.isTraceEnabled())
     {
       StringBuilder builder = new StringBuilder();
       StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
-      logger.trace(traceMsg, name, builder);
+      logger.trace("The expected key does not exist in the index %s.\nKey:%s", name, builder);
     }
 
     setTrusted(txn, false);
@@ -1060,37 +845,6 @@
   }
 
   /**
-   * Update the index for a new entry.
-   *
-   * @param txn A database transaction, or null if none is required.
-   * @param entryID     The entry ID.
-   * @param entry       The entry to be indexed.
-   * @param options     The indexing options to use
-   * @return True if all the indexType keys for the entry are added. False if
-   *         the entry ID already exists for some keys.
-   * @throws DatabaseException If an error occurs in the JE database.
-   * @throws DirectoryException If a Directory Server error occurs.
-   */
-  public boolean addEntry(Transaction txn, EntryID entryID, Entry entry,
-      IndexingOptions options) throws DatabaseException, DirectoryException
-  {
-    TreeSet<ByteString> addKeys = new TreeSet<ByteString>(indexer.getBSComparator());
-    indexer.indexEntry(entry, addKeys, options);
-
-    DatabaseEntry key = new DatabaseEntry();
-    boolean success = true;
-    for (ByteString keyBytes : addKeys)
-    {
-      key.setData(keyBytes.toByteArray());
-      if(!insertID(txn, key, entryID))
-      {
-        success = false;
-      }
-    }
-    return success;
-  }
-
-  /**
    * Update the index buffer for a deleted entry.
    *
    * @param buffer The index buffer to use to store the deleted keys
@@ -1113,70 +867,6 @@
   }
 
   /**
-   * Update the index for a deleted entry.
-   *
-   * @param txn A database transaction, or null if none is required.
-   * @param entryID     The entry ID
-   * @param entry       The contents of the deleted entry.
-   * @param options     The indexing options to use
-   * @throws DatabaseException If an error occurs in the JE database.
-   * @throws DirectoryException If a Directory Server error occurs.
-   */
-  public void removeEntry(Transaction txn, EntryID entryID, Entry entry,
-      IndexingOptions options) throws DatabaseException, DirectoryException
-  {
-    TreeSet<ByteString> delKeys =
-        new TreeSet<ByteString>(indexer.getBSComparator());
-    indexer.indexEntry(entry, delKeys, options);
-
-    DatabaseEntry key = new DatabaseEntry();
-    for (ByteString keyBytes : delKeys)
-    {
-      key.setData(keyBytes.toByteArray());
-      removeID(txn, key, entryID);
-    }
-  }
-
-
-  /**
-   * Update the index to reflect a sequence of modifications in a Modify
-   * operation.
-   *
-   * @param txn A database transaction, or null if none is required.
-   * @param entryID The ID of the entry that was modified.
-   * @param oldEntry The entry before the modifications were applied.
-   * @param newEntry The entry after the modifications were applied.
-   * @param mods The sequence of modifications in the Modify operation.
-   * @param options The indexing options to use
-   * @throws DatabaseException If an error occurs in the JE database.
-   */
-  public void modifyEntry(Transaction txn,
-                          EntryID entryID,
-                          Entry oldEntry,
-                          Entry newEntry,
-                          List<Modification> mods, IndexingOptions options)
-       throws DatabaseException
-  {
-    TreeMap<ByteString, Boolean> modifiedKeys =
-        new TreeMap<ByteString, Boolean>(indexer.getBSComparator());
-    indexer.modifyEntry(oldEntry, newEntry, mods, modifiedKeys, options);
-
-    DatabaseEntry key = new DatabaseEntry();
-    for (Map.Entry<ByteString, Boolean> modifiedKey : modifiedKeys.entrySet())
-    {
-      key.setData(modifiedKey.getKey().toByteArray());
-      if(modifiedKey.getValue())
-      {
-        insertID(txn, key, entryID);
-      }
-      else
-      {
-        removeID(txn, key, entryID);
-      }
-    }
-  }
-
-  /**
    * Update the index to reflect a sequence of modifications in a Modify
    * operation.
    *

--
Gitblit v1.10.0