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