From 1d7fd2564372abdccb1a0b41c2af5cfe15f14064 Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Thu, 05 Jun 2008 00:55:28 +0000
Subject: [PATCH] Fix issue where random entries are rejected. Issue 3135.

---
 opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 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 9464a18..39e41e8 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
@@ -141,6 +141,15 @@
   //Set to true if substring indexes are defined.
   private boolean hasSubIndexes = false;
 
+  //Work thread 0, used to add the first 20 or so entries single threaded.
+  private WorkThread workThread0;
+
+  //Counter for thread 0;
+  private int worker0Proc=0;
+
+  //Max thread 0 adds.
+  private static final int maxWorker0 = 20;
+
   /**
    * Create a new import job with the specified ldif import config.
    *
@@ -185,6 +194,9 @@
                 bufferManager, rootContainer, importMap);
         t.setUncaughtExceptionHandler(this);
         threads.add(t);
+        if(i == 0) {
+          workThread0 = t;
+        }
         t.start();
       }
     }
@@ -444,10 +456,19 @@
    * @param DNContext The import context.
    * @param entry The entry to process.
    */
-  private void processEntry(DNContext DNContext, Entry entry) {
-    //Add this DN to the pending map.
-    DNContext.addPending(entry.getDN());
-    addEntryQueue(DNContext, entry);
+  private void processEntry(DNContext DNContext, Entry entry)
+               throws DirectoryException, DatabaseException, JebException {
+    if(worker0Proc < maxWorker0) {
+       DNContext.addPending(entry.getDN());
+       WorkElement element =
+            WorkElement.decode(entry, DNContext);
+        workThread0.process(element);
+        worker0Proc++;
+    } else {
+      //Add this DN to the pending map.
+      DNContext.addPending(entry.getDN());
+      addEntryQueue(DNContext, entry);
+    }
   }
 
   /**

--
Gitblit v1.10.0