From 54e325583550faebe58840aa6a82395209de4fed Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Tue, 01 Mar 2011 11:57:32 +0000
Subject: [PATCH] Fix for defect OPENDJ-80: Draft change log DB handler thread spins constantly when the draft change log is big The clear method was iterating through all changes regardless the age of changeNumber and the ServerState. Now it'll stop cleaning when reaching the first changeNumber younger.

---
 opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java b/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
index 937086f..5040b47 100644
--- a/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2011 ForgeRock AS
  */
 package org.opends.server.replication.server;
 import static org.opends.messages.ReplicationMessages.*;
@@ -384,21 +385,22 @@
             }
             else
             {
-              // let's get the eligible part of the domain
-              ServerState startSS = domain.getStartState();
-              ServerState endSS= domain.getEligibleState(crossDomainEligibleCN,
-                  true);
+              ServerState startState = domain.getStartState();
+              // We don't use the endState but it's updating CN as reading
+              ServerState endState= domain.getEligibleState(crossDomainEligibleCN,
+                  false);
 
-              ChangeNumber fcn = startSS.getMaxChangeNumber(cn.getServerId());
-              ChangeNumber lcn = endSS.getMaxChangeNumber(cn.getServerId());
+              ChangeNumber fcn = startState.getMaxChangeNumber(cn.getServerId());
 
-              // if the draftCNDb change record, is out of the eligible part
-              //  of the domain, then it can be removed.
-              if (cn.older(fcn)||cn.newer(lcn))
+              if (cn.older(fcn))
               {
                 size++;
                 cursor.delete();
               }
+              else
+              {
+                finished = true;
+              }
             }
           }
         }

--
Gitblit v1.10.0