From 5809e7aa58a31a53d82d2b95fc230fde3b53dae3 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 26 Nov 2014 14:18:23 +0000
Subject: [PATCH] Code cleanup
---
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java | 344 +++++++++++++++++++++------------------------------------
1 files changed, 128 insertions(+), 216 deletions(-)
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
index ab482d8..9fd944d 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
@@ -33,6 +33,7 @@
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ConditionResult;
import org.forgerock.opendj.ldap.spi.IndexingOptions;
+import org.opends.server.backends.jeb.IndexBuffer.BufferedIndexValues;
import org.opends.server.backends.jeb.importLDIF.ImportIDSet;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.Entry;
@@ -41,6 +42,8 @@
import com.sleepycat.je.*;
+import static com.sleepycat.je.OperationStatus.*;
+
import static org.opends.messages.JebMessages.*;
/**
@@ -53,24 +56,16 @@
{
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
- /**
- * The indexer object to construct index keys from LDAP attribute values.
- */
+ /** The indexer object to construct index keys from LDAP attribute values. */
public Indexer indexer;
- /**
- * The comparator for index keys.
- */
+ /** The comparator for index keys. */
private final Comparator<byte[]> comparator;
- /**
- * The comparator for index keys.
- */
+ /** The comparator for index keys. */
private final Comparator<ByteSequence> bsComparator;
- /**
- * The limit on the number of entry IDs that may be indexed by one key.
- */
+ /** The limit on the number of entry IDs that may be indexed by one key. */
private int indexEntryLimit;
/**
@@ -85,16 +80,14 @@
*/
private int entryLimitExceededCount;
- /**
- * The max number of tries to rewrite phantom records.
- */
- final int phantomWriteRetires = 3;
+ /** The max number of tries to rewrite phantom records. */
+ private final int phantomWriteRetries = 3;
/**
* Whether to maintain a count of IDs for a key once the entry limit
* has exceeded.
*/
- boolean maintainCount;
+ private final boolean maintainCount;
private final State state;
@@ -108,7 +101,7 @@
* - no entryIDs will be added to a non-existing key.
* - undefined entryIdSet will be returned whenever a key is not found.
*/
- private boolean trusted = false;
+ private boolean trusted;
/**
* A flag to indicate if a rebuild process is running on this index.
@@ -117,9 +110,9 @@
* However all write operations will succeed. The rebuildRunning
* flag overrides all behaviors of the trusted flag.
*/
- private boolean rebuildRunning = false;
+ private boolean rebuildRunning;
- //Thread local area to store per thread cursors.
+ /** Thread local area to store per thread cursors. */
private final ThreadLocal<Cursor> curLocal = new ThreadLocal<Cursor>();
private final ImportIDSet newImportIDSet;
@@ -200,29 +193,9 @@
* count is exceeded. False if it already exists in the entry ID set
* for the given key.
*/
- public boolean insertID(IndexBuffer buffer, ByteString keyBytes,
- EntryID entryID)
+ public boolean insertID(IndexBuffer buffer, ByteString keyBytes, EntryID entryID)
{
- TreeMap<ByteString, IndexBuffer.BufferedIndexValues> bufferedOperations =
- buffer.getBufferedIndex(this);
- IndexBuffer.BufferedIndexValues values = null;
-
- if(bufferedOperations == null)
- {
- bufferedOperations =
- new TreeMap<ByteString, IndexBuffer.BufferedIndexValues>(bsComparator);
- buffer.putBufferedIndex(this, bufferedOperations);
- }
- else
- {
- values = bufferedOperations.get(keyBytes);
- }
-
- if(values == null)
- {
- values = new IndexBuffer.BufferedIndexValues();
- bufferedOperations.put(keyBytes, values);
- }
+ final BufferedIndexValues values = getBufferedIndexValues(buffer, keyBytes);
if(values.deletedIDs != null && values.deletedIDs.contains(entryID))
{
@@ -234,7 +207,6 @@
{
values.addedIDs = new EntryIDSet(keyBytes, null);
}
-
values.addedIDs.add(entryID);
return true;
}
@@ -258,10 +230,9 @@
if(maintainCount)
{
- for(int i = 0; i < phantomWriteRetires; i++)
+ for (int i = 0; i < phantomWriteRetries; i++)
{
- if(insertIDWithRMW(txn, key, data, entryIDData, entryID) ==
- OperationStatus.SUCCESS)
+ if (insertIDWithRMW(txn, key, data, entryIDData, entryID) == SUCCESS)
{
return true;
}
@@ -272,15 +243,25 @@
final OperationStatus status = read(txn, key, data, LockMode.READ_COMMITTED);
if(status == OperationStatus.SUCCESS)
{
- EntryIDSet entryIDList =
- new EntryIDSet(key.getData(), data.getData());
-
+ EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
if (entryIDList.isDefined())
{
- for(int i = 0; i < phantomWriteRetires; i++)
+ for (int i = 0; i < phantomWriteRetries; i++)
{
- if(insertIDWithRMW(txn, key, data, entryIDData, entryID) ==
- OperationStatus.SUCCESS)
+ if (insertIDWithRMW(txn, key, data, entryIDData, entryID) == SUCCESS)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ else if(rebuildRunning || trusted)
+ {
+ if (insert(txn, key, entryIDData) == OperationStatus.KEYEXIST)
+ {
+ for (int i = 1; i < phantomWriteRetries; i++)
+ {
+ if (insertIDWithRMW(txn, key, data, entryIDData, entryID) == SUCCESS)
{
return true;
}
@@ -289,24 +270,7 @@
}
else
{
- if(rebuildRunning || trusted)
- {
- if (insert(txn, key, entryIDData) == OperationStatus.KEYEXIST)
- {
- for(int i = 1; i < phantomWriteRetires; i++)
- {
- if(insertIDWithRMW(txn, key, data, entryIDData, entryID) ==
- OperationStatus.SUCCESS)
- {
- return true;
- }
- }
- }
- }
- else
- {
- return true;
- }
+ return true;
}
}
return false;
@@ -317,11 +281,11 @@
private void
deleteKey(DatabaseEntry key, ImportIDSet importIdSet,
DatabaseEntry data) throws DatabaseException {
- OperationStatus status = read(null, key, data, LockMode.DEFAULT);
- if(status == OperationStatus.SUCCESS) {
+ final OperationStatus status = read(null, key, data, LockMode.DEFAULT);
+ if(status == SUCCESS) {
newImportIDSet.clear(false);
newImportIDSet.remove(data.getData(), importIdSet);
- if(newImportIDSet.isDefined() && (newImportIDSet.size() == 0))
+ if (newImportIDSet.isDefined() && newImportIDSet.size() == 0)
{
delete(null, key);
}
@@ -340,7 +304,7 @@
private void
insertKey(DatabaseEntry key, ImportIDSet importIdSet,
DatabaseEntry data) throws DatabaseException {
- OperationStatus status = read(null, key, data, LockMode.DEFAULT);
+ final OperationStatus status = read(null, key, data, LockMode.DEFAULT);
if(status == OperationStatus.SUCCESS) {
newImportIDSet.clear(false);
if (newImportIDSet.merge(data.getData(), importIdSet))
@@ -435,9 +399,7 @@
EntryID entryID)
throws DatabaseException
{
- OperationStatus status;
-
- status = read(txn, key, data, LockMode.RMW);
+ final OperationStatus status = read(txn, key, data, LockMode.RMW);
if(status == OperationStatus.SUCCESS)
{
EntryIDSet entryIDList =
@@ -471,16 +433,13 @@
data.setData(after);
return put(txn, key, data);
}
+ else if(rebuildRunning || trusted)
+ {
+ return insert(txn, key, entryIDData);
+ }
else
{
- if(rebuildRunning || trusted)
- {
- return insert(txn, key, entryIDData);
- }
- else
- {
- return OperationStatus.SUCCESS;
- }
+ return OperationStatus.SUCCESS;
}
}
@@ -497,40 +456,31 @@
EntryIDSet deletedIDs, EntryIDSet addedIDs)
throws DatabaseException
{
- OperationStatus status;
DatabaseEntry data = new DatabaseEntry();
if(deletedIDs == null && addedIDs == null)
{
- status = delete(txn, key);
-
- if(status != OperationStatus.SUCCESS)
+ final OperationStatus status = delete(txn, key);
+ if (status != SUCCESS && logger.isTraceEnabled())
{
- if(logger.isTraceEnabled())
- {
- StringBuilder builder = new StringBuilder();
- StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
- logger.trace("The expected key does not exist in the index %s.\nKey:%s ", name, builder);
- }
+ StringBuilder builder = new StringBuilder();
+ StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
+ logger.trace("The expected key does not exist in the index %s.\nKey:%s ", name, builder);
}
-
return;
}
- // Handle cases where nothing is changed early to avoid
- // DB access.
- if((deletedIDs == null || deletedIDs.size() == 0) &&
- (addedIDs == null || addedIDs.size() == 0))
+ // Handle cases where nothing is changed early to avoid DB access.
+ if (isNullOrEmpty(deletedIDs) && isNullOrEmpty(addedIDs))
{
return;
}
if(maintainCount)
{
- for(int i = 0; i < phantomWriteRetires; i++)
+ for (int i = 0; i < phantomWriteRetries; i++)
{
- if(updateKeyWithRMW(txn, key, data, deletedIDs, addedIDs) ==
- OperationStatus.SUCCESS)
+ if (updateKeyWithRMW(txn, key, data, deletedIDs, addedIDs) == SUCCESS)
{
return;
}
@@ -538,18 +488,15 @@
}
else
{
- status = read(txn, key, data, LockMode.READ_COMMITTED);
+ OperationStatus status = read(txn, key, data, LockMode.READ_COMMITTED);
if(status == OperationStatus.SUCCESS)
{
- EntryIDSet entryIDList =
- new EntryIDSet(key.getData(), data.getData());
-
+ EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
if (entryIDList.isDefined())
{
- for(int i = 0; i < phantomWriteRetires; i++)
+ for (int i = 0; i < phantomWriteRetries; i++)
{
- if(updateKeyWithRMW(txn, key, data, deletedIDs, addedIDs) ==
- OperationStatus.SUCCESS)
+ if (updateKeyWithRMW(txn, key, data, deletedIDs, addedIDs) == SUCCESS)
{
return;
}
@@ -571,18 +518,16 @@
logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
}
- if((rebuildRunning || trusted) && addedIDs != null &&
- addedIDs.size() > 0)
+ if ((rebuildRunning || trusted) && isNotNullOrEmpty(addedIDs))
{
data.setData(addedIDs.toDatabase());
status = insert(txn, key, data);
if(status == OperationStatus.KEYEXIST)
{
- for(int i = 1; i < phantomWriteRetires; i++)
+ for (int i = 1; i < phantomWriteRetries; i++)
{
- if(updateKeyWithRMW(txn, key, data, deletedIDs, addedIDs) ==
- OperationStatus.SUCCESS)
+ if (updateKeyWithRMW(txn, key, data, deletedIDs, addedIDs) == SUCCESS)
{
return;
}
@@ -593,6 +538,17 @@
}
}
+ private boolean isNullOrEmpty(EntryIDSet entryIDSet)
+ {
+ return entryIDSet == null || entryIDSet.size() == 0;
+ }
+
+
+ private boolean isNotNullOrEmpty(EntryIDSet entryIDSet)
+ {
+ return entryIDSet != null && entryIDSet.size() > 0;
+ }
+
private OperationStatus updateKeyWithRMW(Transaction txn,
DatabaseEntry key,
DatabaseEntry data,
@@ -600,14 +556,10 @@
EntryIDSet addedIDs)
throws DatabaseException
{
- OperationStatus status;
-
- status = read(txn, key, data, LockMode.RMW);
- if(status == OperationStatus.SUCCESS)
+ final OperationStatus status = read(txn, key, data, LockMode.RMW);
+ if(status == SUCCESS)
{
- EntryIDSet entryIDList =
- new EntryIDSet(key.getData(), data.getData());
-
+ EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
if(addedIDs != null)
{
if(entryIDList.isDefined() && indexEntryLimit > 0)
@@ -691,7 +643,7 @@
logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
}
- if((rebuildRunning || trusted) && addedIDs != null && addedIDs.size() > 0)
+ if((rebuildRunning || trusted) && isNotNullOrEmpty(addedIDs))
{
data.setData(addedIDs.toDatabase());
return insert(txn, key, data);
@@ -713,26 +665,7 @@
public boolean removeID(IndexBuffer buffer, ByteString keyBytes,
EntryID entryID)
{
- TreeMap<ByteString, IndexBuffer.BufferedIndexValues> bufferedOperations =
- buffer.getBufferedIndex(this);
- IndexBuffer.BufferedIndexValues values = null;
-
- if(bufferedOperations == null)
- {
- bufferedOperations =
- new TreeMap<ByteString, IndexBuffer.BufferedIndexValues>(bsComparator);
- buffer.putBufferedIndex(this, bufferedOperations);
- }
- else
- {
- values = bufferedOperations.get(keyBytes);
- }
-
- if(values == null)
- {
- values = new IndexBuffer.BufferedIndexValues();
- bufferedOperations.put(keyBytes, values);
- }
+ BufferedIndexValues values = getBufferedIndexValues(buffer, keyBytes);
if(values.addedIDs != null && values.addedIDs.contains(entryID))
{
@@ -744,7 +677,6 @@
{
values.deletedIDs = new EntryIDSet(keyBytes, null);
}
-
values.deletedIDs.add(entryID);
return true;
}
@@ -760,7 +692,6 @@
public void removeID(Transaction txn, DatabaseEntry key, EntryID entryID)
throws DatabaseException
{
- OperationStatus status;
DatabaseEntry data = new DatabaseEntry();
if(maintainCount)
@@ -769,8 +700,8 @@
}
else
{
- status = read(txn, key, data, LockMode.READ_COMMITTED);
- if(status == OperationStatus.SUCCESS)
+ final OperationStatus status = read(txn, key, data, LockMode.READ_COMMITTED);
+ if(status == SUCCESS)
{
EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
if(entryIDList.isDefined())
@@ -778,23 +709,20 @@
removeIDWithRMW(txn, key, data, entryID);
}
}
- else
+ else if (trusted && !rebuildRunning)
{
- // Ignore failures if rebuild is running since a empty entryIDset
- // will probably not be rebuilt.
- if(trusted && !rebuildRunning)
+ if(logger.isTraceEnabled())
{
- if(logger.isTraceEnabled())
- {
- StringBuilder builder = new StringBuilder();
- StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
- logger.trace("The expected key does not exist in the index %s.\nKey:%s",name, builder);
- }
-
- setTrusted(txn, false);
- logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
+ StringBuilder builder = new StringBuilder();
+ StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
+ logger.trace("The expected key does not exist in the index %s.\nKey:%s",name, builder);
}
+
+ setTrusted(txn, false);
+ logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
}
+ // Ignore failures if rebuild is running since a empty entryIDset
+ // will probably not be rebuilt.
}
}
@@ -821,10 +749,8 @@
DatabaseEntry data, EntryID entryID)
throws DatabaseException
{
- OperationStatus status;
- status = read(txn, key, data, LockMode.RMW);
-
- if (status == OperationStatus.SUCCESS)
+ final OperationStatus status = read(txn, key, data, LockMode.RMW);
+ if (status == SUCCESS)
{
EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
// Ignore failures if rebuild is running since the entry ID is
@@ -859,23 +785,20 @@
}
}
}
- else
+ else if (trusted && !rebuildRunning)
{
- // Ignore failures if rebuild is running since a empty entryIDset
- // will probably not be rebuilt.
- if(trusted && !rebuildRunning)
+ if(logger.isTraceEnabled())
{
- if(logger.isTraceEnabled())
- {
- StringBuilder builder = new StringBuilder();
- StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
- logger.trace("The expected key does not exist in the index %s.\nKey:%s", name, builder);
- }
-
- setTrusted(txn, false);
- logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
+ StringBuilder builder = new StringBuilder();
+ StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
+ logger.trace("The expected key does not exist in the index %s.\nKey:%s", name, builder);
}
+
+ setTrusted(txn, false);
+ logger.error(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD, name);
}
+ // Ignore failures if rebuild is running since a empty entryIDset
+ // will probably not be rebuilt.
}
/**
@@ -885,14 +808,17 @@
*/
public void delete(IndexBuffer buffer, ByteString keyBytes)
{
- TreeMap<ByteString, IndexBuffer.BufferedIndexValues> bufferedOperations =
- buffer.getBufferedIndex(this);
- IndexBuffer.BufferedIndexValues values = null;
+ getBufferedIndexValues(buffer, keyBytes);
+ }
- if(bufferedOperations == null)
+ private BufferedIndexValues getBufferedIndexValues(IndexBuffer buffer, ByteString keyBytes)
+ {
+ TreeMap<ByteString, BufferedIndexValues> bufferedOperations = buffer.getBufferedIndex(this);
+ BufferedIndexValues values = null;
+
+ if (bufferedOperations == null)
{
- bufferedOperations =
- new TreeMap<ByteString, IndexBuffer.BufferedIndexValues>(bsComparator);
+ bufferedOperations = new TreeMap<ByteString, BufferedIndexValues>(bsComparator);
buffer.putBufferedIndex(this, bufferedOperations);
}
else
@@ -900,11 +826,12 @@
values = bufferedOperations.get(keyBytes);
}
- if(values == null)
+ if (values == null)
{
- values = new IndexBuffer.BufferedIndexValues();
+ values = new BufferedIndexValues();
bufferedOperations.put(keyBytes, values);
}
+ return values;
}
/**
@@ -927,31 +854,25 @@
return ConditionResult.UNDEFINED;
}
- OperationStatus status;
- LockMode lockMode = LockMode.DEFAULT;
DatabaseEntry data = new DatabaseEntry();
- status = read(txn, key, data, lockMode);
- if (status == OperationStatus.SUCCESS)
+ OperationStatus status = read(txn, key, data, LockMode.DEFAULT);
+ if (status == SUCCESS)
{
- EntryIDSet entryIDList =
- new EntryIDSet(key.getData(), data.getData());
+ EntryIDSet entryIDList = new EntryIDSet(key.getData(), data.getData());
if (!entryIDList.isDefined())
{
return ConditionResult.UNDEFINED;
}
return ConditionResult.valueOf(entryIDList.contains(entryID));
}
+ else if (trusted)
+ {
+ return ConditionResult.FALSE;
+ }
else
{
- if(trusted)
- {
- return ConditionResult.FALSE;
- }
- else
- {
- return ConditionResult.UNDEFINED;
- }
+ return ConditionResult.UNDEFINED;
}
}
@@ -973,10 +894,9 @@
try
{
- OperationStatus status;
DatabaseEntry data = new DatabaseEntry();
- status = read( txn, key, data, lockMode);
- if (status != OperationStatus.SUCCESS)
+ OperationStatus status = read( txn, key, data, lockMode);
+ if (status != SUCCESS)
{
if(trusted)
{
@@ -1071,13 +991,10 @@
ArrayList<EntryIDSet> lists = new ArrayList<EntryIDSet>();
- OperationStatus status;
- Cursor cursor;
-
- cursor = openCursor(null, CursorConfig.READ_COMMITTED);
-
+ Cursor cursor = openCursor(null, CursorConfig.READ_COMMITTED);
try
{
+ OperationStatus status;
// Set the lower bound if necessary.
if(lower.length > 0)
{
@@ -1087,7 +1004,7 @@
status = cursor.getSearchKeyRange(key, data, lockMode);
// Advance past the lower bound if necessary.
- if (status == OperationStatus.SUCCESS && !lowerIncluded &&
+ if (status == SUCCESS && !lowerIncluded &&
comparator.compare(key.getData(), lower) == 0)
{
// Do not include the lower value.
@@ -1113,7 +1030,7 @@
if(upper.length > 0)
{
int cmp = comparator.compare(key.getData(), upper);
- if ((cmp > 0) || (cmp == 0 && !upperIncluded))
+ if (cmp > 0 || (cmp == 0 && !upperIncluded))
{
break;
}
@@ -1364,14 +1281,9 @@
*/
public boolean setIndexEntryLimit(int indexEntryLimit)
{
- boolean rebuildRequired = false;
- if(this.indexEntryLimit < indexEntryLimit &&
- entryLimitExceededCount > 0 )
- {
- rebuildRequired = true;
- }
+ final boolean rebuildRequired =
+ this.indexEntryLimit < indexEntryLimit && entryLimitExceededCount > 0;
this.indexEntryLimit = indexEntryLimit;
-
return rebuildRequired;
}
--
Gitblit v1.10.0