From 2f13f91c158747ca997a44d8e61830f46b77dd82 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 14 Mar 2014 11:31:24 +0000
Subject: [PATCH] OPENDJ-1308 (CR-3156) Migrate schema support - ByteString - Indexer
---
opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java | 96 +++++++++++++++++++++++------------------------
1 files changed, 47 insertions(+), 49 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
index c575ff2..9b13a57 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
@@ -29,6 +29,7 @@
import java.util.*;
import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ConditionResult;
import org.opends.server.backends.jeb.importLDIF.ImportIDSet;
import org.opends.server.types.DirectoryException;
@@ -61,6 +62,11 @@
private final Comparator<byte[]> comparator;
/**
+ * The comparator for index keys.
+ */
+ private final Comparator<ByteString> bsComparator;
+
+ /**
* The limit on the number of entry IDs that may be indexed by one key.
*/
private int indexEntryLimit;
@@ -106,8 +112,8 @@
* A flag to indicate if a rebuild process is running on this index.
* During the rebuild process, we assume that no entryIDSets are
* accurate and return an undefined set on all read operations.
- * However all write opeations will succeed. The rebuildRunning
- * flag overrides all behaviours of the trusted flag.
+ * However all write operations will succeed. The rebuildRunning
+ * flag overrides all behaviors of the trusted flag.
*/
private boolean rebuildRunning = false;
@@ -126,7 +132,7 @@
* @param cursorEntryLimit The configured limit on the number of entry IDs
* @param maintainCount Whether to maintain a count of IDs for a key once
* the entry limit has exceeded.
- * @param env The JE Environemnt
+ * @param env The JE Environment
* @param entryContainer The database entryContainer holding this index.
* @throws DatabaseException If an error occurs in the JE database.
*/
@@ -139,6 +145,7 @@
super(name, env, entryContainer);
this.indexer = indexer;
this.comparator = indexer.getComparator();
+ this.bsComparator = indexer.getBSComparator();
this.indexEntryLimit = indexEntryLimit;
this.cursorEntryLimit = cursorEntryLimit;
this.maintainCount = maintainCount;
@@ -191,17 +198,17 @@
* count is exceeded. False if it already exists in the entry ID set
* for the given key.
*/
- public boolean insertID(IndexBuffer buffer, byte[] keyBytes,
+ public boolean insertID(IndexBuffer buffer, ByteString keyBytes,
EntryID entryID)
{
- TreeMap<byte[], IndexBuffer.BufferedIndexValues> bufferedOperations =
+ TreeMap<ByteString, IndexBuffer.BufferedIndexValues> bufferedOperations =
buffer.getBufferedIndex(this);
IndexBuffer.BufferedIndexValues values = null;
if(bufferedOperations == null)
{
- bufferedOperations = new TreeMap<byte[],
- IndexBuffer.BufferedIndexValues>(comparator);
+ bufferedOperations =
+ new TreeMap<ByteString, IndexBuffer.BufferedIndexValues>(bsComparator);
buffer.putBufferedIndex(this, bufferedOperations);
}
else
@@ -244,10 +251,8 @@
public boolean insertID(Transaction txn, DatabaseEntry key, EntryID entryID)
throws DatabaseException
{
- OperationStatus status;
DatabaseEntry entryIDData = entryID.getDatabaseEntry();
DatabaseEntry data = new DatabaseEntry();
- boolean success = false;
if(maintainCount)
{
@@ -262,7 +267,7 @@
}
else
{
- status = read(txn, key, data, LockMode.READ_COMMITTED);
+ final OperationStatus status = read(txn, key, data, LockMode.READ_COMMITTED);
if(status == OperationStatus.SUCCESS)
{
EntryIDSet entryIDList =
@@ -284,8 +289,7 @@
{
if(rebuildRunning || trusted)
{
- status = insert(txn, key, entryIDData);
- if(status == OperationStatus.KEYEXIST)
+ if (insert(txn, key, entryIDData) == OperationStatus.KEYEXIST)
{
for(int i = 1; i < phantomWriteRetires; i++)
{
@@ -303,8 +307,7 @@
}
}
}
-
- return success;
+ return false;
}
@@ -705,17 +708,17 @@
* count is exceeded. False if it already exists in the entry ID set
* for the given key.
*/
- public boolean removeID(IndexBuffer buffer, byte[] keyBytes,
+ public boolean removeID(IndexBuffer buffer, ByteString keyBytes,
EntryID entryID)
{
- TreeMap<byte[], IndexBuffer.BufferedIndexValues> bufferedOperations =
+ TreeMap<ByteString, IndexBuffer.BufferedIndexValues> bufferedOperations =
buffer.getBufferedIndex(this);
IndexBuffer.BufferedIndexValues values = null;
if(bufferedOperations == null)
{
- bufferedOperations = new TreeMap<byte[],
- IndexBuffer.BufferedIndexValues>(comparator);
+ bufferedOperations =
+ new TreeMap<ByteString, IndexBuffer.BufferedIndexValues>(bsComparator);
buffer.putBufferedIndex(this, bufferedOperations);
}
else
@@ -878,16 +881,16 @@
* @param buffer The index buffer to use to store the deleted keys
* @param keyBytes The index key bytes.
*/
- public void delete(IndexBuffer buffer, byte[] keyBytes)
+ public void delete(IndexBuffer buffer, ByteString keyBytes)
{
- TreeMap<byte[], IndexBuffer.BufferedIndexValues> bufferedOperations =
+ TreeMap<ByteString, IndexBuffer.BufferedIndexValues> bufferedOperations =
buffer.getBufferedIndex(this);
IndexBuffer.BufferedIndexValues values = null;
if(bufferedOperations == null)
{
- bufferedOperations = new TreeMap<byte[],
- IndexBuffer.BufferedIndexValues>(comparator);
+ bufferedOperations =
+ new TreeMap<ByteString, IndexBuffer.BufferedIndexValues>(bsComparator);
buffer.putBufferedIndex(this, bufferedOperations);
}
else
@@ -1182,19 +1185,17 @@
public boolean addEntry(IndexBuffer buffer, EntryID entryID, Entry entry)
throws DatabaseException, DirectoryException
{
- HashSet<byte[]> addKeys = new HashSet<byte[]>();
- boolean success = true;
-
+ HashSet<ByteString> addKeys = new HashSet<ByteString>();
indexer.indexEntry(entry, addKeys);
- for (byte[] keyBytes : addKeys)
+ boolean success = true;
+ for (ByteString keyBytes : addKeys)
{
if(!insertID(buffer, keyBytes, entryID))
{
success = false;
}
}
-
return success;
}
@@ -1212,21 +1213,20 @@
public boolean addEntry(Transaction txn, EntryID entryID, Entry entry)
throws DatabaseException, DirectoryException
{
- TreeSet<byte[]> addKeys = new TreeSet<byte[]>(indexer.getComparator());
- boolean success = true;
-
+ TreeSet<ByteString> addKeys =
+ new TreeSet<ByteString>(indexer.getBSComparator());
indexer.indexEntry(entry, addKeys);
DatabaseEntry key = new DatabaseEntry();
- for (byte[] keyBytes : addKeys)
+ boolean success = true;
+ for (ByteString keyBytes : addKeys)
{
- key.setData(keyBytes);
+ key.setData(keyBytes.toByteArray());
if(!insertID(txn, key, entryID))
{
success = false;
}
}
-
return success;
}
@@ -1242,11 +1242,10 @@
public void removeEntry(IndexBuffer buffer, EntryID entryID, Entry entry)
throws DatabaseException, DirectoryException
{
- HashSet<byte[]> delKeys = new HashSet<byte[]>();
-
+ HashSet<ByteString> delKeys = new HashSet<ByteString>();
indexer.indexEntry(entry, delKeys);
- for (byte[] keyBytes : delKeys)
+ for (ByteString keyBytes : delKeys)
{
removeID(buffer, keyBytes, entryID);
}
@@ -1264,14 +1263,14 @@
public void removeEntry(Transaction txn, EntryID entryID, Entry entry)
throws DatabaseException, DirectoryException
{
- TreeSet<byte[]> delKeys = new TreeSet<byte[]>(indexer.getComparator());
-
+ TreeSet<ByteString> delKeys =
+ new TreeSet<ByteString>(indexer.getBSComparator());
indexer.indexEntry(entry, delKeys);
DatabaseEntry key = new DatabaseEntry();
- for (byte[] keyBytes : delKeys)
+ for (ByteString keyBytes : delKeys)
{
- key.setData(keyBytes);
+ key.setData(keyBytes.toByteArray());
removeID(txn, key, entryID);
}
}
@@ -1295,15 +1294,14 @@
List<Modification> mods)
throws DatabaseException
{
- TreeMap<byte[], Boolean> modifiedKeys =
- new TreeMap<byte[], Boolean>(indexer.getComparator());
-
+ TreeMap<ByteString, Boolean> modifiedKeys =
+ new TreeMap<ByteString, Boolean>(indexer.getBSComparator());
indexer.modifyEntry(oldEntry, newEntry, mods, modifiedKeys);
DatabaseEntry key = new DatabaseEntry();
- for (Map.Entry<byte[], Boolean> modifiedKey : modifiedKeys.entrySet())
+ for (Map.Entry<ByteString, Boolean> modifiedKey : modifiedKeys.entrySet())
{
- key.setData(modifiedKey.getKey());
+ key.setData(modifiedKey.getKey().toByteArray());
if(modifiedKey.getValue())
{
insertID(txn, key, entryID);
@@ -1333,11 +1331,11 @@
List<Modification> mods)
throws DatabaseException
{
- TreeMap<byte[], Boolean> modifiedKeys =
- new TreeMap<byte[], Boolean>(indexer.getComparator());
-
+ TreeMap<ByteString, Boolean> modifiedKeys =
+ new TreeMap<ByteString, Boolean>(indexer.getBSComparator());
indexer.modifyEntry(oldEntry, newEntry, mods, modifiedKeys);
- for (Map.Entry<byte[], Boolean> modifiedKey : modifiedKeys.entrySet())
+
+ for (Map.Entry<ByteString, Boolean> modifiedKey : modifiedKeys.entrySet())
{
if(modifiedKey.getValue())
{
--
Gitblit v1.10.0