From abe3bce25e7f6ecd0ce8b90a14036d3380739e9e Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Mon, 24 Aug 2009 16:11:46 +0000
Subject: [PATCH] Fix 4183 - ECL (draft mode): first and last ChangeNumber are 0 until first search

---
 opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 4f844d4..46ed7dd 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -212,6 +212,7 @@
   public void put(UpdateMsg update, ServerHandler sourceHandler)
     throws IOException
   {
+
     ChangeNumber cn = update.getChangeNumber();
     short id = cn.getServerId();
     sourceHandler.updateServerState(update);
@@ -3089,8 +3090,8 @@
 
   /**
    * This methods count the changes, server by server :
-   * - from a start point (cn taken from the provided startState)
-   * - to an end point (the provided endCN).
+   * - from a serverState start point
+   * - to (inclusive) an end point (the provided endCN).
    * @param startState The provided start server state.
    * @param endCN The provided end change number.
    * @return The number of changes between startState and endCN.
@@ -3116,12 +3117,14 @@
         try
         {
           ri = h.generateIterator(startState.getMaxChangeNumber(sid));
-          startCN = ri.getChange().getChangeNumber();
+          if (ri.next()==true)
+          {
+            startCN = ri.getChange().getChangeNumber();
+          }
         }
         catch(Exception e)
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          // no change found (purge from CL)
           startCN = null;
         }
         finally
@@ -3136,19 +3139,20 @@
         if (startCN != null)
         {
           // Set on the change related to the endCN
-          ChangeNumber upperCN;
+          ChangeNumber upperCN = null;
           try
           {
             // Build a changenumber for this very server, with the timestamp
             // of the endCN
             ChangeNumber f = new ChangeNumber(endCN.getTime(), 0, sid);
             ri = h.generateIterator(f);
-            upperCN = ri.getChange().getChangeNumber();
+            if (ri.next()==true)
+            {
+              upperCN = ri.getChange().getChangeNumber();
+            }
           }
           catch(Exception e)
           {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-            // no new change
             upperCN = h.getLastChange();
           }
           finally

--
Gitblit v1.10.0