From acfcc9e05552e3d2fe37f8d9b8ac0827a204ee3a Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 21 Jul 2014 12:53:41 +0000
Subject: [PATCH] OPENDJ-1441 (CR-4037) 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/ChangeNumberIndexer.java |   25 +++++++++++++++++++------
 1 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
index 68b9688..8a9390d 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
@@ -425,13 +425,26 @@
       {
         try
         {
-          while (!domainsToClear.isEmpty())
+          if (!domainsToClear.isEmpty())
           {
-            final DN baseDNToClear = domainsToClear.first();
-            nextChangeForInsertDBCursor.removeDomain(baseDNToClear);
-            // Only release the waiting thread
-            // once this domain's state has been cleared.
-            domainsToClear.remove(baseDNToClear);
+            final DN cursorData = nextChangeForInsertDBCursor.getData();
+            final boolean callNextOnCursor =
+                cursorData != null && domainsToClear.contains(cursorData);
+            while (!domainsToClear.isEmpty())
+            {
+              final DN baseDNToClear = domainsToClear.first();
+              nextChangeForInsertDBCursor.removeDomain(baseDNToClear);
+              // Only release the waiting thread
+              // once this domain's state has been cleared.
+              domainsToClear.remove(baseDNToClear);
+            }
+
+            if (callNextOnCursor)
+            {
+              // The next change to consume comes from a domain to be removed.
+              // Call DBCursor.next() to ensure this domain is removed
+              nextChangeForInsertDBCursor.next();
+            }
           }
 
           // Do not call DBCursor.next() here

--
Gitblit v1.10.0