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