mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noël Rouvignac
14.11.2015 f89e2ac235a0284c63cd41368b65ab03fd5daff9
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();
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())