From 5c87cce021cba14003f8371f8e496aefe68724bc Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 09 Jun 2011 21:24:05 +0000
Subject: [PATCH] Fix issue OPENDJ-67: Investigate ECL change number consistency across replications servers which have been subjected to different purging policies.

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 5c96d23..437c634 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -1860,6 +1860,7 @@
 
     int firstDraftCN;
     int lastDraftCN;
+    Boolean dbEmpty = false;
     Long newestDate = 0L;
     DraftCNDbHandler draftCNDbH = this.getDraftCNDbHandler();
 
@@ -1870,6 +1871,7 @@
     String domainForLastSeqnum = null;
     if (firstDraftCN < 1)
     {
+      dbEmpty = true;
       firstDraftCN = 0;
       lastDraftCN = 0;
     }
@@ -1912,8 +1914,11 @@
         if (domainsServerStateForLastSeqnum == null)
         {
           // Count changes of this domain from the beginning of the changelog
+          ChangeNumber trimCN =
+              new ChangeNumber(rsd.getLatestDomainTrimDate(), 0,0);
           ec = rsd.getEligibleCount(
-              new ServerState(), crossDomainEligibleCN);
+                    rsd.getStartState().duplicateOnlyOlderThan(trimCN),
+                    crossDomainEligibleCN);
         }
         else
         {
@@ -1947,6 +1952,13 @@
           firstDraftCN = 1;
       }
     }
+    if (dbEmpty)
+    {
+      // The database was empty, just keep increasing numbers since last time
+      // we generated one DraftCN.
+      firstDraftCN += lastGeneratedDraftCN;
+      lastDraftCN += lastGeneratedDraftCN;
+    }
     return new int[]{firstDraftCN, lastDraftCN};
   }
 

--
Gitblit v1.10.0