From f2666e9996dbbbf77126a7ee9958e124d1c87762 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 02 Sep 2014 12:29:02 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend to support cn=changelog
---
opends/src/server/org/opends/server/replication/server/ReplicationServer.java | 26 ++++++++++++++++++++------
1 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index aa3120d..47be53a 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -625,10 +625,24 @@
*/
public void validateServerState(MultiDomainServerState state, Set<DN> ignoredBaseDNs) throws DirectoryException
{
- // TODO : should skip unused domains, where domain.getLatestServerState(); is empty
- final Set<DN> domains = getDomainDNs(ignoredBaseDNs);
- final Set<DN> stateDomains = state.getSnapshot().keySet();
- final Set<DN> domainsCopy = new HashSet<DN>(domains);
+ // Build the two sets of DNs to compare
+ final Set<DN> activeServerDomains = new HashSet<DN>();
+ for (final DN dn : getDomainDNs(ignoredBaseDNs))
+ {
+ final ServerState lastServerState = getReplicationServerDomain(dn).getLatestServerState();
+ if (!lastServerState.isEmpty())
+ {
+ activeServerDomains.add(dn);
+ }
+ }
+ final Set<DN> stateDomains = new HashSet<DN>();
+ for (final DN dn : state)
+ {
+ stateDomains.add(dn);
+ }
+
+ // The two sets of DNs are expected to be the same. Check this.
+ final Set<DN> domainsCopy = new HashSet<DN>(activeServerDomains);
final Set<DN> stateDomainsCopy = new HashSet<DN>(stateDomains);
domainsCopy.removeAll(stateDomains);
if (!domainsCopy.isEmpty())
@@ -642,11 +656,11 @@
ERR_RESYNC_REQUIRED_MISSING_DOMAIN_IN_PROVIDED_COOKIE.get(
missingDomains, "<" + state.toString() + missingDomains + ">"));
}
- stateDomainsCopy.removeAll(domains);
+ stateDomainsCopy.removeAll(activeServerDomains);
if (!stateDomainsCopy.isEmpty())
{
final StringBuilder startState = new StringBuilder();
- for (DN dn : domains) {
+ for (DN dn : activeServerDomains) {
startState.append(dn).append(":").append(state.getServerState(dn).toString()).append(";");
}
throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
--
Gitblit v1.10.0