From 242140c76ae803f9d876aba8d07e60a104611e6d Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Wed, 22 Apr 2015 09:52:42 +0000
Subject: [PATCH] OPENDJ-1958: Online Import doesn't work with new backend.
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ImportIDSet.java | 19 ++++++++++++++++---
1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ImportIDSet.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ImportIDSet.java
index d00cfad..14fc3d3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ImportIDSet.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ImportIDSet.java
@@ -134,17 +134,30 @@
checkNotNull(importIdSet, "importIdSet must not be null");
boolean definedBeforeMerge = isDefined();
- final long mergedSize = size() + importIdSet.size();
+ final long mergedSize = addWithoutOverflow(entryIDSet.size(), importIdSet.entryIDSet.size());
- if (!importIdSet.isDefined() || mergedSize > indexEntryLimitSize) {
+ if (!definedBeforeMerge || !importIdSet.isDefined() || mergedSize > indexEntryLimitSize)
+ {
entryIDSet = maintainCount ? newUndefinedSetWithSize(key, mergedSize) : newUndefinedSetWithKey(key);
return definedBeforeMerge;
- } else if (isDefined() || maintainCount){
+ }
+ else if (isDefined() || maintainCount)
+ {
entryIDSet.addAll(importIdSet.entryIDSet);
}
return false;
}
+ private static long addWithoutOverflow(long a, long b) {
+ /** a and b must be > 0 */
+ final boolean willAdditionOverflow = (~(a ^ b) & (a ^ (a + b))) < 0;
+ if (willAdditionOverflow) {
+ return Long.MAX_VALUE;
+ }
+ return a + b;
+ }
+
+
/**
* @return The current size of an import ID set.
* @throws IllegalStateException if this set is undefined
--
Gitblit v1.10.0