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

Jean-Noel Rouvignac
23.19.2014 137d1b4ba1992acdd880b61b1a03dc31f0cc1839
opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDB.java
@@ -62,8 +62,6 @@
  private static int NO_KEY = 0;
  private DraftCNDB db;
  /** FIXME What is this field used for? */
  private volatile long oldestChangeNumber = NO_KEY;
  /**
   * The newest changenumber stored in the DB. It is used to avoid purging the
   * record with the newest changenumber. The newest record in the changenumber
@@ -96,14 +94,11 @@
  public JEChangeNumberIndexDB(ReplicationDbEnv dbEnv) throws ChangelogException
  {
    db = new DraftCNDB(dbEnv);
    final ChangeNumberIndexRecord oldestRecord = db.readFirstRecord();
    final ChangeNumberIndexRecord newestRecord = db.readLastRecord();
    oldestChangeNumber = getChangeNumber(oldestRecord);
    final long newestCN = getChangeNumber(newestRecord);
    newestChangeNumber = newestCN;
    newestChangeNumber = getChangeNumber(newestRecord);
    // initialization of the lastGeneratedChangeNumber from the DB content
    // if DB is empty => last record does not exist => default to 0
    lastGeneratedChangeNumber = new AtomicLong(newestCN);
    lastGeneratedChangeNumber = new AtomicLong(newestChangeNumber);
    // Monitoring registration
    DirectoryServer.deregisterMonitorProvider(dbMonitor);
@@ -117,7 +112,7 @@
    {
      return record.getChangeNumber();
    }
    return 0;
    return NO_KEY;
  }
  /** {@inheritDoc} */
@@ -198,19 +193,11 @@
   */
  public void shutdown()
  {
    if (shutdown.get())
    if (shutdown.compareAndSet(false, true))
    {
      return;
      db.shutdown();
      DirectoryServer.deregisterMonitorProvider(dbMonitor);
    }
    shutdown.set(true);
    synchronized (this)
    {
      notifyAll();
    }
    db.shutdown();
    DirectoryServer.deregisterMonitorProvider(dbMonitor);
  }
  /**
@@ -236,11 +223,6 @@
      while (!mustShutdown(shutdown) && cursor.next())
      {
        final ChangeNumberIndexRecord record = cursor.currentRecord();
        if (record.getChangeNumber() != oldestChangeNumber)
        {
          oldestChangeNumber = record.getChangeNumber();
        }
        if (record.getChangeNumber() != newestChangeNumber
            && record.getCSN().isOlderThan(purgeCSN))
        {
@@ -293,14 +275,9 @@
    final DraftCNDBCursor cursor = db.openDeleteCursor();
    try
    {
      boolean isOldestRecord = true;
      while (!mustShutdown(shutdown) && cursor.next())
      {
        final ChangeNumberIndexRecord record = cursor.currentRecord();
        if (isOldestRecord && record.getChangeNumber() != oldestChangeNumber)
        {
          oldestChangeNumber = record.getChangeNumber();
        }
        if (record.getChangeNumber() == newestChangeNumber)
        {
          // do not purge the newest record to avoid having the last generated
@@ -312,10 +289,6 @@
        {
          cursor.delete();
        }
        else
        {
          isOldestRecord = false;
        }
      }
    }
    catch (ChangelogException e)
@@ -398,7 +371,7 @@
  @Override
  public String toString()
  {
    return getClass().getSimpleName() + ": " + oldestChangeNumber + " "
    return getClass().getSimpleName() + ", newestChangeNumber="
        + newestChangeNumber;
  }
@@ -411,8 +384,7 @@
  public void clear() throws ChangelogException
  {
    db.clear();
    oldestChangeNumber = getChangeNumber(db.readFirstRecord());
    newestChangeNumber = getChangeNumber(db.readLastRecord());
    newestChangeNumber = NO_KEY;
  }
}