From cf44474b926f6da103b7a4376fb446d7722ca939 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 05 Dec 2013 15:14:40 +0000
Subject: [PATCH] OPENDJ-1174 Transfer responsibility for populating the ChangeNumberIndexDB to ChangelogDB

---
 opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java |   18 +++++++++++++++++-
 opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDB.java         |    5 ++++-
 opends/src/server/org/opends/server/api/DirectoryThread.java                                 |    1 -
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/api/DirectoryThread.java b/opends/src/server/org/opends/server/api/DirectoryThread.java
index ff3227d..3b7bd5e 100644
--- a/opends/src/server/org/opends/server/api/DirectoryThread.java
+++ b/opends/src/server/org/opends/server/api/DirectoryThread.java
@@ -416,7 +416,6 @@
   public void initiateShutdown()
   {
     setThreadStateIfNotShuttingDown(ThreadState.SHUTTING_DOWN);
-    interrupt();
   }
 
   /**
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 76d47bf..24ca271 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
@@ -347,6 +347,17 @@
 
   /** {@inheritDoc} */
   @Override
+  public void initiateShutdown()
+  {
+    super.initiateShutdown();
+    synchronized (this)
+    {
+      notify();
+    }
+  }
+
+  /** {@inheritDoc} */
+  @Override
   public void run()
   {
     try
@@ -380,6 +391,10 @@
           {
             synchronized (this)
             {
+              if (isShutdownInitiated())
+              {
+                continue;
+              }
               wait();
             }
             // advance cursor, success/failure will be checked later
@@ -400,7 +415,8 @@
             synchronized (this)
             {
               // double check to protect against a missed call to notify()
-              if (!canMoveForwardMediumConsistencyPoint(baseDN))
+              if (!isShutdownInitiated()
+                  && !canMoveForwardMediumConsistencyPoint(baseDN))
               {
                 wait();
                 // loop to check if changes older than the medium consistency
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDB.java b/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDB.java
index 67d2404..f1ce819 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDB.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDB.java
@@ -363,7 +363,10 @@
               }
               catch (InterruptedException e)
               {
-                Thread.currentThread().interrupt();
+                // Do not reset the interrupt flag here,
+                // because otherwise JE will barf next time flush() is called:
+                // JE 5.0.97 refuses to persist changes to the DB when invoked
+                // from a Thread with the interrupt flag set to true.
               }
             }
           }

--
Gitblit v1.10.0