From 439544d24d842c19a0792f2612b5b088d992fc65 Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Tue, 25 Aug 2009 08:39:19 +0000
Subject: [PATCH] Fix 4184 ECL: lastExternalChangelogCookie contains info about private naming contexts

---
 opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java b/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
index 64cbf3e..8bf4b39 100644
--- a/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
+++ b/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -27,6 +27,7 @@
 
 package org.opends.server.replication.common;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -39,7 +40,8 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SearchOperation;
-import org.opends.server.replication.server.ExternalChangeLogSessionImpl;
+import org.opends.server.replication.plugin.MultimasterReplication;
+import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.AttributeValues;
 import org.opends.server.types.ByteString;
@@ -48,6 +50,7 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.VirtualAttributeRule;
+import org.opends.server.util.ServerConstants;
 import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 
 /**
@@ -133,15 +136,21 @@
       DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
       if (eclwe!=null)
       {
-        ExternalChangeLogSessionImpl eclsession =
-          new ExternalChangeLogSessionImpl(eclwe.getReplicationServer());
+        // Set a list of excluded domains (also exclude 'cn=changelog' itself)
+        ArrayList<String> excludedDomains =
+          MultimasterReplication.getPrivateDomains();
+        if (!excludedDomains.contains(
+            ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT))
+          excludedDomains.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
 
-        String lastCookie = eclsession.getLastCookie().toString();
+        ReplicationServer rs = eclwe.getReplicationServer();
+        MultiDomainServerState lastCookie =
+          rs.getLastECLCookie(excludedDomains);
 
         AttributeValue value =
           AttributeValues.create(
-              ByteString.valueOf(lastCookie),
-              ByteString.valueOf(lastCookie));
+              ByteString.valueOf(lastCookie.toString()),
+              ByteString.valueOf(lastCookie.toString()));
         values=Collections.singleton(value);
       }
       return values;

--
Gitblit v1.10.0