From db02e3b120abd8f5e090c3f60b4a4b92508db504 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 22 Dec 2014 11:19:12 +0000
Subject: [PATCH] Fix OPENDJ-1709: Persistit: ldapsearch returns second entry twice

---
 opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java |   22 +++-------------------
 1 files changed, 3 insertions(+), 19 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java b/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
index d1ddb79..b06bd13 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
@@ -286,7 +286,6 @@
 
     private final class CursorImpl implements Cursor {
         private final Exchange ex;
-        private boolean useCurrentKeyForNext = false;
         private ByteString currentKey;
         private ByteString currentValue;
 
@@ -305,10 +304,8 @@
             bytesToKey(ex.getKey(), key);
             try {
                 ex.fetch();
-                useCurrentKeyForNext = ex.getValue().isDefined();
-                return useCurrentKeyForNext;
+        return ex.getValue().isDefined();
             } catch (PersistitException e) {
-                useCurrentKeyForNext = false;
                 throw new StorageRuntimeException(e);
             }
         }
@@ -319,15 +316,8 @@
             bytesToKey(ex.getKey(), key);
             try {
                 ex.fetch();
-                if (ex.getValue().isDefined()) {
-                    useCurrentKeyForNext = true;
-                } else {
-                    // provided key does not exist, look for next key
-                    useCurrentKeyForNext = ex.next();
-                }
-                return useCurrentKeyForNext;
+        return ex.getValue().isDefined() || ex.next();
             } catch (PersistitException e) {
-                useCurrentKeyForNext = false;
                 throw new StorageRuntimeException(e);
             }
         }
@@ -337,10 +327,8 @@
             try {
                 clearCurrentKeyAndValue();
                 ex.getKey().to(Key.AFTER);
-                useCurrentKeyForNext = ex.previous() && ex.getValue().isDefined();
-                return useCurrentKeyForNext;
+        return ex.previous();
             } catch (PersistitException e) {
-                useCurrentKeyForNext = false;
                 throw new StorageRuntimeException(e);
             }
         }
@@ -348,10 +336,6 @@
         @Override
         public boolean next() {
             clearCurrentKeyAndValue();
-            if (useCurrentKeyForNext) {
-                useCurrentKeyForNext = false;
-                return true;
-            }
             try {
                 return ex.next();
             } catch (PersistitException e) {

--
Gitblit v1.10.0