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

Fabio Pistolesi
04.51.2016 15431da536e99d58dce3dc1bf9c7ab94d1f096a2
OPENDJ-2118 Changelog purge does not seem to work anymore after changelog indexer is disabled

Any change in configuration of the Replication Server is not propagated correctly to FileChangelogDB.
Instead of propagating the configuration, export a ReplicationServer method to FileChangelogDB for needed information.
2 files modified
37 ■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java 13 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java 24 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java
@@ -22,7 +22,7 @@
 *
 *
 *      Copyright 2006-2010 Sun Microsystems, Inc.
 *      Portions Copyright 2011-2015 ForgeRock AS
 *      Portions Copyright 2011-2016 ForgeRock AS.
 */
package org.opends.server.replication.server;
@@ -171,7 +171,7 @@
    this.domainPredicate = predicate;
    enableExternalChangeLog();
    this.changelogDB = new FileChangelogDB(this, cfg);
    this.changelogDB = new FileChangelogDB(this, config.getReplicationDBDirectory());
    replSessionSecurity = new ReplSessionSecurity();
    initialize();
@@ -1329,6 +1329,15 @@
    return dsrsShutdownSync;
  }
  /**
   * Returns whether change-log indexing is enabled for this RS.
   * @return true if change-log indexing is enabled for this RS.
   */
  public boolean isChangeNumberEnabled()
  {
    return config.isComputeChangeNumber();
  }
  /** {@inheritDoc} */
  @Override
  public String toString()
opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
@@ -21,7 +21,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2014-2015 ForgeRock AS
 *      Copyright 2014-2016 ForgeRock AS.
 */
package org.opends.server.replication.server.changelog.file;
@@ -48,7 +48,6 @@
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.util.Pair;
import org.forgerock.util.time.TimeService;
import org.opends.server.admin.std.server.ReplicationServerCfg;
import org.opends.server.api.DirectoryThread;
import org.opends.server.backends.ChangelogBackend;
import org.opends.server.replication.common.CSN;
@@ -97,7 +96,6 @@
  private final ConcurrentSkipListMap<ReplicaId, CopyOnWriteArrayList<ReplicaCursor>> replicaCursors =
      new ConcurrentSkipListMap<>();
  private ReplicationEnvironment replicationEnv;
  private final ReplicationServerCfg config;
  private final File dbDirectory;
  /**
@@ -132,17 +130,16 @@
   *
   * @param replicationServer
   *          the local replication server.
   * @param config
   *          the replication server configuration
   * @param dbDirectoryPath
   *          the path where the changelog files reside.
   * @throws ConfigException
   *           if a problem occurs opening the supplied directory
   */
  public FileChangelogDB(final ReplicationServer replicationServer, final ReplicationServerCfg config)
  public FileChangelogDB(final ReplicationServer replicationServer, String dbDirectoryPath)
      throws ConfigException
  {
    this.config = config;
    this.replicationServer = replicationServer;
    this.dbDirectory = makeDir(config.getReplicationDBDirectory());
    this.dbDirectory = makeDir(dbDirectoryPath);
  }
  private File makeDir(final String dbDirName) throws ConfigException
@@ -289,11 +286,10 @@
  {
    try
    {
      final File dbDir = getFileForPath(config.getReplicationDBDirectory());
      replicationEnv = new ReplicationEnvironment(dbDir.getAbsolutePath(), replicationServer, TimeService.SYSTEM);
      replicationEnv = new ReplicationEnvironment(dbDirectory.getAbsolutePath(), replicationServer, TimeService.SYSTEM);
      final ChangelogState changelogState = replicationEnv.getChangelogState();
      initializeToChangelogState(changelogState);
      if (config.isComputeChangeNumber())
      if (replicationServer.isChangeNumberEnabled())
      {
        startIndexer();
      }
@@ -625,7 +621,7 @@
  void resetChangeNumberIndex(long newFirstCN, DN baseDN, CSN newFirstCSN) throws ChangelogException
  {
    if (!config.isComputeChangeNumber())
    if (!replicationServer.isChangeNumberEnabled())
    {
      throw new ChangelogException(ERR_REPLICATION_CHANGE_NUMBER_DISABLED.get(baseDN));
    }
@@ -908,9 +904,7 @@
          final CSN purgeCSN = new CSN(purgeTimestamp, 0, 0);
          final CSN oldestNotPurgedCSN;
          // next code assumes that the compute-change-number config
          // never changes during the life time of an RS
          if (!config.isComputeChangeNumber())
          if (!replicationServer.isChangeNumberEnabled())
          {
            oldestNotPurgedCSN = purgeCSN;
          }