From be4d4d9909a3461fa0211e259d0d08dcd49cb221 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 02 Sep 2013 08:57:43 +0000
Subject: [PATCH] Renamed: - ChangeNumber to CSN - ChangeNumberGenerator to CSNGenerator - ChangeNumberTest to CSNTest - ChangeNumberGeneratorTest to CSNGeneratorTest
---
opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java | 209 ++++++++++++++++++++++++++--------------------------
1 files changed, 104 insertions(+), 105 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
index 287b243..338a468 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
@@ -35,7 +35,7 @@
import org.opends.messages.Message;
import org.opends.messages.MessageBuilder;
-import org.opends.server.replication.common.ChangeNumber;
+import org.opends.server.replication.common.CSN;
import org.opends.server.replication.protocol.UpdateMsg;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.replication.server.ReplicationServerDomain;
@@ -61,8 +61,8 @@
private static final int START = 0;
private static final int STOP = 1;
- private Database db = null;
- private ReplicationDbEnv dbenv = null;
+ private Database db;
+ private ReplicationDbEnv dbenv;
private ReplicationServer replicationServer;
private int serverId;
private String baseDn;
@@ -76,7 +76,7 @@
// Change counter management
// The Db itself does not allow to count records between a start and an end
// change. And we cannot rely on the replication seqnum that is part of the
- // changenumber, since there can be holes (when an operation is canceled).
+ // CSN, since there can be holes (when an operation is canceled).
// And traversing all the records from the start one to the end one works
// fine but can be very long (ECL:lastChangeNumber).
//
@@ -87,9 +87,9 @@
// - a counter value : count of changes since previous counter record.
//
// A counter record has to follow the order of the db, so it needs to have
- // a changenumber key that follows the order.
- // A counter record must have its own changenumber key since the Db does not
- // support duplicate keys (it is a compatibility breaker character of the DB).
+ // a CSN key that follows the order.
+ // A counter record must have its own CSN key since the Db does not support
+ // duplicate keys (it is a compatibility breaker character of the DB).
//
// We define 2 conditions to store a counter record :
// 1/- at least 'counterWindowSize' changes have been stored in the Db
@@ -156,11 +156,11 @@
OperationStatus status = cursor.getLast(key, data, LockMode.DEFAULT);
while (status == OperationStatus.SUCCESS)
{
- ChangeNumber cn = toChangeNumber(key.getData());
- if (isACounterRecord(cn))
+ CSN csn = toCSN(key.getData());
+ if (isACounterRecord(csn))
{
counterCurrValue = decodeCounterValue(data.getData()) + 1;
- counterTsLimit = cn.getTime();
+ counterTsLimit = csn.getTime();
break;
}
@@ -179,9 +179,9 @@
}
}
- private static ChangeNumber toChangeNumber(byte[] data)
+ private static CSN toCSN(byte[] data)
{
- return new ChangeNumber(decodeUTF8(data));
+ return new CSN(decodeUTF8(data));
}
@@ -204,10 +204,10 @@
for (UpdateMsg change : changes)
{
final DatabaseEntry key =
- createReplicationKey(change.getChangeNumber());
+ createReplicationKey(change.getCSN());
final DatabaseEntry data = new ReplicationData(change);
- insertCounterRecordIfNeeded(change.getChangeNumber());
+ insertCounterRecordIfNeeded(change.getCSN());
db.put(null, key, data);
counterCurrValue++;
}
@@ -222,19 +222,18 @@
}
}
- private void insertCounterRecordIfNeeded(ChangeNumber changeNumber)
- throws DatabaseException
+ private void insertCounterRecordIfNeeded(CSN csn) throws DatabaseException
{
if (counterCurrValue != 0 && (counterCurrValue % counterWindowSize == 0))
{
// enough changes to generate a counter record
// wait for the next change of time
- counterTsLimit = changeNumber.getTime();
+ counterTsLimit = csn.getTime();
}
- if (counterTsLimit != 0 && changeNumber.getTime() != counterTsLimit)
+ if (counterTsLimit != 0 && csn.getTime() != counterTsLimit)
{
// Write the counter record
- final ChangeNumber counterRecord = newCounterRecord(changeNumber);
+ final CSN counterRecord = newCounterRecord(csn);
DatabaseEntry counterKey = createReplicationKey(counterRecord);
DatabaseEntry counterValue = encodeCounterValue(counterCurrValue - 1);
db.put(null, counterKey, counterValue);
@@ -242,12 +241,12 @@
}
}
- private DatabaseEntry createReplicationKey(ChangeNumber changeNumber)
+ private DatabaseEntry createReplicationKey(CSN csn)
{
DatabaseEntry key = new DatabaseEntry();
try
{
- key.setData(changeNumber.toString().getBytes("UTF-8"));
+ key.setData(csn.toString().getBytes("UTF-8"));
}
catch (UnsupportedEncodingException e)
{
@@ -285,15 +284,16 @@
* Create a cursor that can be used to search or iterate on this
* ReplicationServer DB.
*
- * @param changeNumber The ChangeNumber from which the cursor must start.
+ * @param startCSN
+ * The CSN from which the cursor must start.
* @throws ChangelogException
- * When a problem occurs or the startingChangeNumber does not exist.
+ * When a problem occurs or the startCSN does not exist.
* @return The ReplServerDBCursor.
*/
- public ReplServerDBCursor openReadCursor(ChangeNumber changeNumber)
+ public ReplServerDBCursor openReadCursor(CSN startCSN)
throws ChangelogException
{
- return new ReplServerDBCursor(changeNumber);
+ return new ReplServerDBCursor(startCSN);
}
/**
@@ -326,9 +326,10 @@
/**
* Read the first Change from the database.
- * @return the first ChangeNumber.
+ *
+ * @return the first CSN.
*/
- public ChangeNumber readFirstChange()
+ public CSN readFirstChange()
{
dbCloseLock.readLock().lock();
@@ -351,10 +352,10 @@
return null;
}
- final ChangeNumber cn = toChangeNumber(key.getData());
- if (!isACounterRecord(cn))
+ final CSN csn = toCSN(key.getData());
+ if (!isACounterRecord(csn))
{
- return cn;
+ return csn;
}
// First record is a counter record .. go next
@@ -365,7 +366,7 @@
}
// There cannot be 2 counter record next to each other,
// it is safe to return this record
- return toChangeNumber(key.getData());
+ return toCSN(key.getData());
}
catch (DatabaseException e)
{
@@ -383,9 +384,9 @@
/**
* Read the last Change from the database.
*
- * @return the last ChangeNumber.
+ * @return the last CSN.
*/
- public ChangeNumber readLastChange()
+ public CSN readLastChange()
{
dbCloseLock.readLock().lock();
@@ -408,10 +409,10 @@
return null;
}
- final ChangeNumber cn = toChangeNumber(key.getData());
- if (!isACounterRecord(cn))
+ final CSN csn = toCSN(key.getData());
+ if (!isACounterRecord(csn))
{
- return cn;
+ return csn;
}
if (cursor.getPrev(key, data, LockMode.DEFAULT) != SUCCESS)
@@ -424,7 +425,7 @@
}
// There cannot be 2 counter record next to each other,
// it is safe to return this record
- return toChangeNumber(key.getData());
+ return toCSN(key.getData());
}
catch (DatabaseException e)
{
@@ -438,17 +439,16 @@
}
/**
- * Try to find in the DB, the change number right before the one
- * passed as a parameter.
+ * Try to find in the DB, the CSN right before the one passed as a parameter.
*
- * @param changeNumber
- * The changeNumber from which we start searching.
- * @return the changeNumber right before the one passed as a parameter.
- * Can return null if there is none.
+ * @param csn
+ * The CSN from which we start searching.
+ * @return the CSN right before the one passed as a parameter. Can return null
+ * if there is none.
*/
- public ChangeNumber getPreviousChangeNumber(ChangeNumber changeNumber)
+ public CSN getPreviousCSN(CSN csn)
{
- if (changeNumber == null)
+ if (csn == null)
{
return null;
}
@@ -464,23 +464,23 @@
return null;
}
- DatabaseEntry key = createReplicationKey(changeNumber);
+ DatabaseEntry key = createReplicationKey(csn);
DatabaseEntry data = new DatabaseEntry();
cursor = db.openCursor(null, null);
if (cursor.getSearchKeyRange(key, data, LockMode.DEFAULT) == SUCCESS)
{
- // We can move close to the changeNumber.
+ // We can move close to the CSN.
// Let's move to the previous change.
if (cursor.getPrev(key, data, LockMode.DEFAULT) == SUCCESS)
{
return getRegularRecord(cursor, key, data);
}
- // else, there was no change previous to our changeNumber.
+ // else, there was no change previous to our CSN.
}
else
{
- // We could not move the cursor past to the changeNumber
- // Check if the last change is older than changeNumber
+ // We could not move the cursor past to the CSN
+ // Check if the last change is older than CSN
if (cursor.getLast(key, data, LockMode.DEFAULT) == SUCCESS)
{
return getRegularRecord(cursor, key, data);
@@ -498,24 +498,24 @@
return null;
}
- private ChangeNumber getRegularRecord(Cursor cursor, DatabaseEntry key,
+ private CSN getRegularRecord(Cursor cursor, DatabaseEntry key,
DatabaseEntry data) throws DatabaseException
{
- final ChangeNumber cn = toChangeNumber(key.getData());
- if (!isACounterRecord(cn))
+ final CSN csn = toCSN(key.getData());
+ if (!isACounterRecord(csn))
{
- return cn;
+ return csn;
}
// There cannot be 2 counter record next to each other,
// it is safe to return previous record which must exist
if (cursor.getPrev(key, data, LockMode.DEFAULT) == SUCCESS)
{
- return toChangeNumber(key.getData());
+ return toCSN(key.getData());
}
// database only contain a counter record, which should not be possible
- // let's just say no changeNumber
+ // let's just say no CSN
return null;
}
@@ -553,17 +553,16 @@
* Creates a ReplServerDBCursor that can be used for browsing a
* replicationServer db.
*
- * @param startingChangeNumber
- * The ChangeNumber from which the cursor must start.
+ * @param startCSN
+ * The CSN from which the cursor must start.
* @throws ChangelogException
- * When the startingChangeNumber does not exist.
+ * When the startCSN does not exist.
*/
- private ReplServerDBCursor(ChangeNumber startingChangeNumber)
- throws ChangelogException
+ private ReplServerDBCursor(CSN startCSN) throws ChangelogException
{
- if (startingChangeNumber != null)
+ if (startCSN != null)
{
- key = createReplicationKey(startingChangeNumber);
+ key = createReplicationKey(startCSN);
}
else
{
@@ -590,19 +589,18 @@
}
localCursor = db.openCursor(txn, null);
- if (startingChangeNumber != null)
+ if (startCSN != null)
{
if (localCursor.getSearchKey(key, data, LockMode.DEFAULT) != SUCCESS)
{
- // We could not move the cursor to the expected startingChangeNumber
+ // We could not move the cursor to the expected startCSN
if (localCursor.getSearchKeyRange(key, data, DEFAULT) != SUCCESS)
{
- // We could not even move the cursor closed to it => failure
- throw new ChangelogException(
- Message.raw("ChangeNumber not available"));
+ // We could not even move the cursor close to it => failure
+ throw new ChangelogException(Message.raw("CSN not available"));
}
- // We can move close to the startingChangeNumber.
+ // We can move close to the startCSN.
// Let's create a cursor from that point.
DatabaseEntry aKey = new DatabaseEntry();
DatabaseEntry aData = new DatabaseEntry();
@@ -752,12 +750,13 @@
}
/**
- * Get the next ChangeNumber in the database from this Cursor.
+ * Get the next CSN in the database from this Cursor.
*
- * @return The next ChangeNumber in the database from this cursor.
- * @throws ChangelogException In case of underlying database problem.
+ * @return The next CSN in the database from this cursor.
+ * @throws ChangelogException
+ * In case of underlying database problem.
*/
- public ChangeNumber nextChangeNumber() throws ChangelogException
+ public CSN nextCSN() throws ChangelogException
{
if (isClosed)
{
@@ -770,7 +769,7 @@
{
return null;
}
- return toChangeNumber(key.getData());
+ return toCSN(key.getData());
}
catch (DatabaseException e)
{
@@ -804,11 +803,11 @@
return null;
}
- ChangeNumber cn = null;
+ CSN csn = null;
try
{
- cn = toChangeNumber(key.getData());
- if (isACounterRecord(cn))
+ csn = toCSN(key.getData());
+ if (isACounterRecord(csn))
{
continue;
}
@@ -827,7 +826,7 @@
*/
Message message = ERR_REPLICATIONDB_CANNOT_PROCESS_CHANGE_RECORD
.get(replicationServer.getServerId(),
- (cn == null ? "" : cn.toString()),
+ (csn == null ? "" : csn.toString()),
e.getMessage());
logError(message);
}
@@ -908,10 +907,10 @@
* Count the number of changes between 2 changes numbers (inclusive).
* @param start The lower limit of the count.
* @param stop The higher limit of the count.
- * @return The number of changes between provided start and stop changeNumber.
+ * @return The number of changes between provided start and stop CSN.
* Returns 0 when an error occurs.
*/
- public long count(ChangeNumber start, ChangeNumber stop)
+ public long count(CSN start, CSN stop)
{
dbCloseLock.readLock().lock();
try
@@ -962,8 +961,8 @@
}
- private void findFirstCounterRecordAfterStartPoint(ChangeNumber start,
- ChangeNumber stop, int[] counterValues, int[] distanceToCounterRecords)
+ private void findFirstCounterRecordAfterStartPoint(CSN start,
+ CSN stop, int[] counterValues, int[] distanceToCounterRecords)
throws DatabaseException
{
Cursor cursor = db.openCursor(null, null);
@@ -988,8 +987,8 @@
while (status == OperationStatus.SUCCESS)
{
// test whether the record is a regular change or a counter
- final ChangeNumber cn = toChangeNumber(key.getData());
- if (isACounterRecord(cn))
+ final CSN csn = toCSN(key.getData());
+ if (isACounterRecord(csn))
{
// we have found the counter record
counterValues[START] = decodeCounterValue(data.getData());
@@ -998,7 +997,7 @@
// reached a regular change record
// test whether we reached the 'stop' target
- if (!cn.newer(stop))
+ if (!csn.newer(stop))
{
// let's loop
distanceToCounterRecords[START]++;
@@ -1017,8 +1016,8 @@
}
}
- private boolean findFirstCounterRecordBeforeStopPoint(ChangeNumber start,
- ChangeNumber stop, int[] counterValues, int[] distanceToCounterRecords)
+ private boolean findFirstCounterRecordBeforeStopPoint(CSN start,
+ CSN stop, int[] counterValues, int[] distanceToCounterRecords)
throws DatabaseException
{
Cursor cursor = db.openCursor(null, null);
@@ -1040,8 +1039,8 @@
while (status == OperationStatus.SUCCESS)
{
- final ChangeNumber cn = toChangeNumber(key.getData());
- if (isACounterRecord(cn))
+ final CSN csn = toCSN(key.getData());
+ if (isACounterRecord(csn))
{
// we have found the counter record
counterValues[STOP] = decodeCounterValue(data.getData());
@@ -1049,7 +1048,7 @@
}
// it is a regular change record
- if (!cn.older(start))
+ if (!csn.older(start))
{
distanceToCounterRecords[STOP]++;
status = cursor.getPrev(key, data, LockMode.DEFAULT);
@@ -1067,7 +1066,7 @@
/**
* The diagram below shows a visual description of how the distance between
- * two change numbers in the database is computed.
+ * two CSNs in the database is computed.
*
* <pre>
* +--------+ +--------+
@@ -1102,9 +1101,9 @@
* Explanation of the terms used:
* <dl>
* <dt>START</dt>
- * <dd>Start change number for the count</dd>
+ * <dd>Start CSN for the count</dd>
* <dt>STOP</dt>
- * <dd>Stop change number for the count</dd>
+ * <dd>Stop CSN for the count</dd>
* <dt>dist</dt>
* <dd>Distance from START (or STOP) to the counter record</dd>
* <dt>CSN</dt>
@@ -1113,9 +1112,9 @@
* database is ordered.</dd>
* <dt>CR</dt>
* <dd>Stands for "Counter Record". Counter Records are inserted in the
- * database along with real change numbers, but they are not real changes.
- * They are only used to speed up calculating the distance between 2 change
- * numbers without the need to scan the whole database in between.</dd>
+ * database along with real CSNs, but they are not real changes. They are only
+ * used to speed up calculating the distance between 2 CSNs without the need
+ * to scan the whole database in between.</dd>
* </dl>
*/
private long computeDistance(int[] counterValues,
@@ -1137,21 +1136,21 @@
}
/**
- * Whether a provided changeNumber represents a counter record. A counter
- * record is used to store TODO.
+ * Whether a provided CSN represents a counter record. A counter record is
+ * used to store the time.
*
- * @param cn
- * The changeNumber to test
- * @return true if the provided changenumber is a counter, false otherwise
+ * @param csn
+ * The CSN to test
+ * @return true if the provided CSN is a counter, false otherwise
*/
- private static boolean isACounterRecord(ChangeNumber cn)
+ private static boolean isACounterRecord(CSN csn)
{
- return cn.getServerId() == 0 && cn.getSeqnum() == 0;
+ return csn.getServerId() == 0 && csn.getSeqnum() == 0;
}
- private static ChangeNumber newCounterRecord(ChangeNumber changeNumber)
+ private static CSN newCounterRecord(CSN csn)
{
- return new ChangeNumber(changeNumber.getTime(), 0, 0);
+ return new CSN(csn.getTime(), 0, 0);
}
/**
--
Gitblit v1.10.0