From 819f74758a1c464bbf578e70ca8592cc8d101d75 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 02 Apr 2014 09:51:11 +0000
Subject: [PATCH] OPENDJ-1177 (CR-3304) Re-implement changelog purging logic

---
 opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java |   22 ++++++++--------------
 1 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
index 33eaa30..0489065 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
@@ -487,13 +487,6 @@
 
           // OK, the oldest change is older than the medium consistency point
           // let's publish it to the CNIndexDB.
-
-          // Next if statement is ugly but ensures the first change will not be
-          // immediately trimmed from the CNIndexDB. Yuck!
-          if (mediumConsistencyRUV.isEmpty())
-          {
-            mediumConsistencyRUV.replace(baseDN, new ServerState());
-          }
           final String previousCookie = mediumConsistencyRUV.toString();
           final ChangeNumberIndexRecord record =
               new ChangeNumberIndexRecord(previousCookie, baseDN, csn);
@@ -620,20 +613,21 @@
   }
 
   /**
-   * Asks the current thread to clear its state.
+   * Asks the current thread to clear its state and blocks until state is
+   * cleared.
    * <p>
    * This method is only useful for unit tests.
    */
   public void clear()
   {
     doClear.set(true);
-    synchronized (this)
+    while (doClear.get() && !State.TERMINATED.equals(getState()))
     {
-      notify();
-    }
-    while (doClear.get())
-    {
-      // wait until clear() has been done by thread
+      // wait until clear() has been done by thread, always waking it up
+      synchronized (this)
+      {
+        notify();
+      }
       // ensures unit tests wait that this thread's state is cleaned up
       Thread.yield();
     }

--
Gitblit v1.10.0