From 25bd113aca0224d16369621fbfb68e0f639c4162 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 13 Nov 2013 13:16:10 +0000
Subject: [PATCH] Complement of r9789
---
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java | 24 ++++++++++++++----------
1 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 98bc563..d60dab0 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -795,8 +795,7 @@
}
else
{
- // let's take the start state for this domain from the provided
- // cookie
+ // let's take the start state for this domain from the provided cookie
newDomainCtxt.startState =
startStatesFromProvidedCookie.remove(domain.getBaseDN());
@@ -867,6 +866,7 @@
*/
if (!startStatesFromProvidedCookie.isEmpty() && allowUnknownDomains)
{
+ // JNR: Will the following code trigger a ConcurrentModificationException?
for (DN providedDomain : startStatesFromProvidedCookie.keySet())
if (rs.getReplicationServerDomain(providedDomain) == null)
// the domain provided in the cookie is not replicated
@@ -1039,17 +1039,16 @@
isPersistent = startECLSessionMsg.isPersistent();
lastChangeNumber = startECLSessionMsg.getLastChangeNumber();
searchPhase = INIT_PHASE;
+ final String cookie = startECLSessionMsg.getCrossDomainServerState();
try
{
- previousCookie = new MultiDomainServerState(
- startECLSessionMsg.getCrossDomainServerState());
+ previousCookie = new MultiDomainServerState(cookie);
}
catch(Exception e)
{
TRACER.debugCaught(DebugLogLevel.ERROR, e);
- throw new DirectoryException(
- ResultCode.PROTOCOL_ERROR,
- ERR_INVALID_COOKIE_SYNTAX.get());
+ throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
+ ERR_INVALID_COOKIE_SYNTAX.get(cookie));
}
excludedBaseDNs = startECLSessionMsg.getExcludedBaseDNs();
@@ -1236,9 +1235,7 @@
oldestContext.currentState.update(change.getUpdateMsg().getCSN());
if (oldestContext.currentState.cover(oldestContext.stopState)
- || (draftCompat
- && lastChangeNumber > 0
- && change.getChangeNumber() > lastChangeNumber))
+ || isBeyondLastRequestedChangeNumber(change))
{
oldestContext.active = false;
}
@@ -1298,6 +1295,13 @@
return oldestChange;
}
+ private boolean isBeyondLastRequestedChangeNumber(final ECLUpdateMsg change)
+ {
+ return draftCompat
+ && 0 < lastChangeNumber
+ && lastChangeNumber < change.getChangeNumber();
+ }
+
private ECLUpdateMsg newECLUpdateMsg(DomainContext ctx)
{
// cookie will be set later AND changeNumber may be set later
--
Gitblit v1.10.0