From d09bc0c153d9a7d10931b1a2fcd68f1f882ac698 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 03 Dec 2014 14:12:05 +0000
Subject: [PATCH] Other code cleanups and extracted methods.

---
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java       |  266 +++++++++++++++++++++++------------------------------
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java |   18 +-
 2 files changed, 124 insertions(+), 160 deletions(-)

diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
index f1e85ba..aadeb8a 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
@@ -180,7 +180,6 @@
       // is no reason why this index can't be upgraded to trusted.
       setTrusted(null, true);
     }
-
   }
 
   /**
@@ -266,9 +265,7 @@
 
 
 
-  private void
-  deleteKey(DatabaseEntry key, ImportIDSet importIdSet,
-         DatabaseEntry data) throws DatabaseException {
+  private void deleteKey(DatabaseEntry key, ImportIDSet importIdSet, DatabaseEntry data) throws DatabaseException {
     final OperationStatus status = read(null, key, data, LockMode.DEFAULT);
     if(status == SUCCESS) {
       newImportIDSet.clear(false);
@@ -289,9 +286,7 @@
   }
 
 
-  private void
-  insertKey(DatabaseEntry key, ImportIDSet importIdSet,
-         DatabaseEntry data) throws DatabaseException {
+  private void insertKey(DatabaseEntry key, ImportIDSet importIdSet, DatabaseEntry data) throws DatabaseException {
     final OperationStatus status = read(null, key, data, LockMode.DEFAULT);
     if(status == OperationStatus.SUCCESS) {
       newImportIDSet.clear(false);
@@ -323,9 +318,7 @@
    * @param data Database entry to reuse for read.
    * @throws DatabaseException If a database error occurs.
    */
