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