From 513eb83896bf4654aa0e3628c2666e307712a8cc Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 04 Dec 2013 14:47:03 +0000
Subject: [PATCH] ChangeNumberIndexer.java: In run(), made sure all cursors are properly closed, even in case of a RuntimeException terminating the thread. Moved resetNextChangeForInsertDBCursor() out of removeAllCursors(). In removeAllCursors(), closed the CompositeDBCursor.
---
opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java | 10 +++++++++-
opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java | 14 +++++++++++---
opends/src/server/org/opends/server/replication/server/ServerHandler.java | 4 ++--
3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ServerHandler.java b/opends/src/server/org/opends/server/replication/server/ServerHandler.java
index 8557f48..ca0195e 100644
--- a/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -145,7 +145,7 @@
/**
* The associated ServerWriter that sends messages to the remote server.
*/
- protected ServerWriter writer = null;
+ protected ServerWriter writer;
/**
* The associated ServerReader that receives messages from the remote server.
@@ -202,7 +202,7 @@
/**
* Set when ServerWriter is stopping.
*/
- protected boolean shutdownWriter = false;
+ protected volatile boolean shutdownWriter = false;
/**
* Weight of this remote server.
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
index 378e942..76d47bf 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
@@ -365,6 +365,7 @@
if (doClear.get())
{
removeAllCursors();
+ resetNextChangeForInsertDBCursor();
// No need to use CAS here because it is only for unit tests and at
// this point all will have been cleaned up anyway.
doClear.set(false);
@@ -434,7 +435,6 @@
Thread.currentThread().interrupt();
}
}
- removeAllCursors();
}
catch (ChangelogException e)
{
@@ -448,6 +448,10 @@
TRACER.debugCaught(DebugLogLevel.ERROR, e);
// TODO JNR error message i18n
}
+ finally
+ {
+ removeAllCursors();
+ }
}
private void moveForwardMediumConsistencyPoint(final CSN csn, final DN baseDN)
@@ -467,15 +471,19 @@
}
}
- private void removeAllCursors() throws ChangelogException
+ private void removeAllCursors()
{
+ if (nextChangeForInsertDBCursor != null)
+ {
+ nextChangeForInsertDBCursor.close();
+ nextChangeForInsertDBCursor = null;
+ }
for (Map<Integer, DBCursor<UpdateMsg>> map : allCursors.values())
{
StaticUtils.close(map.values());
}
allCursors.clear();
newCursors.clear();
- resetNextChangeForInsertDBCursor();
}
private void removeCursor(final DN baseDN, final CSN csn)
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 f502a7c..4402947 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
@@ -96,7 +96,15 @@
@Override
public boolean next() throws ChangelogException
{
- currentChange = cursor.next();
+ if (cursor != null)
+ {
+ currentChange = cursor.next();
+ }
+ else
+ {
+ currentChange = null;
+ }
+
if (currentChange != null)
{
--
Gitblit v1.10.0