From 4679ffa1ed154b182474d6693af3cab0b6aa31e5 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 02 Dec 2014 14:04:04 +0000
Subject: [PATCH] IndexBuffer.java: In flush(), extracted method updateKeys(). Code cleanup
---
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java | 117 ++++++++++++++++++----------------------------------------
1 files changed, 37 insertions(+), 80 deletions(-)
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
index f88f04a..69255c3 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
@@ -44,32 +44,25 @@
*/
public class IndexBuffer
{
- private EntryContainer entryContainer;
+ private final EntryContainer entryContainer;
/**
* The buffered records stored as a map from the record key to the
* buffered value for that key for each index.
*/
- private LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>> bufferedIndexes;
+ private final LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>> bufferedIndexes;
- /**
- * The buffered records stored as a set of buffered VLV values
- * for each index.
- */
- private LinkedHashMap<VLVIndex, BufferedVLVValues> bufferedVLVIndexes;
+ /** The buffered records stored as a set of buffered VLV values for each index. */
+ private final LinkedHashMap<VLVIndex, BufferedVLVValues> bufferedVLVIndexes;
- /**
- * A simple class representing a pair of added and deleted indexed IDs.
- */
+ /** A simple class representing a pair of added and deleted indexed IDs. */
static class BufferedIndexValues
{
EntryIDSet addedIDs;
EntryIDSet deletedIDs;
}
- /**
- * A simple class representing a pair of added and deleted VLV values.
- */
+ /** A simple class representing a pair of added and deleted VLV values. */
static class BufferedVLVValues
{
TreeSet<SortValues> addedValues;
@@ -84,8 +77,7 @@
*/
public IndexBuffer(EntryContainer entryContainer)
{
- bufferedIndexes =
- new LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>>();
+ bufferedIndexes = new LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>>();
bufferedVLVIndexes = new LinkedHashMap<VLVIndex, BufferedVLVValues>();
this.entryContainer = entryContainer;
}
@@ -108,8 +100,7 @@
* @param index The index affected by the buffered values.
* @param bufferedValues The buffered values for the index.
*/
- public void putBufferedIndex(Index index,
- TreeMap<ByteString, BufferedIndexValues> bufferedValues)
+ public void putBufferedIndex(Index index, TreeMap<ByteString, BufferedIndexValues> bufferedValues)
{
bufferedIndexes.put(index, bufferedValues);
}
@@ -132,8 +123,7 @@
* @param vlvIndex The VLV index affected by the buffered values.
* @param bufferedVLVValues The buffered values for the VLV index.
*/
- public void putBufferedVLVIndex(VLVIndex vlvIndex,
- BufferedVLVValues bufferedVLVValues)
+ public void putBufferedVLVIndex(VLVIndex vlvIndex, BufferedVLVValues bufferedVLVValues)
{
bufferedVLVIndexes.put(vlvIndex, bufferedVLVValues);
}
@@ -146,91 +136,58 @@
* @throws DatabaseException If an error occurs in the JE database.
* @throws DirectoryException If a Directory Server error occurs.
*/
- public void flush(Transaction txn)
- throws DatabaseException, DirectoryException
+ public void flush(Transaction txn) throws DatabaseException, DirectoryException
{
DatabaseEntry key = new DatabaseEntry();
- for(AttributeIndex attributeIndex :
- entryContainer.getAttributeIndexes())
+ for (AttributeIndex attributeIndex : entryContainer.getAttributeIndexes())
{
- for(Index index : attributeIndex.getAllIndexes())
+ for (Index index : attributeIndex.getAllIndexes())
{
- TreeMap<ByteString, BufferedIndexValues> bufferedValues =
- bufferedIndexes.remove(index);
-
- if(bufferedValues != null)
- {
- Iterator<Map.Entry<ByteString, BufferedIndexValues>> keyIterator =
- bufferedValues.entrySet().iterator();
- while(keyIterator.hasNext())
- {
- Map.Entry<ByteString, BufferedIndexValues> bufferedKey =
- keyIterator.next();
- key.setData(bufferedKey.getKey().toByteArray());
-
- index.updateKey(txn, key, bufferedKey.getValue().deletedIDs,
- bufferedKey.getValue().addedIDs);
-
- keyIterator.remove();
- }
- }
+ updateKeys(index, txn, key, bufferedIndexes.remove(index));
}
}
- for(VLVIndex vlvIndex : entryContainer.getVLVIndexes())
+ for (VLVIndex vlvIndex : entryContainer.getVLVIndexes())
{
BufferedVLVValues bufferedVLVValues = bufferedVLVIndexes.remove(vlvIndex);
- if(bufferedVLVValues != null)
+ if (bufferedVLVValues != null)
{
- vlvIndex.updateIndex(txn, bufferedVLVValues.addedValues,
- bufferedVLVValues.deletedValues);
+ vlvIndex.updateIndex(txn, bufferedVLVValues.addedValues, bufferedVLVValues.deletedValues);
}
}
- Index id2children = entryContainer.getID2Children();
- TreeMap<ByteString, BufferedIndexValues> bufferedValues =
- bufferedIndexes.remove(id2children);
+ final Index id2children = entryContainer.getID2Children();
+ updateKeys(id2children, txn, key, bufferedIndexes.remove(id2children));
- if(bufferedValues != null)
- {
- Iterator<Map.Entry<ByteString, BufferedIndexValues>> keyIterator =
- bufferedValues.entrySet().iterator();
- while(keyIterator.hasNext())
- {
- Map.Entry<ByteString, BufferedIndexValues> bufferedKey =
- keyIterator.next();
- key.setData(bufferedKey.getKey().toByteArray());
-
- id2children.updateKey(txn, key, bufferedKey.getValue().deletedIDs,
- bufferedKey.getValue().addedIDs);
-
- keyIterator.remove();
- }
- }
-
- Index id2subtree = entryContainer.getID2Subtree();
- bufferedValues = bufferedIndexes.remove(id2subtree);
-
- if(bufferedValues != null)
+ final Index id2subtree = entryContainer.getID2Subtree();
+ final TreeMap<ByteString, BufferedIndexValues> bufferedValues = bufferedIndexes.remove(id2subtree);
+ if (bufferedValues != null)
{
/*
* OPENDJ-1375: add keys in reverse order to be consistent with single
* entry processing in add/delete processing. This is necessary in order
* to avoid deadlocks.
*/
- Iterator<Map.Entry<ByteString, BufferedIndexValues>> keyIterator =
- bufferedValues.descendingMap().entrySet().iterator();
- while(keyIterator.hasNext())
+ updateKeys(id2subtree, txn, key, bufferedValues.descendingMap());
+ }
+ }
+
+ private void updateKeys(Index index, Transaction txn, DatabaseEntry key,
+ NavigableMap<ByteString, BufferedIndexValues> bufferedValues)
+ {
+ if (bufferedValues != null)
+ {
+ final Iterator<Map.Entry<ByteString, BufferedIndexValues>> it = bufferedValues.entrySet().iterator();
+ while (it.hasNext())
{
- Map.Entry<ByteString, BufferedIndexValues> bufferedKey =
- keyIterator.next();
+ final Map.Entry<ByteString, BufferedIndexValues> bufferedKey = it.next();
+ final BufferedIndexValues values = bufferedKey.getValue();
+
key.setData(bufferedKey.getKey().toByteArray());
+ index.updateKey(txn, key, values.deletedIDs, values.addedIDs);
- id2subtree.updateKey(txn, key, bufferedKey.getValue().deletedIDs,
- bufferedKey.getValue().addedIDs);
-
- keyIterator.remove();
+ it.remove();
}
}
}
--
Gitblit v1.10.0