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