From 7922522bc5ffbc5830f47d2937aee5d5e70a1573 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 29 Jan 2016 09:56:34 +0000
Subject: [PATCH] OPENDJ-2553 Constrain VLV index range queries when evaluating searches without VLV controls

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java
index 94207fe..389c014 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java
@@ -28,6 +28,7 @@
 
 import static org.opends.messages.BackendMessages.*;
 import static org.opends.server.backends.pluggable.EntryIDSet.*;
+import static org.opends.server.backends.pluggable.IndexFilter.*;
 import static org.opends.server.util.StaticUtils.*;
 
 import java.io.Closeable;
@@ -507,11 +508,16 @@
 
   private EntryIDSet evaluateNonVLVRequest(final ReadableTransaction txn, final StringBuilder debugBuilder)
   {
-    try (Cursor<ByteString, ByteString> cursor = txn.openCursor(getName()))
+    // prevents creating a very large long array holding all the entries stored in the VLV index (see readRange())
+    final int entryCount = getEntryCount(txn);
+    if (entryCount <= CURSOR_ENTRY_LIMIT)
     {
-      if (cursor.next())
+      try (Cursor<ByteString, ByteString> cursor = txn.openCursor(getName()))
       {
-        return newDefinedSet(readRange(cursor, getEntryCount(txn), debugBuilder));
+        if (cursor.next())
+        {
+          return newDefinedSet(readRange(cursor, entryCount, debugBuilder));
+        }
       }
     }
     return null;

--
Gitblit v1.10.0