From 617fe1eab356125bc82c7bac69a322f5a29fbdc8 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Mon, 20 Dec 2010 21:07:50 +0000
Subject: [PATCH] Fix for OPENDJ-3 - persistent search option for cn=changelog The persistent search option for cn=changelog was only working with specific options that are not the default ones. More specifically, it wouldn't work in ChangesOnly mode (returning error 53: Unwilling to perform). Those changes are resolving the issues, fix a typo in a comment and changed code order and test to avoid double negatives.

---
 opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java |    8 ++++----
 opends/src/server/org/opends/server/replication/server/ECLServerHandler.java                  |    1 +
 opends/src/server/org/opends/server/replication/protocol/StartECLSessionMsg.java              |    2 +-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/protocol/StartECLSessionMsg.java b/opends/src/server/org/opends/server/replication/protocol/StartECLSessionMsg.java
index dc572e3..050b6d9 100644
--- a/opends/src/server/org/opends/server/replication/protocol/StartECLSessionMsg.java
+++ b/opends/src/server/org/opends/server/replication/protocol/StartECLSessionMsg.java
@@ -78,7 +78,7 @@
 
   /**
    * This specifies that the request on the ECL is a PERSISTENT search
-   * with changesOnly = false.
+   * with changesOnly = true.
    */
   public final static short PERSISTENT_CHANGES_ONLY = 2;
 
diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 92a3123..bb90431 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -745,6 +745,7 @@
             StartECLSessionMsg.PERSISTENT_CHANGES_ONLY)
           {
             newDomainCtxt.startState = rsd.getEligibleState(eligibleCN, true);
+            startStatesFromProvidedCookie.remove(rsd.getBaseDn());
           }
           else
           {
diff --git a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index f351404..62244c2 100644
--- a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -545,12 +545,12 @@
 
           // If we're only interested in changes, then we don't actually want
           // to process the search now.
-          if (!psearchControl.getChangesOnly())
-            startECLSessionMsg.setPersistent(
-                StartECLSessionMsg.PERSISTENT);
-          else
+          if (psearchControl.getChangesOnly())
             startECLSessionMsg.setPersistent(
                 StartECLSessionMsg.PERSISTENT_CHANGES_ONLY);
+          else
+            startECLSessionMsg.setPersistent(
+                StartECLSessionMsg.PERSISTENT);
         }
         else if (oid.equals(OID_LDAP_SUBENTRIES))
         {

--
Gitblit v1.10.0