From 680ab44626b229f93b535f4e8e7b64165490a591 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Fri, 21 Jun 2013 17:32:34 +0000
Subject: [PATCH] Fix to OPENDJ-746. CR-1904. We now request IndexOutputBuffer with the space needed, and allocate a specific temp one, if the key is too large to fit in default buffer. Minor code cleanup and clarification in the IndexOutputBuffer class.
---
opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java | 35 ++++++++++++++++++++++-------------
1 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
index 2bf4cdc..efc5095 100644
--- a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
+++ b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
@@ -1782,21 +1782,20 @@
IndexOutputBuffer.ComparatorBuffer<byte[]> comparator,
IndexKey indexKey, boolean insert) throws InterruptedException
{
+ int sizeNeeded = IndexOutputBuffer.getRequiredSize(
+ key.length, entryID.longValue());
IndexOutputBuffer indexBuffer = indexBufferMap.get(indexKey);
if (indexBuffer == null)
{
- indexBuffer = getNewIndexBuffer();
+ indexBuffer = getNewIndexBuffer(sizeNeeded);
indexBufferMap.put(indexKey, indexBuffer);
}
-
- if (!indexBuffer.isSpaceAvailable(key, entryID.longValue()))
+ else if (!indexBuffer.isSpaceAvailable(key, entryID.longValue()))
{
- // TODO Make sure the new indexBuffer has enough space for the
- // key and ID. cf Bug OPENDJ-746
indexBuffer.setComparator(comparator);
indexBuffer.setIndexKey(indexKey);
bufferSortService.submit(new SortTask(indexBuffer));
- indexBuffer = getNewIndexBuffer();
+ indexBuffer = getNewIndexBuffer(sizeNeeded);
indexBufferMap.put(indexKey, indexBuffer);
}
int id = System.identityHashCode(container);
@@ -1804,15 +1803,25 @@
return id;
}
- IndexOutputBuffer getNewIndexBuffer() throws InterruptedException
+ IndexOutputBuffer getNewIndexBuffer(int size)
+ throws InterruptedException
{
- IndexOutputBuffer indexBuffer = freeBufferQueue.take();
- if (indexBuffer == null)
+ IndexOutputBuffer indexBuffer;
+ if (size > bufferSize)
{
- Message message =
- Message.raw(Category.JEB, Severity.SEVERE_ERROR,
- "Index buffer processing error.");
- throw new InterruptedException(message.toString());
+ indexBuffer = new IndexOutputBuffer(size);
+ indexBuffer.setDiscard();
+ }
+ else
+ {
+ indexBuffer = freeBufferQueue.take();
+ if (indexBuffer == null)
+ {
+ Message message =
+ Message.raw(Category.JEB, Severity.SEVERE_ERROR,
+ "Index buffer processing error.");
+ throw new InterruptedException(message.toString());
+ }
}
if (indexBuffer.isPoison())
{
--
Gitblit v1.10.0