From a594eae911ce9693d627af0bf144c879ba97b034 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 06 Nov 2014 15:57:47 +0000
Subject: [PATCH] OPENDJ-1623 NullPointerException while doing psearch (with changesonly=false) on cn=changelog

---
 opendj3-server-dev/src/server/org/opends/server/backends/ChangelogBackend.java |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/ChangelogBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/ChangelogBackend.java
index ccfd346..0d8c740 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/ChangelogBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/ChangelogBackend.java
@@ -755,6 +755,8 @@
 
   /**
    * Optimize the search parameters by analyzing the DN and filter.
+   * It also performs validation on some search parameters
+   * for both cookie and change number based changelogs.
    *
    * @param baseDN the provided search baseDN.
    * @param userFilter the provided search filter.
@@ -912,8 +914,7 @@
           entrySender.cookie, GREATER_THAN_OR_EQUAL_TO_KEY, AFTER_MATCHING_KEY, entrySender.excludedBaseDNs);
       replicaUpdatesCursor = new ECLMultiDomainDBCursor(domainPredicate, cursor);
 
-      final boolean continueSearch = sendCookieEntriesFromCursor(entrySender, replicaUpdatesCursor);
-      if (continueSearch)
+      if (sendCookieEntriesFromCursor(entrySender, replicaUpdatesCursor))
       {
         entrySender.transitioningToPersistentSearchPhase();
         sendCookieEntriesFromCursor(entrySender, replicaUpdatesCursor);
@@ -985,14 +986,11 @@
     // Validation must be done during registration for changes only persistent searches.
     // Otherwise, when there is an initial search phase,
     // validation is performed by the search() method.
-    ChangeNumberRange range = null;
     if (pSearch.isChangesOnly())
     {
       checkChangelogReadPrivilege(searchOp);
-      // next line also validates some search parameters
-      range = optimizeSearch(searchOp.getBaseDN(), searchOp.getFilter());
     }
-
+    final ChangeNumberRange range = optimizeSearch(searchOp.getBaseDN(), searchOp.getFilter());
 
     final SearchPhase startPhase = pSearch.isChangesOnly() ? SearchPhase.PERSISTENT : SearchPhase.INITIAL;
     if (isCookieBased(searchOp))
@@ -1071,10 +1069,9 @@
     try
     {
       cnIndexDBCursor = getCNIndexDBCursor(entrySender.lowestChangeNumber);
-      MultiDomainServerState cookie = new MultiDomainServerState();
-      final boolean continueSearch =
-          sendChangeNumberEntriesFromCursors(entrySender, cnIndexDBCursor, replicaUpdatesCursor, cookie);
-      if (continueSearch)
+      final MultiDomainServerState cookie = new MultiDomainServerState();
+
+      if (sendChangeNumberEntriesFromCursors(entrySender, cnIndexDBCursor, replicaUpdatesCursor, cookie))
       {
         entrySender.transitioningToPersistentSearchPhase();
         sendChangeNumberEntriesFromCursors(entrySender, cnIndexDBCursor, replicaUpdatesCursor, cookie);

--
Gitblit v1.10.0