From abbdffd7e86953f89c3469bcfc659d842fb785f6 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 09 Oct 2013 14:57:21 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB
---
opends/src/server/org/opends/server/replication/server/MessageHandler.java | 5 +++++
opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java | 2 +-
opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java | 17 +++++------------
opends/src/server/org/opends/server/replication/server/ReplicationBackend.java | 6 ++++++
opends/src/server/org/opends/server/replication/server/changelog/api/ReplicaDBCursor.java | 4 +++-
5 files changed, 20 insertions(+), 14 deletions(-)
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 07f2371..ddd2ec4 100644
--- a/opends/src/server/org/opends/server/replication/server/MessageHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/MessageHandler.java
@@ -40,6 +40,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.ChangelogException;
import org.opends.server.replication.server.changelog.api.ReplicaDBCursor;
import org.opends.server.types.*;
@@ -305,6 +306,10 @@
lateQueue.add(cursor.getChange());
}
}
+ catch (ChangelogException e)
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
finally
{
close(cursor);
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java b/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
index f8a9cac..26a8834 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
@@ -50,6 +50,7 @@
import org.opends.server.replication.plugin.MultimasterReplication;
import org.opends.server.replication.plugin.ReplicationServerListener;
import org.opends.server.replication.protocol.*;
+import org.opends.server.replication.server.changelog.api.ChangelogException;
import org.opends.server.replication.server.changelog.api.ReplicaDBCursor;
import org.opends.server.types.*;
import org.opends.server.util.*;
@@ -622,6 +623,7 @@
private void writeChangesAfterCSN(ReplicationServerDomain rsDomain,
final LDIFExportConfig exportConfig, LDIFWriter ldifWriter,
SearchOperation searchOperation, final CSN previousCSN)
+ throws DirectoryException
{
if (exportConfig != null && exportConfig.isCancelled())
{ // Abort if cancelled
@@ -651,6 +653,10 @@
cursor.next();
}
}
+ catch (ChangelogException e)
+ {
+ throw new DirectoryException(ResultCode.OPERATIONS_ERROR, e);
+ }
finally
{
close(cursor);
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 655de4a..562927e 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
@@ -51,8 +51,10 @@
* Go to the next change in the ReplicaDB or in the server Queue.
*
* @return false if the cursor is already on the last change before this call.
+ * @throws ChangelogException
+ * When database exception raised.
*/
- boolean next();
+ boolean next() throws ChangelogException;
/**
* Release the resources and locks used by this cursor. This method must be
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java b/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
index e7f09eb..5ecd3c1 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
@@ -102,7 +102,7 @@
}
@Override
- public boolean next()
+ public boolean next() throws ChangelogException
{
if (cursors.isEmpty())
{
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 03355df..f189fd1 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
@@ -94,7 +94,7 @@
/** {@inheritDoc} */
@Override
- public boolean next()
+ public boolean next() throws ChangelogException
{
currentChange = cursor.next();
@@ -112,18 +112,11 @@
cursor = null;
}
replicaDB.flush();
- try
+ cursor = db.openReadCursor(lastNonNullCurrentCSN);
+ currentChange = cursor.next();
+ if (currentChange != null)
{
- cursor = db.openReadCursor(lastNonNullCurrentCSN);
- currentChange = cursor.next();
- if (currentChange != null)
- {
- lastNonNullCurrentCSN = currentChange.getCSN();
- }
- }
- catch(Exception e)
- {
- currentChange = null;
+ lastNonNullCurrentCSN = currentChange.getCSN();
}
}
}
--
Gitblit v1.10.0