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/ChangeNumberIndexer.java |   35 +++++++++++------------------------
 1 files changed, 11 insertions(+), 24 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 eee6fe4..d70e7a1 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
@@ -25,11 +25,6 @@
  */
 package org.opends.server.replication.server.changelog.je;
 
-import static org.opends.messages.ReplicationMessages.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.replication.server.changelog.api.DBCursor.PositionStrategy.*;
-import static org.opends.server.util.StaticUtils.*;
-
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentSkipListSet;
@@ -50,6 +45,11 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 
+import static org.opends.messages.ReplicationMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.replication.server.changelog.api.DBCursor.PositionStrategy.*;
+import static org.opends.server.util.StaticUtils.*;
+
 /**
  * Thread responsible for inserting replicated changes into the ChangeNumber
  * Index DB (CNIndexDB for short). Only changes older than the medium
@@ -430,26 +430,13 @@
       {
         try
         {
-          if (!domainsToClear.isEmpty())
+          while (!domainsToClear.isEmpty())
           {
-            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();
-            }
+            final DN baseDNToClear = domainsToClear.first();
+            nextChangeForInsertDBCursor.removeDomain(baseDNToClear);
+            // Only release the waiting thread
+            // once this domain's state has been cleared.
+            domainsToClear.remove(baseDNToClear);
           }
 
           // Do not call DBCursor.next() here

--
Gitblit v1.10.0