From e82cd8602f5a77168ff0af4cc72a3bd6fb7c82db Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Wed, 16 Dec 2009 01:43:02 +0000
Subject: [PATCH] Fix problem where second phase cache size calculation was too small.

---
 opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java |   39 +++++++++++++++++++++++++++------------
 1 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
index 2066525..a2e6976 100644
--- a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
+++ b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
@@ -781,9 +781,9 @@
       long finishTime = System.currentTimeMillis();
       long importTime = (finishTime - startTime);
       float rate = 0;
-      message = NOTE_JEB_IMPORT_PHASE_STATS.get(importTime,
-                        (phaseOneFinishTime - startTime),
-                        (phaseTwoFinishTime - phaseTwoTime));
+      message = NOTE_JEB_IMPORT_PHASE_STATS.get(importTime/1000,
+                        (phaseOneFinishTime - startTime)/1000,
+                        (phaseTwoFinishTime - phaseTwoTime)/1000);
       logError(message);
       if (importTime > 0)
         rate = 1000f * reader.getEntriesRead() / importTime;
@@ -931,16 +931,14 @@
 
   private int getBufferCount(int dbThreads)
   {
-    int c = 0;
     int buffers = 0;
-    //Count DN buffers first, since they are processed first.
-    while(c < DNIndexMgrList.size() && c < dbThreads)
+
+    List<IndexManager> totList = new LinkedList<IndexManager>(DNIndexMgrList);
+    totList.addAll(indexMgrList);
+    Collections.sort(totList, Collections.reverseOrder());
+    for(int i = 0; i < dbThreads; i ++)
     {
-      buffers += DNIndexMgrList.get(c++).getBufferList().size();
-    }
-    while(c < indexMgrList.size() && c < dbThreads)
-    {
-      buffers += indexMgrList.get(c++).getBufferList().size();
+      buffers += totList.get(i).getBufferList().size();
     }
     return buffers;
   }
@@ -2850,7 +2848,7 @@
    *
    *   3. It manages opening and closing the scratch index files.
    */
-  private final class IndexManager
+  private final class IndexManager implements Comparable<IndexManager>
   {
     private final File file;
     private RandomAccessFile rFile = null;
@@ -2985,6 +2983,23 @@
     {
       return limit;
     }
+
+
+    public int compareTo(IndexManager mgr)
+    {
+      if(bufferList.size() == mgr.getBufferList().size())
+      {
+         return 0;
+      }
+      else if (bufferList.size() < mgr.getBufferList().size())
+      {
+        return -1;
+      }
+      else
+      {
+        return 1;
+      }
+    }
   }
 
 

--
Gitblit v1.10.0