From f5efc93e858375f6b8e44eb1c04918372ae93f1b Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Wed, 09 Dec 2009 09:24:11 +0000
Subject: [PATCH] Fix #4361 ECL - draft mode: temporary fake lastChangeNumber after thousands of updates
---
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java | 20 +++++++++-----------
1 files changed, 9 insertions(+), 11 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 5bb3046..dad999b 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -251,7 +251,7 @@
boolean isEligible = (newMsg.getChangeNumber().getTime()
<= eligibleCN.getTime());
- if (debugEnabled())
+ if (debugEnabled())
TRACER.debugInfo(" In ECLServerHandler, for " + mh.getServiceId()
+ " getNextEligibleMessageForDomain(" + opid+ ") "
+ "newMsg isEligible=" + isEligible + " since "
@@ -568,7 +568,6 @@
throws DirectoryException
{
String crossDomainStartState;
-
try
{
draftCompat = true;
@@ -611,7 +610,7 @@
// startDraftCN (from the request filter) is present in the draftCnDb
// Get an iterator to traverse the draftCNDb
draftCNDbIter =
- draftCNDb.generateIterator(draftCNDb.getFirstKey());
+ draftCNDb.generateIterator(startDraftCN);
}
else
{
@@ -739,7 +738,10 @@
newDomainCtxt.startState = startStates.remove(rsd.getBaseDn());
if ((providedCookie==null)||(providedCookie.length()==0)
||allowUnknownDomains)
- newDomainCtxt.startState = new ServerState();
+ {
+ if (newDomainCtxt.startState == null)
+ newDomainCtxt.startState = new ServerState();
+ }
else
if (newDomainCtxt.startState == null)
throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -1121,12 +1123,6 @@
try
{
- // Search / no DraftCN / not persistent
- // -----------------------------------
- // init: all domain are candidate
- // get one msg from each
- // no (null) msg returned: should not happen since we go to a state
- // that is computed/expected
// getMessage:
// get the oldest msg:
// after:
@@ -1137,7 +1133,6 @@
// get one msg from that domain
// no (null) msg returned: should not happen since we go to a state
// that is computed/expected
- // step 2: send DoneMsg
// Persistent:
// ----------
@@ -1245,12 +1240,14 @@
{
// let's traverse the DraftCNdb searching for the change
// found in the changelogDb.
+ if (debugEnabled())
TRACER.debugInfo("getNextECLUpdate generating draftCN "
+ " will skip " + cnFromDraftCNDb
+ " and read next change from the DraftCNDb.");
isEndOfDraftCNReached = (draftCNDbIter.next()==false);
+ if (debugEnabled())
TRACER.debugInfo("getNextECLUpdate generating draftCN "
+ " has skiped to "
+ " sn=" + draftCNDbIter.getDraftCN()
@@ -1290,6 +1287,7 @@
// the change from the changelogDb is older
// it should have been stored lately
// let's continue to traverse the changelogdb
+ if (debugEnabled())
TRACER.debugInfo("getNextECLUpdate: will skip "
+ cnFromChangelogDb
+ " and read next from the regular changelog.");
--
Gitblit v1.10.0