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

Nicolas Capponi
02.18.2014 51146cca362c6b1666a239c7a5fadcab14b390d2
OPENDJ-1471 File based changelog : improve cursor behavior
CR-3920

Third and last step : all cursors related to ChangeNumberindexDB now
behave like java.sql.ResultSet API.

* FileChangeNumberIndexDBCursor, JEChangeNumberIndexDBCursor:
now behave like ResultSet API

* ECLServerHandler : adapt to changes of underlying cursor
on ChangeNumberIndexDB

* FileChangeNumberIndexDBTest, JEChangeNumberIndexDBTest:
adapt to changes on cursor

* ChangeNumberIndexDB : javadoc fix

* ReplicationEnvironment : change default log file size to 10M

7 files modified
56 ■■■■■ changed files
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java 11 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java 2 ●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBCursor.java 6 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/file/ReplicationEnvironment.java 3 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBCursor.java 22 ●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBTest.java 6 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java 6 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -548,12 +548,11 @@
    // Read the CNIndexDB to see whether it contains startChangeNumber
    DBCursor<ChangeNumberIndexRecord> cursor =
        cnIndexDB.getCursorFrom(startChangeNumber);
    final ChangeNumberIndexRecord startRecord = cursor.getRecord();
    if (startRecord != null)
    if (cursor.next())
    {
      // found the provided startChangeNumber, let's return it
      cnIndexDBCursor = cursor;
      return startRecord.getPreviousCookie();
      return cursor.getRecord().getPreviousCookie();
    }
    close(cursor);
@@ -572,8 +571,7 @@
    if (startChangeNumber < oldestChangeNumber)
    {
      cursor = cnIndexDB.getCursorFrom(oldestChangeNumber);
      final ChangeNumberIndexRecord oldestRecord = cursor.getRecord();
      if (oldestRecord == null)
      if (!cursor.next())
      {
        // This should not happen
        close(cursor);
@@ -582,7 +580,7 @@
      }
      cnIndexDBCursor = cursor;
      return oldestRecord.getPreviousCookie();
      return cursor.getRecord().getPreviousCookie();
    }
    else if (startChangeNumber <= newestChangeNumber)
    {
@@ -613,6 +611,7 @@
  {
    DBCursor<ChangeNumberIndexRecord> cursor =
        cnIndexDB.getCursorFrom(startChangeNumber);
    cursor.next();
    if (cursor.getRecord() == null)
    {
      close(cursor);
opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
@@ -89,7 +89,7 @@
   *
   * @param startChangeNumber
   *          The position where the iterator must start.
   * @return a new ReplicationIterator that allows to browse this DB managed by
   * @return a new DBCursor that allows to browse this DB managed by
   *         this object and starting at the position defined by a given
   *         changeNumber.
   * @throws ChangelogException
opends/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBCursor.java
@@ -31,10 +31,6 @@
/**
 * A cursor on ChangeNumberIndexDB.
 * <p>
 * The cursor initially points to a record, that is {@code cursor.getRecord()}
 * is equals to the first record available from the cursor before any call to
 * {@code cursor.next()} method.
 */
class FileChangeNumberIndexDBCursor implements DBCursor<ChangeNumberIndexRecord>
{
@@ -54,8 +50,6 @@
      throws ChangelogException
  {
    this.cursor = cursor;
    // cursor is positioned to first record at start
    next();
  }
  /** {@inheritDoc} */
opends/src/server/org/opends/server/replication/server/changelog/file/ReplicationEnvironment.java
@@ -120,8 +120,7 @@
{
  private static final DebugTracer TRACER = getTracer();
  // TODO : to replace by configurable value
  private static final long MAX_LOG_FILE_SIZE_IN_BYTES = 10*1024;
  private static final long MAX_LOG_FILE_SIZE_IN_BYTES = 10*1024*1024;
  private static final int NO_GENERATION_ID = -1;
opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBCursor.java
@@ -22,7 +22,7 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011-2013 ForgeRock AS
 *      Portions Copyright 2011-2014 ForgeRock AS
 */
package org.opends.server.replication.server.changelog.je;
@@ -44,7 +44,13 @@
  private DraftCNDBCursor draftCNDbCursor;
  /**
   * Creates a new ReplicationIterator. All created iterator must be released by
   * As underlying cursor is already pointing to a record at start, this
   * indicator allow to shift the pointed record at initialization time.
   */
  private boolean isInitialized = false;
  /**
   * Creates a new DB Cursor. All created iterator must be released by
   * the caller using the {@link #close()} method.
   *
   * @param db
@@ -66,7 +72,7 @@
  {
    try
    {
      return this.draftCNDbCursor.currentRecord();
      return isInitialized ? draftCNDbCursor.currentRecord() : null;
    }
    catch (Exception e)
    {
@@ -81,7 +87,15 @@
  {
    if (draftCNDbCursor != null)
    {
      return draftCNDbCursor.next();
      if (!isInitialized)
      {
        isInitialized = true;
        return draftCNDbCursor.currentRecord() != null;
      }
      else
      {
        return draftCNDbCursor.next();
      }
    }
    return false;
  }
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBTest.java
@@ -204,6 +204,7 @@
      DBCursor<ChangeNumberIndexRecord> cursor = cnIndexDB.getCursorFrom(oldestCN);
      try
      {
        assertTrue(cursor.next());
        assertEqualTo(cursor.getRecord(), csns[0], baseDN1, cookies.get(0));
        assertTrue(cursor.next());
        assertEqualTo(cursor.getRecord(), csns[1], baseDN2, cookies.get(1));
@@ -319,6 +320,7 @@
    DBCursor<ChangeNumberIndexRecord> cursor = cnIndexDB.getCursorFrom(changeNumber);
    try
    {
      cursor.next();
      return cursor.getRecord().getPreviousCookie();
    }
    finally
@@ -334,10 +336,10 @@
    {
      for (int i = 0; i < cns.length; i++)
      {
        assertTrue(cursor.next());
        assertEquals(cursor.getRecord().getChangeNumber(), cns[i]);
        final boolean isNotLast = i + 1 < cns.length;
        assertEquals(cursor.next(), isNotLast);
      }
      assertFalse(cursor.next());
    }
    finally
    {
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
@@ -123,6 +123,7 @@
      DBCursor<ChangeNumberIndexRecord> cursor = cnIndexDB.getCursorFrom(oldestCN);
      try
      {
        assertTrue(cursor.next());
        assertEqualTo(cursor.getRecord(), csns[0], baseDN1, cookies.get(0));
        assertTrue(cursor.next());
        assertEqualTo(cursor.getRecord(), csns[1], baseDN2, cookies.get(1));
@@ -282,6 +283,7 @@
    DBCursor<ChangeNumberIndexRecord> cursor = cnIndexDB.getCursorFrom(changeNumber);
    try
    {
      cursor.next();
      return cursor.getRecord().getPreviousCookie();
    }
    finally
@@ -297,10 +299,10 @@
    {
      for (int i = 0; i < cns.length; i++)
      {
        assertTrue(cursor.next());
        assertEquals(cursor.getRecord().getChangeNumber(), cns[i]);
        final boolean isNotLast = i + 1 < cns.length;
        assertEquals(cursor.next(), isNotLast);
      }
      assertFalse(cursor.next());
    }
    finally
    {