From 3a3e25cd66f19b89dec18605635c61cb2ff0d2ee Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Fri, 04 Apr 2008 03:31:02 +0000
Subject: [PATCH] Performance improvement for when substring indexes move from defined to undefined.
---
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/IntegerImportIDSet.java | 9 +++++++++
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/LongImportIDSet.java | 9 +++++++++
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/ImportIDSet.java | 5 +++++
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/BufferManager.java | 11 +++++++++--
4 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/BufferManager.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/BufferManager.java
index 1835c05..3af10c5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/BufferManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/BufferManager.java
@@ -147,11 +147,18 @@
KeyHashElement curElem = iter.next();
//Never flush undefined elements.
if(curElem.isDefined()) {
+ int oldSize = curElem.getMemorySize();
Index index = curElem.getIndex();
index.insert(null, new DatabaseEntry(curElem.getKey()),
curElem.getIDSet());
- memoryUsage -= TREEMAP_ENTRY_OVERHEAD + curElem.getMemorySize();
- iter.remove();
+ if(curElem.isDefined()) {
+ memoryUsage -= TREEMAP_ENTRY_OVERHEAD + curElem.getMemorySize();
+ iter.remove();
+ } else {
+ //Went undefined don't remove the element, just substract the
+ //memory size difference.
+ memoryUsage -= (oldSize - curElem.getMemorySize());
+ }
}
} else {
//Wrapped around, start at the first element.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/ImportIDSet.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/ImportIDSet.java
index 63bf8fd..ebdaddc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/ImportIDSet.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/ImportIDSet.java
@@ -80,4 +80,9 @@
*/
public boolean merge(byte[] dbBytes, ImportIDSet bufImportIDSet,
int entryLimit);
+
+ /**
+ * Set the import ID set to the undefined state.
+ */
+ public void setUndefined();
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/IntegerImportIDSet.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/IntegerImportIDSet.java
index 79658a0..37b7db9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/IntegerImportIDSet.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/IntegerImportIDSet.java
@@ -79,6 +79,14 @@
}
+ /**
+ * {@inheritDoc}
+ */
+ public void setUndefined() {
+ array = null;
+ isDefined = false;
+ }
+
/**
* {@inheritDoc}
@@ -110,6 +118,7 @@
isDefined=false;
incrLimitCount=true;
count = 0;
+ importIdSet.setUndefined();
} else {
count = array.length;
addAll((IntegerImportIDSet) importIdSet);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/LongImportIDSet.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/LongImportIDSet.java
index a5a8507..d06bccb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/LongImportIDSet.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/LongImportIDSet.java
@@ -91,6 +91,14 @@
return isDefined;
}
+ /**
+ * {@inheritDoc}
+ */
+ public void setUndefined() {
+ array = null;
+ isDefined = false;
+ }
+
/**
* {@inheritDoc}
@@ -121,6 +129,7 @@
if(array.length + importIdSet.size() > limit) {
isDefined=false;
incrLimitCount=true;
+ importIdSet.setUndefined();
} else {
count = array.length;
addAll((LongImportIDSet) importIdSet);
--
Gitblit v1.10.0