From 37fd83b785c0993b0e1f0fb93777943a9ec46d83 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 11 Jul 2014 10:04:22 +0000
Subject: [PATCH] OPENDJ-1453 Replica offline messages should be synced with updates
---
opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java | 19 ++++++++++---------
1 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
index 19317bb..2ece66c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
@@ -38,6 +38,7 @@
import org.opends.server.admin.std.server.ReplicationServerCfg;
import org.opends.server.api.DirectoryThread;
import org.opends.server.replication.common.CSN;
+import org.opends.server.replication.common.MultiDomainServerState;
import org.opends.server.replication.common.ServerState;
import org.opends.server.replication.protocol.UpdateMsg;
import org.opends.server.replication.server.ChangelogState;
@@ -310,7 +311,7 @@
{
final File dbDir = getFileForPath(config.getReplicationDBDirectory());
dbEnv = new ReplicationDbEnv(dbDir.getAbsolutePath(), replicationServer);
- final ChangelogState changelogState = dbEnv.readChangelogState();
+ final ChangelogState changelogState = dbEnv.getChangelogState();
initializeToChangelogState(changelogState);
if (config.isComputeChangeNumber())
{
@@ -333,7 +334,7 @@
{
replicationServer.getReplicationServerDomain(entry.getKey(), true).initGenerationID(entry.getValue());
}
- for (Map.Entry<DN, List<Integer>> entry : changelogState.getDomainToServerIds().entrySet())
+ for (Map.Entry<DN, Set<Integer>> entry : changelogState.getDomainToServerIds().entrySet())
{
for (int serverId : entry.getValue())
{
@@ -634,7 +635,7 @@
{
if (computeChangeNumber)
{
- startIndexer(dbEnv.readChangelogState());
+ startIndexer(dbEnv.getChangelogState());
}
else
{
@@ -697,14 +698,14 @@
throws ChangelogException
{
final Set<Integer> serverIds = getDomainMap(baseDN).keySet();
- final ChangelogState state = dbEnv.readChangelogState();
+ final MultiDomainServerState offlineReplicas = dbEnv.getChangelogState().getOfflineReplicas();
final Map<DBCursor<UpdateMsg>, Void> cursors = new HashMap<DBCursor<UpdateMsg>, Void>(serverIds.size());
for (int serverId : serverIds)
{
// get the last already sent CSN from that server to get a cursor
final CSN lastCSN = startAfterServerState != null ? startAfterServerState.getCSN(serverId) : null;
final DBCursor<UpdateMsg> replicaDBCursor = getCursorFrom(baseDN, serverId, lastCSN);
- final CSN offlineCSN = getOfflineCSN(state, baseDN, serverId, startAfterServerState);
+ final CSN offlineCSN = getOfflineCSN(offlineReplicas, baseDN, serverId, startAfterServerState);
cursors.put(new ReplicaOfflineCursor(replicaDBCursor, offlineCSN), null);
}
// recycle exhausted cursors,
@@ -712,13 +713,13 @@
return new CompositeDBCursor<Void>(cursors, true);
}
- private CSN getOfflineCSN(final ChangelogState state, DN baseDN, int serverId,
+ private CSN getOfflineCSN(final MultiDomainServerState offlineReplicas, DN baseDN, int serverId,
ServerState startAfterServerState)
{
- final List<CSN> domain = state.getOfflineReplicas().get(baseDN);
- if (domain != null)
+ final ServerState domainState = offlineReplicas.getServerState(baseDN);
+ if (domainState != null)
{
- for (CSN offlineCSN : domain)
+ for (CSN offlineCSN : domainState)
{
if (serverId == offlineCSN.getServerId()
&& !startAfterServerState.cover(offlineCSN))
--
Gitblit v1.10.0