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