From 891159050af4aa3fe47c67e3ba7d3f21299027a4 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 02 Dec 2013 14:01:32 +0000
Subject: [PATCH] OPENDJ-1174 (CR-2631) Transfer responsibility for populating the ChangeNumberIndexDB to ChangelogDB

---
 opends/src/server/org/opends/server/replication/server/ECLServerHandler.java |   41 +++++++++++------------------------------
 1 files changed, 11 insertions(+), 30 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 3c3aba9..ce4b927 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -841,8 +841,8 @@
       domain.registerHandler(mh);
       newDomainCtxt.mh = mh;
 
-      previousCookie.update(newDomainCtxt.rsDomain.getBaseDN(),
-                            newDomainCtxt.startState.duplicate());
+      previousCookie.replace(newDomainCtxt.rsDomain.getBaseDN(),
+                             newDomainCtxt.startState.duplicate());
 
       results.add(newDomainCtxt);
     }
@@ -1260,13 +1260,9 @@
         final DomainContext oldestContext = findDomainCtxtWithOldestChange();
         if (oldestContext != null)
         {
-          final ECLUpdateMsg change = newECLUpdateMsg(oldestContext);
-          oldestContext.currentState.update(change.getUpdateMsg().getCSN());
-          if (draftCompat)
-          {
-            assignNewChangeNumberAndStore(change);
-          }
-          oldestChange = change;
+          oldestChange = newECLUpdateMsg(oldestContext);
+          oldestContext.currentState.update(
+              oldestChange.getUpdateMsg().getCSN());
         }
       }
     }
@@ -1326,7 +1322,7 @@
    *           if a database problem occurs.
    */
   private boolean assignChangeNumber(final ECLUpdateMsg replicaDBChange)
-      throws ChangelogException
+      throws ChangelogException, DirectoryException
   {
     // We also need to check if the CNIndexDB is consistent with the replicaDBs.
     // If not, 2 potential reasons:
@@ -1337,15 +1333,8 @@
     CSN csnFromReplicaDB = replicaDBChange.getUpdateMsg().getCSN();
     DN baseDNFromReplicaDB = replicaDBChange.getBaseDN();
 
-    while (true)
+    while (!isEndOfCNIndexDBReached)
     {
-      if (isEndOfCNIndexDBReached)
-      {
-        // we are at the end of the CNIndexDB in the append mode
-        assignNewChangeNumberAndStore(replicaDBChange);
-        return true;
-      }
-
       final ChangeNumberIndexRecord currentRecord = cnIndexDBCursor.getRecord();
       final CSN csnFromCNIndexDB = currentRecord.getCSN();
       final DN baseDNFromCNIndexDB = currentRecord.getBaseDN();
@@ -1366,6 +1355,9 @@
               + currentRecord.getChangeNumber() + " to change="
               + replicaDBChange);
 
+        previousCookie =
+            new MultiDomainServerState(currentRecord.getPreviousCookie());
+        replicaDBChange.setCookie(previousCookie);
         replicaDBChange.setChangeNumber(currentRecord.getChangeNumber());
         return true;
       }
@@ -1411,6 +1403,7 @@
         // continuously throws ChangelogExceptions
       }
     }
+    return false;
   }
 
   private Date asDate(CSN csn)
@@ -1425,18 +1418,6 @@
     return sameDN && sameCSN;
   }
 
-  private void assignNewChangeNumberAndStore(ECLUpdateMsg change)
-      throws ChangelogException
-  {
-    final ChangeNumberIndexRecord record =
-        new ChangeNumberIndexRecord(previousCookie.toString(),
-            change.getBaseDN(), change.getUpdateMsg().getCSN());
-    // store in CNIndexDB the pair
-    // (change number of the current change, state before this change)
-    change.setChangeNumber(
-        replicationServer.getChangeNumberIndexDB().addRecord(record));
-  }
-
   /**
    * Terminates the first (non persistent) phase of the search on the ECL.
    */

--
Gitblit v1.10.0