From 8450174dd75bdb76c85bac9f8a9a9850751e6d50 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 29 Jun 2015 08:57:51 +0000
Subject: [PATCH] OPENDJ-2179 (CR-7413) ECL: full resync step is no longer valid
---
opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java | 40 ++++++++++++++++++----------------------
1 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java
index 67bebbc..bb8e197 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java
@@ -54,7 +54,11 @@
import org.opends.server.replication.common.MultiDomainServerState;
import org.opends.server.replication.common.ServerState;
import org.opends.server.replication.plugin.MultimasterReplication;
-import org.opends.server.replication.protocol.*;
+import org.opends.server.replication.protocol.ReplServerStartMsg;
+import org.opends.server.replication.protocol.ReplSessionSecurity;
+import org.opends.server.replication.protocol.ReplicationMsg;
+import org.opends.server.replication.protocol.ServerStartMsg;
+import org.opends.server.replication.protocol.Session;
import org.opends.server.replication.server.changelog.api.ChangeNumberIndexDB;
import org.opends.server.replication.server.changelog.api.ChangeNumberIndexRecord;
import org.opends.server.replication.server.changelog.api.ChangelogDB;
@@ -63,7 +67,12 @@
import org.opends.server.replication.server.changelog.file.FileChangelogDB;
import org.opends.server.replication.server.changelog.je.JEChangelogDB;
import org.opends.server.replication.service.DSRSShutdownSync;
-import org.opends.server.types.*;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.HostPort;
+import org.opends.server.types.SearchFilter;
+import org.opends.server.types.VirtualAttributeRule;
/**
* ReplicationServer Listener. This singleton is the main object of the
@@ -616,7 +625,6 @@
final Set<DN> activeDomains = getDNsOfActiveDomainsInServer(ignoredBaseDNs);
final Set<DN> cookieDomains = getDNsOfCookie(cookie);
- checkNoActiveDomainIsMissingInCookie(cookie, activeDomains, cookieDomains);
checkNoUnknownDomainIsProvidedInCookie(cookie, activeDomains, cookieDomains);
checkCookieIsNotOutdated(cookie, activeDomains);
}
@@ -662,24 +670,6 @@
}
}
- private void checkNoActiveDomainIsMissingInCookie(final MultiDomainServerState cookie, final Set<DN> activeDomains,
- final Set<DN> cookieDomains) throws DirectoryException
- {
- if (!cookieDomains.containsAll(activeDomains))
- {
- final Set<DN> missingActiveDomains = new HashSet<DN>(activeDomains);
- missingActiveDomains.removeAll(cookieDomains);
- final StringBuilder missingDomains = new StringBuilder();
- for (DN domainDN : missingActiveDomains)
- {
- missingDomains.append(domainDN).append(":;");
- }
- throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
- ERR_RESYNC_REQUIRED_MISSING_DOMAIN_IN_PROVIDED_COOKIE.get(
- missingDomains, "<" + cookie + missingDomains + ">"));
- }
- }
-
private void checkCookieIsNotOutdated(final MultiDomainServerState cookie, final Set<DN> activeDomains)
throws DirectoryException
{
@@ -696,8 +686,14 @@
/** Check that provided cookie is not outdated compared to the oldest state of a domain. */
private boolean isCookieOutdatedForDomain(MultiDomainServerState cookie, DN domainDN)
{
- final ServerState domainOldestState = getReplicationServerDomain(domainDN).getOldestState();
final ServerState providedState = cookie.getServerState(domainDN);
+ if (providedState == null)
+ {
+ // missing domains do not invalidate a cookie.
+ // results will include all the changes of the missing domains
+ return false;
+ }
+ final ServerState domainOldestState = getReplicationServerDomain(domainDN).getOldestState();
for (final CSN oldestCsn : domainOldestState)
{
final CSN providedCsn = providedState.getCSN(oldestCsn.getServerId());
--
Gitblit v1.10.0