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/WorkThread.java | 2 +-
opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java | 29 +++++++++++++++++++++++++----
opends/src/server/org/opends/server/backends/jeb/importLDIF/DNContext.java | 4 ++--
3 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/jeb/importLDIF/DNContext.java b/opends/src/server/org/opends/server/backends/jeb/importLDIF/DNContext.java
index 91427b3..77f8637 100644
--- a/opends/src/server/org/opends/server/backends/jeb/importLDIF/DNContext.java
+++ b/opends/src/server/org/opends/server/backends/jeb/importLDIF/DNContext.java
@@ -455,11 +455,11 @@
}
int i=0;
//If the parent is in the pending map, another thread is working on the
- //parent entry; wait until that thread is done with the parent.
+ //parent entry; wait 500ms until that thread is done with the parent.
while(isPending(parentDN)) {
try {
Thread.sleep(50);
- if(i == 5) {
+ if(i == 10) {
return null;
}
i++;
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);
+ }
}
/**
diff --git a/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java b/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
index f13b364..fa1a238 100644
--- a/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
+++ b/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
@@ -172,7 +172,7 @@
* @throws DirectoryException If a directory error occurs.
* @throws JebException If a JEB error occurs.
*/
- private void process(WorkElement element)
+ public void process(WorkElement element)
throws DatabaseException, DirectoryException, JebException {
EntryID entryID;
if((entryID = processDN2ID(element)) == null)
--
Gitblit v1.10.0