From 5aad2ec830722993dd6377748492aef95bb20324 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.
---
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java | 2 +-
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java | 26 ++++++++++++++++++++++++--
opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java | 5 +++--
opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java | 4 ++--
4 files changed, 30 insertions(+), 7 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 0e1629c..b1a1e84 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
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2009 Sun Microsystems, Inc.
+ * Copyright 2009-2010 Sun Microsystems, Inc.
*/
package org.opends.server.replication.server;
import static org.opends.messages.ReplicationMessages.*;
@@ -386,7 +386,8 @@
{
// let's get the eligible part of the domain
ServerState startSS = domain.getStartState();
- ServerState endSS= domain.getEligibleState(crossDomainEligibleCN);
+ ServerState endSS= domain.getEligibleState(crossDomainEligibleCN,
+ true);
ChangeNumber fcn = startSS.getMaxChangeNumber(cn.getServerId());
ChangeNumber lcn = endSS.getMaxChangeNumber(cn.getServerId());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 279bfa7..c41073b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -738,7 +738,7 @@
if (isPersistent ==
StartECLSessionMsg.PERSISTENT_CHANGES_ONLY)
{
- newDomainCtxt.startState = rsd.getEligibleState(eligibleCN);
+ newDomainCtxt.startState = rsd.getEligibleState(eligibleCN, true);
}
else
{
@@ -781,7 +781,7 @@
}
// Set the stop state for the domain from the eligibleCN
- newDomainCtxt.stopState = rsd.getEligibleState(eligibleCN);
+ newDomainCtxt.stopState = rsd.getEligibleState(eligibleCN, true);
}
newDomainCtxt.currentState = new ServerState();
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 69efdd8..90aeddd 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
@@ -2072,7 +2072,7 @@
continue;
result.update(rsd.getBaseDn(), rsd.getEligibleState(
- getEligibleCN()));
+ getEligibleCN(),false));
}
}
return result;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 1cefe98..46a9031 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opendj-sdk/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