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