From 355365ea3f95fdfec5cac95588044b91354096c8 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 19 Aug 2014 11:11:46 +0000
Subject: [PATCH] OPENDJ-1441 (CR-4303) Persistent searches on external changelog do not return changes for new replicas and new domains
---
opends/src/server/org/opends/server/replication/server/changelog/je/CompositeDBCursor.java | 45 ++++++++++++++++++++++-----------------------
1 files changed, 22 insertions(+), 23 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/CompositeDBCursor.java b/opends/src/server/org/opends/server/replication/server/changelog/je/CompositeDBCursor.java
index ae54930..748619c 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/CompositeDBCursor.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/CompositeDBCursor.java
@@ -107,7 +107,6 @@
addCursor(cursorToAdvance.getKey(), cursorToAdvance.getValue());
}
- removeNoLongerNeededCursors();
incorporateNewCursors();
return !cursors.isEmpty();
}
@@ -127,31 +126,31 @@
}
}
- private void removeNoLongerNeededCursors()
+ /**
+ * Removes the cursor matching the provided data.
+ *
+ * @param dataToFind
+ * the data for which the cursor must be found and removed
+ */
+ protected void removeCursor(final Data dataToFind)
{
- for (final Iterator<Data> iter = removedCursorsIterator(); iter.hasNext();)
- {
- final Data dataToFind = iter.next();
- for (Iterator<Entry<DBCursor<UpdateMsg>, Data>> cursorIter =
- cursors.entrySet().iterator(); cursorIter.hasNext();)
- {
- final Entry<DBCursor<UpdateMsg>, Data> entry = cursorIter.next();
- if (dataToFind.equals(entry.getValue()))
- {
- entry.getKey().close();
- cursorIter.remove();
- }
- }
- iter.remove();
- }
+ removeCursor(this.cursors, dataToFind);
+ removeCursor(this.exhaustedCursors, dataToFind);
}
- /**
- * Returns an Iterator over the data associated to cursors that must be removed.
- *
- * @return an Iterator over the data associated to cursors that must be removed.
- */
- protected abstract Iterator<Data> removedCursorsIterator();
+ private void removeCursor(Map<DBCursor<UpdateMsg>, Data> cursors, Data dataToFind)
+ {
+ for (Iterator<Entry<DBCursor<UpdateMsg>, Data>> cursorIter =
+ cursors.entrySet().iterator(); cursorIter.hasNext();)
+ {
+ final Entry<DBCursor<UpdateMsg>, Data> entry = cursorIter.next();
+ if (dataToFind.equals(entry.getValue()))
+ {
+ entry.getKey().close();
+ cursorIter.remove();
+ }
+ }
+ }
/**
* Adds a cursor to this composite cursor. It first calls
--
Gitblit v1.10.0