From 9f0904fda87bfcf921deeccdbaeafe834fbad696 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Fri, 24 Apr 2015 14:30:47 +0000
Subject: [PATCH] OPENDJ-1725: Persistit: very long recovery and many discarded txns after addrate test
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ImportIDSet.java | 53 +++++++++++++++++++++--------------------------------
1 files changed, 21 insertions(+), 32 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 d0bc347..adccc4e 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
@@ -50,20 +50,22 @@
private final ByteSequence key;
/** The index entry limit size. */
private final int indexEntryLimitSize;
- /** Set to true if a count of ids above the index entry limit should be kept. */
- private final boolean maintainCount;
/**
* Create an import ID set managing the entry limit of the provided EntryIDSet.
*
- * @param key The key associated to this ID set
- * @param entryIDSet The entryIDSet that will be managed by this object
- * @param limit The index entry limit or 0 if unlimited.
- * @param maintainCount whether to maintain the count when size is undefined.
- * @throws NullPointerException if key or entryIDSet is null
- * @throws IllegalArgumentException if limit is < 0
+ * @param key
+ * The key associated to this ID set
+ * @param entryIDSet
+ * The entryIDSet that will be managed by this object
+ * @param limit
+ * The index entry limit or 0 if unlimited.
+ * @throws NullPointerException
+ * if key or entryIDSet is null
+ * @throws IllegalArgumentException
+ * if limit is < 0
*/
- public ImportIDSet(ByteSequence key, EntryIDSet entryIDSet, int limit, boolean maintainCount)
+ public ImportIDSet(ByteSequence key, EntryIDSet entryIDSet, int limit)
{
checkNotNull(key, "key must not be null");
checkNotNull(entryIDSet, "entryIDSet must not be null");
@@ -73,7 +75,6 @@
this.entryIDSet = entryIDSet;
// FIXME: What to do if entryIDSet.size()> limit yet ?
this.indexEntryLimitSize = limit == 0 ? Integer.MAX_VALUE : limit;
- this.maintainCount = maintainCount;
}
/**
@@ -88,10 +89,6 @@
entryIDSet = newUndefinedSetWithKey(key);
}
- private void setUndefinedWithSize(final long newSize) {
- entryIDSet = maintainCount ? newUndefinedSetWithSize(key, newSize) : newUndefinedSetWithKey(key);
- }
-
/**
* @param entryID The entry ID to add to an import ID set.
* @throws NullPointerException if entryID is null
@@ -105,10 +102,13 @@
*/
void addEntryID(long entryID)
{
- Reject.ifTrue(entryID < 0, "entryID must always be positive");
- if (isDefined() && size() + 1 > indexEntryLimitSize) {
- setUndefinedWithSize(size() + 1);
- } else if (isDefined() || maintainCount) {
+ Reject.ifTrue(entryID < 0, "entryID must be positive");
+ if (!isDefined()) {
+ return;
+ }
+ if (size() + 1 > indexEntryLimitSize) {
+ entryIDSet = newUndefinedSetWithKey(key);
+ } else {
entryIDSet.add(new EntryID(entryID));
}
}
@@ -120,10 +120,9 @@
void remove(ImportIDSet importIdSet)
{
checkNotNull(importIdSet, "importIdSet must not be null");
-
if (!importIdSet.isDefined()) {
setUndefined();
- } else if (isDefined() || maintainCount) {
+ } else if (isDefined()) {
entryIDSet.removeAll(importIdSet.entryIDSet);
}
}
@@ -142,26 +141,16 @@
if (!definedBeforeMerge || !importIdSet.isDefined() || mergedSize > indexEntryLimitSize)
{
- setUndefinedWithSize(mergedSize);
+ entryIDSet = newUndefinedSetWithKey(key);
return definedBeforeMerge;
}
- else if (isDefined() || maintainCount)
+ else if (isDefined())
{
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