From f5efc93e858375f6b8e44eb1c04918372ae93f1b Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Wed, 09 Dec 2009 09:24:11 +0000
Subject: [PATCH] Fix #4361 ECL - draft mode: temporary fake lastChangeNumber after thousands of updates

---
 opends/src/server/org/opends/server/replication/server/ECLServerHandler.java |   20 +++++++++-----------
 1 files changed, 9 insertions(+), 11 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 5bb3046..dad999b 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -251,7 +251,7 @@
             boolean isEligible = (newMsg.getChangeNumber().getTime()
                 <= eligibleCN.getTime());
 
-            if (debugEnabled())
+          if (debugEnabled())
               TRACER.debugInfo(" In ECLServerHandler, for " + mh.getServiceId()
                 + " getNextEligibleMessageForDomain(" + opid+ ") "
                 + "newMsg isEligible=" + isEligible + " since "
@@ -568,7 +568,6 @@
   throws DirectoryException
   {
     String crossDomainStartState;
-
     try
     {
       draftCompat = true;
@@ -611,7 +610,7 @@
           // startDraftCN (from the request filter) is present in the draftCnDb
           // Get an iterator to traverse the draftCNDb
           draftCNDbIter =
-            draftCNDb.generateIterator(draftCNDb.getFirstKey());
+            draftCNDb.generateIterator(startDraftCN);
         }
         else
         {
@@ -739,7 +738,10 @@
             newDomainCtxt.startState = startStates.remove(rsd.getBaseDn());
             if ((providedCookie==null)||(providedCookie.length()==0)
                 ||allowUnknownDomains)
-              newDomainCtxt.startState = new ServerState();
+            {
+              if (newDomainCtxt.startState == null)
+                newDomainCtxt.startState = new ServerState();
+            }
             else
               if (newDomainCtxt.startState == null)
                 throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -1121,12 +1123,6 @@
     try
     {
 
-      // Search / no DraftCN / not persistent
-      // -----------------------------------
-      //  init: all domain are candidate
-      //    get one msg from each
-      //       no (null) msg returned: should not happen since we go to a state
-      //       that is computed/expected
       //  getMessage:
       //    get the oldest msg:
       //    after:
@@ -1137,7 +1133,6 @@
       //       get one msg from that domain
       //       no (null) msg returned: should not happen since we go to a state
       //       that is computed/expected
-      //  step 2: send DoneMsg
 
       // Persistent:
       // ----------
@@ -1245,12 +1240,14 @@
                     {
                       // let's traverse the DraftCNdb searching for the change
                       // found in the changelogDb.
+                      if (debugEnabled())
                       TRACER.debugInfo("getNextECLUpdate generating draftCN "
                           + " will skip " + cnFromDraftCNDb
                           + " and read next change from the DraftCNDb.");
 
                       isEndOfDraftCNReached = (draftCNDbIter.next()==false);
 
+                      if (debugEnabled())
                       TRACER.debugInfo("getNextECLUpdate generating draftCN "
                           + " has skiped to "
                           + " sn=" + draftCNDbIter.getDraftCN()
@@ -1290,6 +1287,7 @@
                     // the change from the changelogDb is older
                     // it should have been stored lately
                     // let's continue to traverse the changelogdb
+                    if (debugEnabled())
                     TRACER.debugInfo("getNextECLUpdate: will skip "
                         + cnFromChangelogDb
                         + " and read next from the regular changelog.");

--
Gitblit v1.10.0