From abd513b18b6271c54c01c42d44453f9c5f241599 Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Wed, 30 Apr 2008 18:31:16 +0000
Subject: [PATCH] Performance changes to import. Mostly for issue 3161.

---
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java |   28 ++++++++++++++++++++--------
 1 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
index 4c8c2ae..76b3af5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
@@ -40,6 +40,7 @@
 import com.sleepycat.je.DatabaseException;
 import com.sleepycat.je.Transaction;
 import com.sleepycat.je.LockMode;
+import com.sleepycat.je.DatabaseEntry;
 
 /**
  * A thread to process import entries from a queue.  Multiple instances of
@@ -77,6 +78,15 @@
   //The substring buffer manager to use.
   private BufferManager bufferMgr;
 
+  //These are used to try and keep memory usage down.
+  private Set<byte[]> insertKeySet = new HashSet<byte[]>();
+  private Set<byte[]> childKeySet = new HashSet<byte[]>();
+  private Set<byte[]> subtreeKeySet = new HashSet<byte[]>();
+  private Set<byte[]> delKeySet = new HashSet<byte[]>();
+  private DatabaseEntry keyData = new DatabaseEntry();
+  private DatabaseEntry data = new DatabaseEntry();
+  ImportIDSet importIDSet = new IntegerImportIDSet();
+
   /**
    * Create a work thread instance using the specified parameters.
    *
@@ -239,7 +249,7 @@
           insert(index, entry, entryID, txn);
         }
         if((index=attributeIndex.getSubstringIndex()) != null) {
-          bufferMgr.insert(index,entry, entryID, txn);
+          bufferMgr.insert(index,entry, entryID, txn, insertKeySet);
         }
         if((index=attributeIndex.getOrderingIndex()) != null) {
           insert(index, entry, entryID, txn);
@@ -271,7 +281,8 @@
     }
     Index id2children = context.getEntryContainer().getID2Children();
     Index id2subtree = context.getEntryContainer().getID2Subtree();
-    bufferMgr.insert(id2children, id2subtree, entry, entryID, txn);
+    bufferMgr.insert(id2children, id2subtree, entry, entryID, txn,
+                    childKeySet, subtreeKeySet);
   }
 
   /**
@@ -288,9 +299,10 @@
   private boolean
   insert(Index index, Entry entry, EntryID entryID,
          Transaction txn) throws DatabaseException {
-    Set<byte[]> keySet = new HashSet<byte[]>();
-    index.indexer.indexEntry(entry, keySet);
-    return index.insert(txn, keySet,  entryID);
+    insertKeySet.clear();
+    index.indexer.indexEntry(entry, insertKeySet);
+    importIDSet.setEntryID(entryID);
+    return index.insert(txn, importIDSet, insertKeySet, keyData, data);
   }
 
   /**
@@ -306,9 +318,9 @@
   private void
   delete(Index index, Entry entry, EntryID entryID,
          Transaction txn) throws DatabaseException {
-    Set<byte[]> keySet = new HashSet<byte[]>();
-    index.indexer.indexEntry(entry, keySet);
-    index.delete(txn, keySet,  entryID);
+    delKeySet.clear();
+    index.indexer.indexEntry(entry, delKeySet);
+    index.delete(txn, delKeySet,  entryID);
   }
 
   /**

--
Gitblit v1.10.0