From c64a67b3d0b51743d9f2a2bf110cb365b8b104af Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 26 Aug 2013 08:41:18 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB
---
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java | 68 ++++++++++++++++-----------------
1 files changed, 33 insertions(+), 35 deletions(-)
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 d6fc6f9..67b977c 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -41,9 +41,9 @@
import org.opends.server.replication.common.ServerState;
import org.opends.server.replication.common.ServerStatus;
import org.opends.server.replication.protocol.*;
+import org.opends.server.replication.server.changelog.api.ChangelogDB;
+import org.opends.server.replication.server.changelog.api.ChangelogDBIterator;
import org.opends.server.replication.server.changelog.api.ChangelogException;
-import org.opends.server.replication.server.changelog.je.DraftCNDbHandler;
-import org.opends.server.replication.server.changelog.je.DraftCNDbIterator;
import org.opends.server.types.*;
import org.opends.server.util.ServerConstants;
@@ -66,8 +66,8 @@
*/
private String operationId;
- /** Iterator on the draftCN database. */
- private DraftCNDbIterator draftCNDbIter = null;
+ /** Iterator on the changelogDB database. */
+ private ChangelogDBIterator changelogDBIter = null;
private boolean draftCompat = false;
/**
@@ -99,8 +99,7 @@
* currently processed (thus becoming the "current" cookie just
* before the change is returned.
*/
- private MultiDomainServerState previousCookie =
- new MultiDomainServerState();
+ private MultiDomainServerState previousCookie = new MultiDomainServerState();
/**
* Specifies the excluded DNs (like cn=admin, ...).
*/
@@ -563,16 +562,16 @@
* @throws DirectoryException
* if a database problem occurred
*/
- private String findCookie(int startDraftCN) throws ChangelogException,
+ private String findCookie(final int startDraftCN) throws ChangelogException,
DirectoryException
{
- DraftCNDbHandler draftCNDb = replicationServer.getDraftCNDbHandler();
+ ChangelogDB changelogDB = replicationServer.getChangelogDB();
if (startDraftCN <= 1)
{
// Request filter DOES NOT contain any firstDraftCN
// So we'll generate from the first DraftCN in the DraftCNdb
- if (draftCNDb.isEmpty())
+ if (changelogDB.isEmpty())
{
// FIXME JNR if we find a way to make draftCNDb.isEmpty() a non costly
// operation, then I think we can move this check to the top of this
@@ -581,21 +580,20 @@
return null;
}
- final int firstKey = draftCNDb.getFirstKey();
- String crossDomainStartState = draftCNDb.getValue(firstKey);
- draftCNDbIter = draftCNDb.generateIterator(firstKey);
+ final int firstKey = changelogDB.getFirstKey();
+ String crossDomainStartState = changelogDB.getPreviousCookie(firstKey);
+ changelogDBIter = changelogDB.generateIterator(firstKey);
return crossDomainStartState;
}
// Request filter DOES contain a startDraftCN
// Read the draftCNDb to see whether it contains startDraftCN
- final int startDraftCNKey = startDraftCN;
- String crossDomainStartState = draftCNDb.getValue(startDraftCNKey);
+ String crossDomainStartState = changelogDB.getPreviousCookie(startDraftCN);
if (crossDomainStartState != null)
{
// found the provided startDraftCN, let's return it
- draftCNDbIter = draftCNDb.generateIterator(startDraftCNKey);
+ changelogDBIter = changelogDB.generateIterator(startDraftCN);
return crossDomainStartState;
}
@@ -614,10 +612,10 @@
// the DB, let's use the lower limit.
if (startDraftCN < firstDraftCN)
{
- crossDomainStartState = draftCNDb.getValue(firstDraftCN);
+ crossDomainStartState = changelogDB.getPreviousCookie(firstDraftCN);
if (crossDomainStartState != null)
{
- draftCNDbIter = draftCNDb.generateIterator(firstDraftCN);
+ changelogDBIter = changelogDB.generateIterator(firstDraftCN);
return crossDomainStartState;
}
@@ -629,15 +627,15 @@
{
// startDraftCN is between first and potential last and has never
// been returned yet
- if (draftCNDb.isEmpty())
+ if (changelogDB.isEmpty())
{
isEndOfDraftCNReached = true;
return null;
}
- final int lastKey = draftCNDb.getLastKey();
- crossDomainStartState = draftCNDb.getValue(lastKey);
- draftCNDbIter = draftCNDb.generateIterator(lastKey);
+ final int lastKey = changelogDB.getLastKey();
+ crossDomainStartState = changelogDB.getPreviousCookie(lastKey);
+ changelogDBIter = changelogDB.generateIterator(lastKey);
return crossDomainStartState;
// TODO:ECL ... ok we'll start from the end of the draftCNDb BUT ...
@@ -895,7 +893,7 @@
public void shutdown()
{
if (debugEnabled())
- TRACER.debugInfo(this + " shutdown()" + draftCNDbIter);
+ TRACER.debugInfo(this + " shutdown()");
releaseIterator();
for (DomainContext domainCtxt : domainCtxts) {
if (!domainCtxt.unRegisterHandler()) {
@@ -911,10 +909,10 @@
private void releaseIterator()
{
- if (this.draftCNDbIter != null)
+ if (this.changelogDBIter != null)
{
- this.draftCNDbIter.releaseCursor();
- this.draftCNDbIter = null;
+ this.changelogDBIter.close();
+ this.changelogDBIter = null;
}
}
@@ -1374,8 +1372,8 @@
// the next change from the DraftCN db
- ChangeNumber cnFromDraftCNDb = draftCNDbIter.getChangeNumber();
- String dnFromDraftCNDb = draftCNDbIter.getBaseDN();
+ ChangeNumber cnFromDraftCNDb = changelogDBIter.getChangeNumber();
+ String dnFromDraftCNDb = changelogDBIter.getBaseDN();
if (debugEnabled())
TRACER.debugInfo("getNextECLUpdate generating draftCN "
@@ -1390,10 +1388,10 @@
{
if (debugEnabled())
TRACER.debugInfo("getNextECLUpdate generating draftCN "
- + " assigning draftCN=" + draftCNDbIter.getDraftCN()
+ + " assigning draftCN=" + changelogDBIter.getDraftCN()
+ " to change=" + oldestChange);
- oldestChange.setDraftChangeNumber(draftCNDbIter.getDraftCN());
+ oldestChange.setDraftChangeNumber(changelogDBIter.getDraftCN());
return true;
}
@@ -1422,12 +1420,12 @@
+ " will skip " + cnFromDraftCNDb
+ " and read next change from the DraftCNDb.");
- isEndOfDraftCNReached = !draftCNDbIter.next();
+ isEndOfDraftCNReached = !changelogDBIter.next();
if (debugEnabled())
TRACER.debugInfo("getNextECLUpdate generating draftCN "
- + " has skipped to " + " sn=" + draftCNDbIter.getDraftCN()
- + " cn=" + draftCNDbIter.getChangeNumber()
+ + " has skipped to " + " sn=" + changelogDBIter.getDraftCN()
+ + " cn=" + changelogDBIter.getChangeNumber()
+ " End of draftCNDb ?" + isEndOfDraftCNReached);
}
catch (ChangelogException e)
@@ -1456,10 +1454,10 @@
// generate a new draftCN and assign to this change
change.setDraftChangeNumber(replicationServer.getNewDraftCN());
- // store in DraftCNdb the pair
+ // store in changelogDB the pair
// (DraftCN of the current change, state before this change)
- DraftCNDbHandler draftCNDb = replicationServer.getDraftCNDbHandler();
- draftCNDb.add(
+ ChangelogDB changelogDB = replicationServer.getChangelogDB();
+ changelogDB.add(
change.getDraftChangeNumber(),
previousCookie.toString(),
change.getBaseDN(),
--
Gitblit v1.10.0