-  public void
-  insert(DatabaseEntry key, ImportIDSet importIdSet,
-         DatabaseEntry data) throws DatabaseException {
+  public void insert(DatabaseEntry key, ImportIDSet importIdSet, DatabaseEntry data) throws DatabaseException {
     Cursor cursor = curLocal.get();
     if(cursor == null) {
       cursor = openCursor(null, null);
@@ -345,9 +338,7 @@
    *
    * @throws DatabaseException If a database error occurs.
    */
-  public void
-  delete(DatabaseEntry key, ImportIDSet importIdSet,
-         DatabaseEntry data) throws DatabaseException {
+  public void delete(DatabaseEntry key, ImportIDSet importIdSet, DatabaseEntry data) throws DatabaseException {
     Cursor cursor = curLocal.get();
     if(cursor == null) {
       cursor = openCursor(null, null);
@@ -367,9 +358,7 @@
    * @return <CODE>True</CODE> if the insert was successful.
    * @throws DatabaseException If a database error occurs.
    */
-
-  public synchronized
-  boolean insert(ImportIDSet importIDSet, Set<byte[]> keySet,
+  public synchronized boolean insert(ImportIDSet importIDSet, Set<byte[]> keySet,
                  DatabaseEntry keyData, DatabaseEntry data)
           throws DatabaseException {
     for(byte[] key : keySet) {
@@ -440,8 +429,7 @@
    * @param addedIDs the IDs to add for the key.
    * @throws DatabaseException If a database error occurs.
    */
-  void updateKey(Transaction txn, DatabaseEntry key,
-                 EntryIDSet deletedIDs, EntryIDSet addedIDs)
+  void updateKey(Transaction txn, DatabaseEntry key, EntryIDSet deletedIDs, EntryIDSet addedIDs)
       throws DatabaseException
   {
     DatabaseEntry data = new DatabaseEntry();
@@ -493,17 +481,9 @@
       }
       else
       {
-        if(deletedIDs != null && !rebuildRunning && trusted)
+        if (deletedIDs != null && trusted && !rebuildRunning)
         {
-          if(logger.isTraceEnabled())
-          {
-            StringBuilder builder = new StringBuilder();
-            StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
-            logger.trace("The expected key does not exist in the index %s.\nKey:%s ", name, builder);
-          }
-
-          setTrusted(txn, false);
-          logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
+          logIndexCorruptError(txn, key);
         }
 
         if ((rebuildRunning || trusted) && isNotNullOrEmpty(addedIDs))
@@ -531,7 +511,6 @@
     return entryIDSet == null || entryIDSet.size() == 0;
   }
 
-
   private boolean isNotNullOrEmpty(EntryIDSet entryIDSet)
   {
     return entryIDSet != null && entryIDSet.size() > 0;
@@ -547,45 +526,70 @@
     final OperationStatus status = read(txn, key, data, LockMode.RMW);
     if(status == SUCCESS)
     {
-      EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
-      if(addedIDs != null)
+      EntryIDSet entryIDList = computeEntryIDList(key, data, deletedIDs, addedIDs);
+      byte[] after = entryIDList.toDatabase();
+      if (after != null)
       {
-        if(entryIDList.isDefined() && indexEntryLimit > 0)
+        data.setData(after);
+        return 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.
+        return delete(txn, key);
+      }
+    }
+    else
+    {
+      if (deletedIDs != null && trusted && !rebuildRunning)
+      {
+        logIndexCorruptError(txn, key);
+      }
+
+      if ((rebuildRunning || trusted) && isNotNullOrEmpty(addedIDs))
+      {
+        data.setData(addedIDs.toDatabase());
+        return insert(txn, key, data);
+      }
+      return OperationStatus.SUCCESS;
+    }
+  }
+
+  private EntryIDSet computeEntryIDList(DatabaseEntry key, DatabaseEntry data, EntryIDSet deletedIDs,
+      EntryIDSet addedIDs)
+  {
+    EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
+    if(addedIDs != null)
+    {
+      if(entryIDList.isDefined() && indexEntryLimit > 0)
+      {
+        long idCountDelta = addedIDs.size();
+        if(deletedIDs != null)
         {
-          long idCountDelta = addedIDs.size();
-          if(deletedIDs != null)
+          idCountDelta -= deletedIDs.size();
+        }
+        if(idCountDelta + entryIDList.size() >= indexEntryLimit)
+        {
+          if(maintainCount)
           {
-            idCountDelta -= deletedIDs.size();
-          }
-          if(idCountDelta + entryIDList.size() >= indexEntryLimit)
-          {
-            if(maintainCount)
-            {
-              entryIDList = new EntryIDSet(entryIDList.size() + idCountDelta);
-            }
-            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, idCountDelta + addedIDs.size(), builder);
-
-            }
+            entryIDList = new EntryIDSet(entryIDList.size() + idCountDelta);
           }
           else
           {
-            entryIDList.addAll(addedIDs);
-            if(deletedIDs != null)
-            {
-              entryIDList.deleteAll(deletedIDs);
-            }
+            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, idCountDelta + addedIDs.size(), builder);
+
           }
         }
         else
@@ -597,47 +601,20 @@
           }
         }
       }
-      else if(deletedIDs != null)
-      {
-        entryIDList.deleteAll(deletedIDs);
-      }
-
-      byte[] after = entryIDList.toDatabase();
-      if (after == null)
-      {
-        // 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.
-        return delete(txn, key);
-      }
       else
       {
-        data.setData(after);
-        return put(txn, key, data);
-      }
-    }
-    else
-    {
-      if(deletedIDs != null && !rebuildRunning && trusted)
-      {
-        if(logger.isTraceEnabled())
+        entryIDList.addAll(addedIDs);
+        if(deletedIDs != null)
         {
-          StringBuilder builder = new StringBuilder();
-          StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
-          logger.trace("The expected key does not exist in the index %s.\nKey:%s", name, builder);
+          entryIDList.deleteAll(deletedIDs);
         }
-
-        setTrusted(txn, false);
-        logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
       }
-
-      if((rebuildRunning || trusted) && isNotNullOrEmpty(addedIDs))
-      {
-        data.setData(addedIDs.toDatabase());
-        return insert(txn, key, data);
-      }
-      return OperationStatus.SUCCESS;
     }
+    else if(deletedIDs != null)
+    {
+      entryIDList.deleteAll(deletedIDs);
+    }
+    return entryIDList;
   }
 
   /**
@@ -686,15 +663,7 @@
       }
       else if (trusted && !rebuildRunning)
       {
-        if(logger.isTraceEnabled())
-        {
-          StringBuilder builder = new StringBuilder();
-          StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
-          logger.trace("The expected key does not exist in the index %s.\nKey:%s",name, builder);
-        }
-
-        setTrusted(txn, false);
-        logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
+        logIndexCorruptError(txn, key);
       }
       // Ignore failures if rebuild is running since a empty entryIDset
       // will probably not be rebuilt.
@@ -709,13 +678,10 @@
    * @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 {
+  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);
+       removeIDWithRMW(txn, new DatabaseEntry(key), new DatabaseEntry(), entryID);
     }
     setTrusted(txn, true);
   }
@@ -730,52 +696,54 @@
       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) && !rebuildRunning && trusted)
+      if (!entryIDList.remove(entryID) && trusted && !rebuildRunning)
       {
-        if(logger.isTraceEnabled())
-        {
-          StringBuilder builder = new StringBuilder();
-          StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
-          logger.trace("The expected entry ID does not exist in " +
-                "the entry ID list for index %s.\nKey:%s", name, builder);
-        }
-
-        setTrusted(txn, false);
-        logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
+        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)
+        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
-        {
-          data.setData(after);
-          put(txn, key, data);
-        }
       }
     }
     else if (trusted && !rebuildRunning)
     {
-      if(logger.isTraceEnabled())
-      {
-        StringBuilder builder = new StringBuilder();
-        StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
-        logger.trace("The expected key does not exist in the index %s.\nKey:%s", name, builder);
-      }
-
-      setTrusted(txn, false);
-      logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
+      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);
+    }
+
+    setTrusted(txn, false);
+    logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
+  }
+
   /**
    * Buffered delete of a key from the JE database.
    * @param buffer The index buffer to use to store the deleted keys
@@ -820,8 +788,7 @@
    *         undefined if the key has exceeded the entry limit.
    * @throws DatabaseException If an error occurs in the JE database.
    */
-  public ConditionResult containsID(Transaction txn, DatabaseEntry key,
-                                    EntryID entryID)
+  public ConditionResult containsID(Transaction txn, DatabaseEntry key, EntryID entryID)
        throws DatabaseException
   {
     if(rebuildRunning)
@@ -859,8 +826,7 @@
    * @param lockMode The JE locking mode to be used for the database read.
    * @return The entry IDs indexed by this key.
    */
-  public EntryIDSet readKey(DatabaseEntry key, Transaction txn,
-                            LockMode lockMode)
+  public EntryIDSet readKey(DatabaseEntry key, Transaction txn, LockMode lockMode)
   {
     if(rebuildRunning)
     {
@@ -899,18 +865,12 @@
    * @param txn A database transaction, or null if none is required.
    * @throws DatabaseException If an error occurs in the JE database.
    */
-  public void writeKey(Transaction txn, DatabaseEntry key,
-                       EntryIDSet entryIDList)
+  public void writeKey(Transaction txn, DatabaseEntry key, EntryIDSet entryIDList)
        throws DatabaseException
   {
     DatabaseEntry data = new DatabaseEntry();
     byte[] after = entryIDList.toDatabase();
-    if (after == null)
-    {
-      // No more IDs, so remove the key.
-      delete(txn, key);
-    }
-    else
+    if (after != null)
     {
       if (!entryIDList.isDefined())
       {
@@ -919,6 +879,11 @@
       data.setData(after);
       put(txn, key, data);
     }
+    else
+    {
+      // No more IDs, so remove the key.
+      delete(txn, key);
+    }
   }
 
 
@@ -1109,8 +1074,7 @@
   public boolean addEntry(Transaction txn, EntryID entryID, Entry entry,
       IndexingOptions options) throws DatabaseException, DirectoryException
   {
-    TreeSet<ByteString> addKeys =
-        new TreeSet<ByteString>(indexer.getBSComparator());
+    TreeSet<ByteString> addKeys = new TreeSet<ByteString>(indexer.getBSComparator());
     indexer.indexEntry(entry, addKeys, options);
 
     DatabaseEntry key = new DatabaseEntry();
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
index d94beea..7e735bd 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
@@ -50,10 +50,12 @@
    * The buffered records stored as a map from the record key to the
    * buffered value for that key for each index.
    */
-  private final LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>> bufferedIndexes;
+  private final LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>> bufferedIndexes =
+      new LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>>();
 
   /** The buffered records stored as a set of buffered VLV values for each index. */
-  private final LinkedHashMap<VLVIndex, BufferedVLVValues> bufferedVLVIndexes;
+  private final LinkedHashMap<VLVIndex, BufferedVLVValues> bufferedVLVIndexes =
+      new LinkedHashMap<VLVIndex, BufferedVLVValues>();
 
   /** A simple class representing a pair of added and deleted indexed IDs. */
   static class BufferedIndexValues
@@ -106,7 +108,6 @@
       }
       return false;
     }
-
   }
 
   /** A simple class representing a pair of added and deleted VLV values. */
@@ -168,8 +169,6 @@
    */
   public IndexBuffer(EntryContainer entryContainer)
   {
-    bufferedIndexes = new LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>>();
-    bufferedVLVIndexes = new LinkedHashMap<VLVIndex, BufferedVLVValues>();
     this.entryContainer = entryContainer;
   }
 
@@ -265,17 +264,18 @@
   }
 
   private void updateKeys(Index index, Transaction txn, DatabaseEntry key,
-      NavigableMap<ByteString, BufferedIndexValues> bufferedValues)
+      Map<ByteString, BufferedIndexValues> bufferedValues)
   {
     if (bufferedValues != null)
     {
       final Iterator<Map.Entry<ByteString, BufferedIndexValues>> it = bufferedValues.entrySet().iterator();
       while (it.hasNext())
       {
-        final Map.Entry<ByteString, BufferedIndexValues> bufferedKey = it.next();
-        final BufferedIndexValues values = bufferedKey.getValue();
+        final Map.Entry<ByteString, BufferedIndexValues> entry = it.next();
+        final ByteString bufferedKey = entry.getKey();
+        final BufferedIndexValues values = entry.getValue();
 
-        key.setData(bufferedKey.getKey().toByteArray());
+        key.setData(bufferedKey.toByteArray());
         index.updateKey(txn, key, values.deletedIDs, values.addedIDs);
 
         it.remove();

--
Gitblit v1.10.0