From 8480c9ba20d5966c24630233e0384ab9ca55ab03 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Wed, 02 Jul 2014 08:18:44 +0000
Subject: [PATCH] OPENDJ-1471 File based changelog : improve cursor behavior CR-3920
---
opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBCursor.java | 6 ------
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBTest.java | 6 ++++--
opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java | 2 +-
opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/ReplicationEnvironment.java | 3 +--
opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBCursor.java | 22 ++++++++++++++++++----
opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java | 11 +++++------
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java | 6 ++++--
7 files changed, 33 insertions(+), 23 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index ed15dd4..a4591c6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opendj-sdk/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);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
index a1abe41..23be4f7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
+++ b/opendj-sdk/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
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBCursor.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBCursor.java
index b5e2502..6b967be 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBCursor.java
+++ b/opendj-sdk/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} */
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/ReplicationEnvironment.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/ReplicationEnvironment.java
index 0f8c88e..65cd39c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/file/ReplicationEnvironment.java
+++ b/opendj-sdk/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;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBCursor.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBCursor.java
index 35dd2b0..dc48330 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBCursor.java
+++ b/opendj-sdk/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;
}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBTest.java
index fe5428e..cf896e6 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/file/FileChangeNumberIndexDBTest.java
+++ b/opendj-sdk/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
{
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
index 4c85472..4f6fd24 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
+++ b/opendj-sdk/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
{
--
Gitblit v1.10.0