From bfef6b181cc5271d8f706c576f2bcd29d3345bf9 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Mon, 30 May 2011 15:20:19 +0000
Subject: [PATCH] Resolve several issues with the External Changelog with regards to Cookies and changes with updates and purging. More specifically these changes are resolving the following issues : OPENDJ-57 - ECL: lastChangeNumber and firstChangeNumber reset to zero when the changelog is purged to empty OPENDJ-172 - External ChangeLog Cookie varies when searching with an empty cookie. Cookie should be reproducible. OPENDJ-173 - External ChangeLog cookies content is altered by Change purging and prevents from continuing search with a previous returned cookie.

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
index dcf15e6..ef4df7c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
@@ -389,18 +389,22 @@
 
               // We don't use the returned endState but it's updating CN as
               // reading
-              domain.getEligibleState(crossDomainEligibleCN, false);
+              domain.getEligibleState(crossDomainEligibleCN);
 
               ChangeNumber fcn = startState.getMaxChangeNumber(
                   cn.getServerId());
 
-              if (cn.older(fcn))
+              int currentKey = cursor.currentKey();
+              // Do not delete the lastKey. This should allow us to
+              // preserve last change number over time.
+              if ((currentKey != lastkey) && (cn.older(fcn)))
               {
                 size++;
                 cursor.delete();
               }
               else
               {
+                firstkey = currentKey;
                 finished = true;
               }
             }

--
Gitblit v1.10.0