From 7491660c4613e270d1d67505ebf03a5d56fb830b Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 23 Jul 2014 15:15:22 +0000
Subject: [PATCH] OPENDJ-1441 (CR-4037) Persistent searches on external changelog do not return changes for new replicas and new domains
---
opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
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 36b3d5b..eae5638 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
@@ -343,13 +343,12 @@
{
/*
* initialize with the oldest possible CSN in order for medium
- * consistency to wait for all replicas to be alive before moving
- * forward
+ * consistency to wait for all replicas to be alive before moving forward
*/
lastAliveCSNs.update(baseDN, oldestPossibleCSN(serverId));
}
- ServerState latestKnownState = domainDB.getDomainNewestCSNs(baseDN);
+ final ServerState latestKnownState = domainDB.getDomainNewestCSNs(baseDN);
lastAliveCSNs.update(baseDN, latestKnownState);
}
}
@@ -360,14 +359,20 @@
if (newestRecord != null)
{
// restore the "previousCookie" state before shutdown
- final UpdateMsg record = nextChangeForInsertDBCursor.getRecord();
+ UpdateMsg record = nextChangeForInsertDBCursor.getRecord();
+ if (record instanceof ReplicaOfflineMsg)
+ {
+ // ignore: replica offline messages are never stored in the CNIndexDB
+ nextChangeForInsertDBCursor.next();
+ record = nextChangeForInsertDBCursor.getRecord();
+ }
+
// sanity check: ensure that when initializing the cursors at the previous
// cookie, the next change we find is the newest record in the CNIndexDB
if (!record.getCSN().equals(newestRecord.getCSN()))
{
- throw new ChangelogException(
- ERR_CHANGE_NUMBER_INDEXER_INCONSISTENT_CSN_READ.get(newestRecord
- .getCSN().toStringUI(), record.getCSN().toStringUI()));
+ throw new ChangelogException(ERR_CHANGE_NUMBER_INDEXER_INCONSISTENT_CSN_READ.get(
+ newestRecord.getCSN().toStringUI(), record.getCSN().toStringUI()));
}
// Now we can update the mediumConsistencyRUV
mediumConsistencyRUV.update(newestRecord.getBaseDN(), record.getCSN());
@@ -417,8 +422,7 @@
{
/*
* initialize here to allow fast application start up and avoid errors due
- * cursors being created in a different thread to the one where they are
- * used.
+ * cursors being created in a different thread to the one where they are used.
*/
initialize();
--
Gitblit v1.10.0