From 919ad22e29ed2229d4af6092f5e0ddecdeac779e Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 12 Mar 2015 15:00:22 +0000
Subject: [PATCH] Get rid of too much ByteBuffer to ByteString conversions.

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java
index 6e2faa2..365dcf1 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexOutputBuffer.java
@@ -31,9 +31,9 @@
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
-import java.nio.ByteBuffer;
 
 import org.forgerock.opendj.ldap.ByteSequence;
+import org.forgerock.opendj.ldap.ByteStringBuilder;
 
 /**
  * This class represents a index buffer used to store the keys and entry IDs
@@ -114,7 +114,7 @@
    * This buffer is reused during key compares. It's main purpose is to keep
    * memory footprint as small as possible.
    */
-  private ByteBuffer keyBuffer = ByteBuffer.allocate(CAP);
+  private ByteStringBuilder keyBuffer = new ByteStringBuilder(CAP);
 
   /**
    * Set to {@code true} if the buffer should not be recycled. Used when the
@@ -361,19 +361,13 @@
   }
 
   /** Used to minimized memory usage when comparing keys. */
-  private ByteBuffer getKeyBuf(int position)
+  private ByteStringBuilder getKeyBuf(int position)
   {
     keyBuffer.clear();
     int offSet = getOffset(position) + REC_OVERHEAD + LONG_SIZE;
     int keyLen = readInt(buffer, offSet);
     offSet += INT_SIZE;
-    //Re-allocate if the key is bigger than the capacity.
-    if(keyLen > keyBuffer.capacity())
-    {
-      keyBuffer = ByteBuffer.allocate(keyLen);
-    }
-    keyBuffer.put(buffer, offSet, keyLen);
-    keyBuffer.flip();
+    keyBuffer.append(buffer, offSet, keyLen);
     return keyBuffer;
   }
 
@@ -479,14 +473,14 @@
   @Override
   public int compareTo(IndexOutputBuffer b)
   {
-    final ByteBuffer keyBuf = b.getKeyBuf(b.position);
+    final ByteStringBuilder keyBuf = b.getKeyBuf(b.position);
     int offset = getOffset(position);
     int indexID = getIndexIDFromOffset(offset);
     offset += REC_OVERHEAD + LONG_SIZE;
     int keyLen = readInt(buffer, offset);
     int key = INT_SIZE + offset;
 
-    int cmp = indexComparator.compare(buffer, key, keyLen, keyBuf.array(), keyBuf.limit());
+    int cmp = indexComparator.compare(buffer, key, keyLen, keyBuf.getBackingArray(), keyBuf.length());
     if (cmp == 0)
     {
       cmp = compareInts(indexID, b.getIndexID());
@@ -751,6 +745,11 @@
       return cmp;
     }
 
+    int compare(ByteStringBuilder key1, ByteStringBuilder key2)
+    {
+      return compare(key1.getBackingArray(), 0, key1.length(), key2.getBackingArray(), key2.length());
+    }
+
     /**
      * Compare an offset in an byte array with the specified byte array,
      * using the DN compare algorithm.

--
Gitblit v1.10.0