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