From 081fae74bd4e0e2a5dcb01ed004e8c7b43a590db Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 22 Sep 2014 14:25:44 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206: Create a new ReplicationBackend/ChangelogBackend   to support cn=changelog

---
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java |   26 ++++++++++++++++++++------
 1 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
index 0998c10..47887b9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -707,10 +707,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())
@@ -724,11 +738,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