From f89e2ac235a0284c63cd41368b65ab03fd5daff9 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 16 Dec 2015 14:25:58 +0000
Subject: [PATCH] related to OPENDJ-2517 ExternalChangelog: purge takes twice the delay set when using small delays

---
 opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java |   33 +++++++++++++++++++++++++++++++--
 opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java             |    2 ++
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
index e12c77e..1568b4f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
@@ -44,6 +44,7 @@
 
 import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.config.DurationUnit;
 import org.forgerock.opendj.config.server.ConfigException;
 import org.forgerock.util.Pair;
 import org.forgerock.util.time.TimeService;
@@ -898,6 +899,7 @@
     {
       // initialize CNIndexDB
       getChangeNumberIndexDB();
+      boolean canDisplayNothingToPurgeMsg = true;
       while (!isShutdownInitiated())
       {
         try
@@ -923,7 +925,7 @@
             oldestNotPurgedCSN = localCNIndexDB.purgeUpTo(purgeCSN);
             if (oldestNotPurgedCSN == null)
             { // shutdown may have been initiated...
-              // ... or the change number index DB is empty,
+              // ... or change number index DB determined there is nothing to purge,
               // wait for new changes to come in.
 
               // Note we cannot sleep for as long as the purge delay
@@ -936,6 +938,11 @@
                 {
                   if (!isShutdownInitiated())
                   {
+                    if (canDisplayNothingToPurgeMsg)
+                    {
+                      logger.trace("Nothing to purge, waiting for new changes");
+                      canDisplayNothingToPurgeMsg = false;
+                    }
                     wait(DEFAULT_SLEEP);
                   }
                 }
@@ -958,7 +965,13 @@
             {
               if (!isShutdownInitiated())
               {
-                wait(computeSleepTimeUntilNextPurge(oldestNotPurgedCSN));
+                final long sleepTime = computeSleepTimeUntilNextPurge(oldestNotPurgedCSN);
+                if (logger.isTraceEnabled())
+                {
+                  tracePurgeDetails(purgeCSN, oldestNotPurgedCSN, sleepTime);
+                  canDisplayNothingToPurgeMsg = true;
+                }
+                wait(sleepTime);
               }
             }
           }
@@ -978,6 +991,22 @@
       }
     }
 
+    private void tracePurgeDetails(final CSN purgeCSN, final CSN oldestNotPurgedCSN, final long sleepTime)
+    {
+      if (purgeCSN.equals(oldestNotPurgedCSN.toStringUI()))
+      {
+        logger.trace("Purged up to %s. "
+            + "now sleeping until next purge during %s",
+            purgeCSN.toStringUI(), DurationUnit.toString(sleepTime));
+      }
+      else
+      {
+        logger.trace("Asked to purge up to %s, actually purged up to %s (not included). "
+            + "now sleeping until next purge during %s",
+            purgeCSN.toStringUI(), oldestNotPurgedCSN.toStringUI(), DurationUnit.toString(sleepTime));
+      }
+    }
+
     private long computeSleepTimeUntilNextPurge(CSN notPurgedCSN)
     {
       final long nextPurgeTime = notPurgedCSN.getTime();
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java
index 91c26db..40b2e0b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java
@@ -739,6 +739,8 @@
       {
         return null;
       }
+
+      logger.trace("About to purge log files older than purgeKey %s: %s", purgeKey, logFilesToPurge);
       final List<String> undeletableFiles = new ArrayList<>();
       final Iterator<LogFile<K, V>> entriesToPurge = logFilesToPurge.values().iterator();
       while (entriesToPurge.hasNext())

--
Gitblit v1.10.0