From 44a4880467841860fa188f4bceddd942a74b6179 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 09 Apr 2015 16:34:24 +0000
Subject: [PATCH] Introduced ImportRecord to get rid of IndexOutputBuffer.IndexComparator and its myriad of compare() methods. ImportRecord is composed of a key as a ByteSequence and an indexID being an int.
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java | 60 +++++++++++++++++++++++++-----------------------------------
1 files changed, 25 insertions(+), 35 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
index 0172b6c..145fd99 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
@@ -162,8 +162,6 @@
/** The DN attribute type. */
private static final AttributeType dnType;
- static final IndexOutputBuffer.IndexComparator indexComparator =
- new IndexOutputBuffer.IndexComparator();
/** Phase one buffer count. */
private final AtomicInteger bufferCount = new AtomicInteger(0);
@@ -1991,7 +1989,7 @@
final ByteStringBuilder key = new ByteStringBuilder(BYTE_BUFFER_CAPACITY);
ImportIDSet insertIDSet = null;
ImportIDSet deleteIDSet = null;
- Integer indexID = null;
+ ImportRecord previousRecord = null;
try
{
beginWriteTask();
@@ -2007,17 +2005,17 @@
while (!bufferSet.isEmpty())
{
IndexInputBuffer b = bufferSet.pollFirst();
- if (!b.sameKeyAndIndexID(key, indexID))
+ if (!b.currentRecord().equals(previousRecord))
{
- if (indexID != null)
+ if (previousRecord != null)
{
- // save the previous record
- addToDB(indexID, insertIDSet, deleteIDSet);
+ addToDB(previousRecord.getIndexID(), insertIDSet, deleteIDSet);
}
// this is a new record, reinitialize all
- indexID = b.getIndexID();
+ int indexID = b.getIndexID();
b.fetchKey(key);
+ previousRecord = ImportRecord.from(key, indexID);
insertIDSet = newImportIDSet(key, indexID);
deleteIDSet = newImportIDSet(key, indexID);
@@ -2034,9 +2032,9 @@
}
}
- if (indexID != null)
+ if (previousRecord != null)
{
- addToDB(indexID, insertIDSet, deleteIDSet);
+ addToDB(previousRecord.getIndexID(), insertIDSet, deleteIDSet);
}
}
return null;
@@ -2444,7 +2442,7 @@
else if (!indexBuffer.sameKeyAndIndexID(i))
{
// this is a new record, save previous record ...
- bufferLen += writeRecord(indexBuffer);
+ bufferLen += writeRecord(indexBuffer.currentRecord());
// ... and reinitialize all
indexBuffer.setPosition(i);
resetStreams();
@@ -2454,7 +2452,7 @@
if (numberKeys > 0)
{
// save the last record
- bufferLen += writeRecord(indexBuffer);
+ bufferLen += writeRecord(indexBuffer.currentRecord());
}
return bufferLen;
}
@@ -2478,22 +2476,20 @@
indexSortedSet.add(b);
}
}
- byte[] saveKey = null;
- int saveIndexID = 0;
+ ImportRecord previousRecord = null;
while (!indexSortedSet.isEmpty())
{
final IndexOutputBuffer b = indexSortedSet.pollFirst();
- if (!b.sameKeyAndIndexID(saveKey, saveIndexID))
+ if (!b.currentRecord().equals(previousRecord))
{
- if (saveKey != null)
+ if (previousRecord != null)
{
// save the previous record
- bufferLen += writeRecord(saveKey, saveIndexID);
+ bufferLen += writeRecord(previousRecord);
resetStreams();
}
// this is a new record, reinitialize all
- saveKey = b.getKey();
- saveIndexID = b.getIndexID();
+ previousRecord = b.currentRecord();
}
appendNextEntryIDToStream(b, b.getPosition());
@@ -2504,9 +2500,9 @@
indexSortedSet.add(b);
}
}
- if (saveKey != null)
+ if (previousRecord != null)
{
- bufferLen += writeRecord(saveKey, saveIndexID);
+ bufferLen += writeRecord(previousRecord);
}
return bufferLen;
}
@@ -2570,20 +2566,12 @@
return 2 * INT_SIZE;
}
- private int writeRecord(IndexOutputBuffer b) throws IOException
+ private int writeRecord(ImportRecord record) throws IOException
{
- int keySize = b.getKeySize();
- int headerSize = writeHeader(b.getIndexID(), keySize);
- b.writeKey(bufferStream);
- int bodySize = writeByteStreams();
- return headerSize + keySize + bodySize;
- }
-
- private int writeRecord(byte[] k, int indexID) throws IOException
- {
- int keySize = k.length;
- int headerSize = writeHeader(indexID, keySize);
- bufferStream.write(k);
+ final ByteSequence key = record.getKey();
+ int keySize = key.length();
+ int headerSize = writeHeader(record.getIndexID(), keySize);
+ key.copyTo(bufferStream);
int bodySize = writeByteStreams();
return headerSize + keySize + bodySize;
}
@@ -4039,7 +4027,9 @@
{
int pLen = INT_SIZE;
int len = reader.getInt();
- if (indexComparator.compare(existingDnsBytes, previousPos+pLen, len, dn.getBackingArray(), dn.length()) == 0)
+ ImportRecord r1 = ImportRecord.from(ByteString.wrap(existingDnsBytes, previousPos + pLen, len), 0);
+ ImportRecord r2 = ImportRecord.from(dn, 0);
+ if (r1.equals(r2))
{
return true;
}
--
Gitblit v1.10.0