From b1ae3d652cc31c837721fd750623cec531b94d93 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 04 Sep 2013 10:57:18 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB
---
opends/src/server/org/opends/server/replication/server/MessageHandler.java | 4
opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java | 10 ++
opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java | 12 +-
opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDraftCNKey.java | 15 +--
opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java | 16 ++--
opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbIterator.java | 4
opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDBCursor.java | 2
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java | 2
/dev/null | 58 --------------
opends/src/server/org/opends/server/replication/server/ReplicationServer.java | 16 ++--
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java | 2
opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java | 12 +-
opends/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java | 11 +-
opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java | 2
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java | 10 +-
opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java | 8 +-
opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java | 20 ++--
opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursor.java | 2
18 files changed, 78 insertions(+), 128 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java b/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
index 7e7a969..8bd4a1b 100644
--- a/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
+++ b/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -27,9 +27,6 @@
*/
package org.opends.server.replication.common;
-import static org.opends.messages.ExtensionMessages.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -48,7 +45,8 @@
import org.opends.server.util.ServerConstants;
import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
-
+import static org.opends.messages.ExtensionMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
/**
* This class implements a virtual attribute provider that allows administrators
@@ -61,7 +59,7 @@
extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
- // The tracer object for the debug logger.
+ /** The tracer object for the debug logger. */
private static final DebugTracer TRACER = getTracer();
/**
@@ -128,7 +126,7 @@
@Override()
public Set<AttributeValue> getValues(Entry entry,VirtualAttributeRule rule)
{
- String first="0";
+ String first = "0";
try
{
ECLWorkflowElement eclwe = (ECLWorkflowElement)
@@ -142,7 +140,7 @@
ReplicationServer rs = eclwe.getReplicationServer();
rs.disableEligibility(excludedDomains);
- int[] limits = rs.getECLChangeNumberLimits(
+ long[] limits = rs.getECLChangeNumberLimits(
rs.getEligibleCSN(), excludedDomains);
first = String.valueOf(limits[0]);
diff --git a/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java b/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
index bae52ea..577c8fb 100644
--- a/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
+++ b/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -27,9 +27,6 @@
*/
package org.opends.server.replication.common;
-import static org.opends.messages.ExtensionMessages.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -48,7 +45,8 @@
import org.opends.server.util.ServerConstants;
import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
-
+import static org.opends.messages.ExtensionMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
/**
* This class implements a virtual attribute provider that allows administrators
@@ -61,7 +59,9 @@
extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
+ /** The tracer object for the debug logger. */
private static final DebugTracer TRACER = getTracer();
+
/**
* Creates a new instance of this member virtual attribute provider.
*/
@@ -109,7 +109,6 @@
}
-
/**
* {@inheritDoc}
*/
@@ -121,7 +120,6 @@
}
-
/**
* {@inheritDoc}
*/
@@ -142,7 +140,7 @@
ReplicationServer rs = eclwe.getReplicationServer();
rs.disableEligibility(excludedDomains);
- int[] limits = rs.getECLChangeNumberLimits(
+ long[] limits = rs.getECLChangeNumberLimits(
rs.getEligibleCSN(), excludedDomains);
last = String.valueOf(limits[1]);
diff --git a/opends/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java b/opends/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java
index 8736254..c053665 100644
--- a/opends/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java
+++ b/opends/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java
@@ -49,7 +49,7 @@
private MultiDomainServerState cookie;
/** The changeNumber as specified by draft-good-ldap-changelog. */
- private int changeNumber;
+ private long changeNumber;
/**
* Creates a new message.
@@ -184,7 +184,10 @@
{
byte[] byteCookie = String.valueOf(cookie).getBytes("UTF-8");
byte[] byteBaseDN = String.valueOf(baseDN).getBytes("UTF-8");
- byte[] byteChangeNumber = Integer.toString(changeNumber).getBytes("UTF-8");
+ // FIXME JNR Changing line below to use long would require a protocol
+ // version change. Leave it like this for now until the need arises.
+ byte[] byteChangeNumber =
+ Integer.toString((int) changeNumber).getBytes("UTF-8");
byte[] byteUpdateMsg = updateMsg.getBytes(protocolVersion);
int length = 1 + byteCookie.length +
@@ -211,7 +214,7 @@
* Setter for the changeNumber of this change.
* @param changeNumber the provided changeNumber for this change.
*/
- public void setChangeNumber(int changeNumber)
+ public void setChangeNumber(long changeNumber)
{
this.changeNumber = changeNumber;
}
@@ -220,7 +223,7 @@
* Getter for the changeNumber of this change.
* @return the changeNumber of this change.
*/
- public int getChangeNumber()
+ public long getChangeNumber()
{
return this.changeNumber;
}
diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index ff7da17..168a69d 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -581,7 +581,7 @@
return null;
}
- final int firstChangeNumber = cnIndexDB.getFirstChangeNumber();
+ final long firstChangeNumber = cnIndexDB.getFirstChangeNumber();
final String crossDomainStartState =
cnIndexDB.getPreviousCookie(firstChangeNumber);
cnIndexDBCursor = cnIndexDB.getCursorFrom(firstChangeNumber);
@@ -606,10 +606,10 @@
* Get the draftLimits (from the eligibleCSN got at the beginning of the
* operation) in order to have the first and possible last change number.
*/
- final int[] limits = replicationServer.getECLChangeNumberLimits(
+ final long[] limits = replicationServer.getECLChangeNumberLimits(
eligibleCSN, excludedBaseDNs);
- final int firstChangeNumber = limits[0];
- final int lastChangeNumber = limits[1];
+ final long firstChangeNumber = limits[0];
+ final long lastChangeNumber = limits[1];
// If the startChangeNumber provided is lower than the firstChangeNumber in
// the DB, let's use the lower limit.
@@ -636,7 +636,7 @@
return null;
}
- final int lastKey = cnIndexDB.getLastChangeNumber();
+ final long lastKey = cnIndexDB.getLastChangeNumber();
crossDomainStartState = cnIndexDB.getPreviousCookie(lastKey);
cnIndexDBCursor = cnIndexDB.getCursorFrom(lastKey);
return crossDomainStartState;
diff --git a/opends/src/server/org/opends/server/replication/server/MessageHandler.java b/opends/src/server/org/opends/server/replication/server/MessageHandler.java
index c1aa9e0..9df5c26 100644
--- a/opends/src/server/org/opends/server/replication/server/MessageHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/MessageHandler.java
@@ -39,7 +39,7 @@
import org.opends.server.replication.common.CSN;
import org.opends.server.replication.common.ServerState;
import org.opends.server.replication.protocol.UpdateMsg;
-import org.opends.server.replication.server.changelog.api.*;
+import org.opends.server.replication.server.changelog.api.ReplicaDBCursor;
import org.opends.server.types.*;
import static org.opends.messages.ReplicationMessages.*;
@@ -497,7 +497,7 @@
private NavigableSet<ReplicaDBCursor> collectAllCursorsWithChanges()
{
final NavigableSet<ReplicaDBCursor> results =
- new TreeSet<ReplicaDBCursor>(new ReplicaDBCursorComparator());
+ new TreeSet<ReplicaDBCursor>();
for (int serverId : replicationServerDomain.getServerIds())
{
// get the last already sent CN from that server to get a cursor
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 1a4208e..59ce757 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -157,7 +157,7 @@
* <p>
* Guarded by cnIndexDBLock
**/
- private int lastGeneratedChangeNumber = 0;
+ private long lastGeneratedChangeNumber = 0;
/** Used for protecting {@link ChangeNumberIndexDB} related state. */
private final Object cnIndexDBLock = new Object();
@@ -1658,7 +1658,7 @@
*
* @return the first value.
*/
- public int getFirstChangeNumber()
+ public long getFirstChangeNumber()
{
synchronized (cnIndexDBLock)
{
@@ -1675,7 +1675,7 @@
*
* @return the last value.
*/
- public int getLastChangeNumber()
+ public long getLastChangeNumber()
{
synchronized (cnIndexDBLock)
{
@@ -1692,7 +1692,7 @@
*
* @return The generated change number
*/
- public int getNewChangeNumber()
+ public long getNewChangeNumber()
{
synchronized (cnIndexDBLock)
{
@@ -1712,7 +1712,7 @@
* @throws DirectoryException
* When it happens.
*/
- public int[] getECLChangeNumberLimits(CSN crossDomainEligibleCSN,
+ public long[] getECLChangeNumberLimits(CSN crossDomainEligibleCSN,
Set<String> excludedBaseDNs) throws DirectoryException
{
/* The content of the DraftCNdb depends on the SEARCH operations done before
@@ -1735,11 +1735,11 @@
* (this diff is done domain by domain)
*/
- int lastChangeNumber;
+ long lastChangeNumber;
boolean dbEmpty = false;
final ChangeNumberIndexDB cnIndexDB = getChangeNumberIndexDB();
- int firstChangeNumber = cnIndexDB.getFirstChangeNumber();
+ long firstChangeNumber = cnIndexDB.getFirstChangeNumber();
Map<String, ServerState> domainsServerStateForLastCN = null;
CSN csnForLastCN = null;
String domainForLastCN = null;
@@ -1821,7 +1821,7 @@
firstChangeNumber += lastGeneratedChangeNumber;
lastChangeNumber += lastGeneratedChangeNumber;
}
- return new int[]{firstChangeNumber, lastChangeNumber};
+ return new long[] { firstChangeNumber, lastChangeNumber };
}
/**
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java b/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
index 54d7639..57faad5 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
@@ -40,7 +40,7 @@
* @see <a href= "http://tools.ietf.org/html/draft-good-ldap-changelog-04"
* >OpenDJ Domain Names</a> for more information about the changeNumber.
*/
-public interface ChangeNumberIndexDB extends Runnable
+public interface ChangeNumberIndexDB
{
/**
@@ -50,7 +50,7 @@
* the provided change number.
* @return the associated CSN, null when none.
*/
- public CSN getCSN(int changeNumber);
+ public CSN getCSN(long changeNumber);
/**
* Get the baseDN associated to a provided change number.
@@ -59,7 +59,7 @@
* the provided change number.
* @return the baseDN, null when none.
*/
- public String getBaseDN(int changeNumber);
+ public String getBaseDN(long changeNumber);
/**
* Get the previous cookie associated to a provided change number.
@@ -68,21 +68,21 @@
* the provided change number.
* @return the previous cookie, null when none.
*/
- String getPreviousCookie(int changeNumber);
+ String getPreviousCookie(long changeNumber);
/**
* Get the first change number stored in this DB.
*
* @return Returns the first change number in this DB.
*/
- int getFirstChangeNumber();
+ long getFirstChangeNumber();
/**
* Get the last change number stored in this DB.
*
* @return Returns the last change number in this DB
*/
- int getLastChangeNumber();
+ long getLastChangeNumber();
/**
* Add an update to the list of messages that must be saved to this DB managed
@@ -100,7 +100,7 @@
* @param csn
* The associated replication CSN.
*/
- void add(int changeNumber, String previousCookie, String baseDN, CSN csn);
+ void add(long changeNumber, String previousCookie, String baseDN, CSN csn);
/**
* Generate a new {@link ChangeNumberIndexDBCursor} that allows to browse the
@@ -115,7 +115,7 @@
* @throws ChangelogException
* if a database problem happened.
*/
- ChangeNumberIndexDBCursor getCursorFrom(int startChangeNumber)
+ ChangeNumberIndexDBCursor getCursorFrom(long startChangeNumber)
throws ChangelogException;
/**
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDBCursor.java b/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDBCursor.java
index 89b45a2..dcbbd8a 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDBCursor.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDBCursor.java
@@ -57,7 +57,7 @@
*
* @return The change number field.
*/
- int getChangeNumber();
+ long getChangeNumber();
/**
* Skip to the next record of the database.
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursor.java b/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursor.java
index d2dcfa0..c3a0c31 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursor.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursor.java
@@ -34,7 +34,7 @@
* This cursor allows to iterate through the changes received from a given
* replica (Directory Server) in the topology.
*/
-public interface ReplicaDBCursor extends Closeable
+public interface ReplicaDBCursor extends Closeable, Comparable<ReplicaDBCursor>
{
/**
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursorComparator.java b/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursorComparator.java
deleted file mode 100644
index 3db370c..0000000
--- a/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursorComparator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- * Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- * Copyright 2006-2008 Sun Microsystems, Inc.
- * Portions copyright 2013 ForgeRock AS
- */
-package org.opends.server.replication.server.changelog.api;
-
-import java.util.Comparator;
-
-import org.opends.server.replication.common.CSN;
-
-/**
- * This class defines a {@link Comparator} that allows to know which
- * {@link ReplicaDBCursor} contain the next {@link UpdateMsg} in the order
- * defined by the {@link CSN} of the {@link UpdateMsg}.
- */
-public class ReplicaDBCursorComparator implements Comparator<ReplicaDBCursor>
-{
- /**
- * Compare the {@link CSN} of the {@link ReplicaDBCursor}.
- *
- * @param o1
- * first cursor.
- * @param o2
- * second cursor.
- * @return result of the comparison.
- */
- @Override
- public int compare(ReplicaDBCursor o1, ReplicaDBCursor o2)
- {
- CSN csn1 = o1.getChange().getCSN();
- CSN csn2 = o2.getChange().getCSN();
-
- return CSN.compare(csn1, csn2);
- }
-}
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java b/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
index 440c6ad..e95fa04 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
@@ -92,7 +92,7 @@
* @param csn the provided replication CSN to be
* stored associated with this change number.
*/
- public void addEntry(int changeNumber, String value, String domainBaseDN,
+ public void addEntry(long changeNumber, String value, String domainBaseDN,
CSN csn)
{
try
@@ -187,7 +187,7 @@
* creation.
* @return The ReplServerDBCursor.
*/
- public DraftCNDBCursor openReadCursor(int changeNumber)
+ public DraftCNDBCursor openReadCursor(long changeNumber)
throws ChangelogException
{
return new DraftCNDBCursor(changeNumber);
@@ -362,7 +362,7 @@
* @throws ChangelogException
* when the startChangeNumber does not exist.
*/
- private DraftCNDBCursor(int startChangeNumber) throws ChangelogException
+ private DraftCNDBCursor(long startChangeNumber) throws ChangelogException
{
this.key = new ReplicationDraftCNKey(startChangeNumber);
this.entry = new DatabaseEntry();
@@ -392,7 +392,7 @@
// We could not move the cursor to the expected startChangeNumber
if (localCursor.getSearchKeyRange(key, entry, DEFAULT) != SUCCESS)
{
- // We could not even move the cursor closed to it => failure
+ // We could not even move the cursor close to it => failure
throw new ChangelogException(
Message.raw("ChangeLog Change Number " + startChangeNumber
+ " is not available"));
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java b/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java
index 8e958c2..3d57e71 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java
@@ -65,7 +65,7 @@
* This class publishes some monitoring information below <code>
* cn=monitor</code>.
*/
-public class DraftCNDbHandler implements ChangeNumberIndexDB
+public class DraftCNDbHandler implements ChangeNumberIndexDB, Runnable
{
/**
* The tracer object for the debug logger.
@@ -136,7 +136,7 @@
/** {@inheritDoc} */
@Override
- public synchronized void add(int changeNumber, String previousCookie,
+ public synchronized void add(long changeNumber, String previousCookie,
String baseDN, CSN csn)
{
db.addEntry(changeNumber, previousCookie, baseDN, csn);
@@ -152,14 +152,14 @@
/** {@inheritDoc} */
@Override
- public int getFirstChangeNumber()
+ public long getFirstChangeNumber()
{
return db.readFirstChangeNumber();
}
/** {@inheritDoc} */
@Override
- public int getLastChangeNumber()
+ public long getLastChangeNumber()
{
return db.readLastChangeNumber();
}
@@ -207,7 +207,7 @@
* @throws ChangelogException
* if a database problem occurs.
*/
- DraftCNDBCursor getReadCursor(int startChangeNumber)
+ DraftCNDBCursor getReadCursor(long startChangeNumber)
throws ChangelogException
{
return db.openReadCursor(startChangeNumber);
@@ -215,7 +215,7 @@
/** {@inheritDoc} */
@Override
- public ChangeNumberIndexDBCursor getCursorFrom(int startChangeNumber)
+ public ChangeNumberIndexDBCursor getCursorFrom(long startChangeNumber)
throws ChangelogException
{
return new DraftCNDbIterator(db, startChangeNumber);
@@ -516,7 +516,7 @@
/** {@inheritDoc} */
@Override
- public String getPreviousCookie(int changeNumber)
+ public String getPreviousCookie(long changeNumber)
{
DraftCNDBCursor cursor = null;
try
@@ -537,7 +537,7 @@
/** {@inheritDoc} */
@Override
- public CSN getCSN(int changeNumber)
+ public CSN getCSN(long changeNumber)
{
DraftCNDBCursor cursor = null;
try
@@ -558,7 +558,7 @@
/**{@inheritDoc}*/
@Override
- public String getBaseDN(int changeNumber)
+ public String getBaseDN(long changeNumber)
{
DraftCNDBCursor cursor = null;
try
@@ -577,7 +577,7 @@
}
}
- private void debugException(String methodName, int changeNumber, Exception e)
+ private void debugException(String methodName, long changeNumber, Exception e)
{
if (debugEnabled())
TRACER.debugInfo("In DraftCNDbHandler." + methodName + "(), read: "
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbIterator.java b/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbIterator.java
index 8243aca..18ecd5d 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbIterator.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbIterator.java
@@ -56,7 +56,7 @@
* @throws ChangelogException
* If a database problem happened.
*/
- public DraftCNDbIterator(DraftCNDB db, int startChangeNumber)
+ public DraftCNDbIterator(DraftCNDB db, long startChangeNumber)
throws ChangelogException
{
draftCNDbCursor = db.openReadCursor(startChangeNumber);
@@ -98,7 +98,7 @@
/** {@inheritDoc} */
@Override
- public int getChangeNumber()
+ public long getChangeNumber()
{
return ((ReplicationDraftCNKey) draftCNDbCursor.getKey()).getChangeNumber();
}
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java b/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java
index 852a20b..f06a43d 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java
@@ -160,4 +160,14 @@
{
close();
}
+
+ /** {@inheritDoc} */
+ @Override
+ public int compareTo(ReplicaDBCursor o)
+ {
+ final CSN csn1 = getChange().getCSN();
+ final CSN csn2 = o.getChange().getCSN();
+
+ return CSN.compare(csn1, csn2);
+ }
}
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDraftCNKey.java b/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDraftCNKey.java
index 8d01875..e01c4a4 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDraftCNKey.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDraftCNKey.java
@@ -42,16 +42,14 @@
* Creates a new ReplicationKey from the given change number.
* @param changeNumber The change number to use.
*/
- public ReplicationDraftCNKey(int changeNumber)
+ public ReplicationDraftCNKey(long changeNumber)
{
try
{
- String s = String.valueOf(changeNumber);
- int a = 16-s.length();
- String sscn = "0000000000000000".substring(0, a) + s;
// Should it use StaticUtils.getBytes() to increase performances?
- setData(sscn.getBytes("UTF-8"));
- } catch (UnsupportedEncodingException e)
+ setData(String.format("%016d", changeNumber).getBytes("UTF-8"));
+ }
+ catch (UnsupportedEncodingException e)
{
// Should never happens, UTF-8 is always supported
// TODO : add better logging
@@ -60,10 +58,11 @@
/**
* Getter for the change number associated with this key.
+ *
* @return the change number associated with this key.
*/
- public int getChangeNumber()
+ public long getChangeNumber()
{
- return Integer.valueOf(new String(getData()));
+ return Long.valueOf(new String(getData()));
}
}
diff --git a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index acd1dc2..470fc12 100644
--- a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -1007,7 +1007,7 @@
String clearLDIFchanges,
String targetUUID,
List<RawAttribute> includedAttributes,
- int changenumber,
+ long changenumber,
String changetype,
String changeInitiatorsName)
throws DirectoryException
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
index d52279f..f1f606a 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
@@ -2924,7 +2924,7 @@
ReplicationServer rs = eclwe.getReplicationServer();
rs.disableEligibility(excludedDomains);
long t1 = TimeThread.getTime();
- int[] limits = replicationServer.getECLChangeNumberLimits(
+ long[] limits = replicationServer.getECLChangeNumberLimits(
replicationServer.getEligibleCSN(), excludedDomains);
assertEquals(limits[1], maxMsg);
long t2 = TimeThread.getTime();
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
index 75bc78b..e577e28 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
@@ -110,7 +110,7 @@
handler.add(cn3, value3, baseDN3, csn3);
// The ChangeNumber should not get purged
- final int firstChangeNumber = handler.getFirstChangeNumber();
+ final long firstChangeNumber = handler.getFirstChangeNumber();
assertEquals(firstChangeNumber, cn1);
assertEquals(handler.getLastChangeNumber(), cn3);
--
Gitblit v1.10.0