From f7f439300fb47d381b9e14fd5b4a550fba08d2e3 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Thu, 27 May 2010 09:24:42 +0000
Subject: [PATCH] Fix for issue with ECL in cookie mode: when building lastExternalChangelogCookie, we must ignore changes older than the purge date.

---
 opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java |   26 ++++++++++++++++++++++++--
 1 files changed, 24 insertions(+), 2 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 1cefe98..46a9031 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -3119,10 +3119,13 @@
    *
    * The eligibleState is : s1;cn14 / s2;cn26 / s3;cn31
    *
-   * @param eligibleCN The provided eligibleCN.
+   * @param eligibleCN              The provided eligibleCN.
+   * @param allowOlderThanPurgeDate When true, the returned state can be older
+   *                                than the purge date of the domain.
    * @return The computed eligible server state.
    */
-  public ServerState getEligibleState(ChangeNumber eligibleCN)
+  public ServerState getEligibleState(ChangeNumber eligibleCN,
+      boolean allowOlderThanPurgeDate)
   {
     ServerState result = new ServerState();
 
@@ -3188,6 +3191,25 @@
         }
       }
     }
+
+    if (allowOlderThanPurgeDate == false)
+    {
+      boolean domainPurged = true;
+      long latestDomainTrimDate = getLatestDomainTrimDate();
+      Iterator<Integer> it = result.iterator();
+      while (it.hasNext())
+      {
+        int sid = it.next();
+        ChangeNumber cn = result.getMaxChangeNumber(sid);
+        if ((cn.getTime()>0) && (cn.getTime()<latestDomainTrimDate))
+          result.update(new ChangeNumber(0,0,sid));
+        else
+          domainPurged = false;
+      }
+      if (domainPurged == true)
+        result.clear();
+    }
+
     if (debugEnabled())
       TRACER.debugInfo("In " + this
         + " getEligibleState() result is " + result);

--
Gitblit v1.10.0