From 7491660c4613e270d1d67505ebf03a5d56fb830b Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 23 Jul 2014 15:15:22 +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 |   22 +++++++++++++---------
 1 files changed, 13 insertions(+), 9 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 36b3d5b..eae5638 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
@@ -343,13 +343,12 @@
         {
           /*
            * initialize with the oldest possible CSN in order for medium
-           * consistency to wait for all replicas to be alive before moving
-           * forward
+           * consistency to wait for all replicas to be alive before moving forward
            */
           lastAliveCSNs.update(baseDN, oldestPossibleCSN(serverId));
         }
 
-        ServerState latestKnownState = domainDB.getDomainNewestCSNs(baseDN);
+        final ServerState latestKnownState = domainDB.getDomainNewestCSNs(baseDN);
         lastAliveCSNs.update(baseDN, latestKnownState);
       }
     }
@@ -360,14 +359,20 @@
     if (newestRecord != null)
     {
       // restore the "previousCookie" state before shutdown
-      final UpdateMsg record = nextChangeForInsertDBCursor.getRecord();
+      UpdateMsg record = nextChangeForInsertDBCursor.getRecord();
+      if (record instanceof ReplicaOfflineMsg)
+      {
+        // ignore: replica offline messages are never stored in the CNIndexDB
+        nextChangeForInsertDBCursor.next();
+        record = nextChangeForInsertDBCursor.getRecord();
+      }
+
       // sanity check: ensure that when initializing the cursors at the previous
       // cookie, the next change we find is the newest record in the CNIndexDB
       if (!record.getCSN().equals(newestRecord.getCSN()))
       {
-        throw new ChangelogException(
-            ERR_CHANGE_NUMBER_INDEXER_INCONSISTENT_CSN_READ.get(newestRecord
-                .getCSN().toStringUI(), record.getCSN().toStringUI()));
+        throw new ChangelogException(ERR_CHANGE_NUMBER_INDEXER_INCONSISTENT_CSN_READ.get(
+            newestRecord.getCSN().toStringUI(), record.getCSN().toStringUI()));
       }
       // Now we can update the mediumConsistencyRUV
       mediumConsistencyRUV.update(newestRecord.getBaseDN(), record.getCSN());
@@ -417,8 +422,7 @@
     {
       /*
        * initialize here to allow fast application start up and avoid errors due
-       * cursors being created in a different thread to the one where they are
-       * used.
+       * cursors being created in a different thread to the one where they are used.
        */
       initialize();
 

--
Gitblit v1.10.0