From 4942a89087d560696123c5de7d87ee99c2210c9d Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Tue, 22 Sep 2009 20:56:23 +0000
Subject: [PATCH] Fix for issue 4117: Reordered the access to dn2id such that all moved DNs are removed sequentially then added back. Also fixed a case where an error caused by a corrupted index does not result in the index being put into the untrusted state.
---
opends/src/server/org/opends/server/backends/jeb/Index.java | 71 +++++++++++++++++------------------
1 files changed, 34 insertions(+), 37 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/jeb/Index.java b/opends/src/server/org/opends/server/backends/jeb/Index.java
index 8d52279..17d196c 100644
--- a/opends/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opends/src/server/org/opends/server/backends/jeb/Index.java
@@ -499,21 +499,6 @@
OperationStatus status;
DatabaseEntry data = new DatabaseEntry();
- // Handle cases where nothing is changed early to avoid
- // DB access.
- if(deletedIDs != null && deletedIDs.size() == 0 &&
- (addedIDs == null || addedIDs.size() == 0))
- {
- return;
- }
-
- if(addedIDs != null && addedIDs.size() == 0 &&
- (deletedIDs == null || deletedIDs.size() == 0))
- {
- return;
- }
-
-
if(deletedIDs == null && addedIDs == null)
{
status = delete(txn, key);
@@ -532,6 +517,14 @@
return;
}
+ // Handle cases where nothing is changed early to avoid
+ // DB access.
+ if((deletedIDs == null || deletedIDs.size() == 0) &&
+ (addedIDs == null || addedIDs.size() == 0))
+ {
+ return;
+ }
+
if(maintainCount)
{
for(int i = 0; i < phantomWriteRetires; i++)
@@ -565,18 +558,22 @@
}
else
{
- if(rebuildRunning || trusted)
+ if(deletedIDs != null && !rebuildRunning && trusted)
{
- if(deletedIDs != null)
+ if(debugEnabled())
{
- if(debugEnabled())
- {
- StringBuilder builder = new StringBuilder();
- StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
- TRACER.debugError("The expected key does not exist in the " +
- "index %s.\nKey:%s", name, builder.toString());
- }
+ StringBuilder builder = new StringBuilder();
+ StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
+ TRACER.debugError("The expected key does not exist in the " +
+ "index %s.\nKey:%s", name, builder.toString());
}
+
+ setTrusted(txn, false);
+ }
+
+ if((rebuildRunning || trusted) && addedIDs != null &&
+ addedIDs.size() > 0)
+ {
data.setData(addedIDs.toDatabase());
status = insert(txn, key, data);
@@ -682,25 +679,25 @@
}
else
{
- if(rebuildRunning || trusted)
+ if(deletedIDs != null && !rebuildRunning && trusted)
{
- if(deletedIDs != null)
+ if(debugEnabled())
{
- if(debugEnabled())
- {
- StringBuilder builder = new StringBuilder();
- StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
- TRACER.debugError("The expected key does not exist in the " +
- "index %s.\nKey:%s", name, builder.toString());
- }
+ StringBuilder builder = new StringBuilder();
+ StaticUtils.byteArrayToHexPlusAscii(builder, key.getData(), 4);
+ TRACER.debugError("The expected key does not exist in the " +
+ "index %s.\nKey:%s", name, builder.toString());
}
+
+ setTrusted(txn, false);
+ }
+
+ if((rebuildRunning || trusted) && addedIDs != null && addedIDs.size() > 0)
+ {
data.setData(addedIDs.toDatabase());
return insert(txn, key, data);
}
- else
- {
- return OperationStatus.SUCCESS;
- }
+ return OperationStatus.SUCCESS;
}
}
--
Gitblit v1.10.0