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