summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/slapd')
-rw-r--r--ldap/servers/slapd/back-ldbm/import-threads.c12
-rw-r--r--ldap/servers/slapd/back-ldbm/import.c4
-rw-r--r--ldap/servers/slapd/back-ldbm/import.h2
3 files changed, 10 insertions, 8 deletions
diff --git a/ldap/servers/slapd/back-ldbm/import-threads.c b/ldap/servers/slapd/back-ldbm/import-threads.c
index 8f750d63..74c6db17 100644
--- a/ldap/servers/slapd/back-ldbm/import-threads.c
+++ b/ldap/servers/slapd/back-ldbm/import-threads.c
@@ -986,6 +986,7 @@ void import_foreman(void *param)
int ret = 0;
struct attrinfo *parentid_ai;
Slapi_PBlock *pb = slapi_pblock_new();
+ int shift = 0;
PR_ASSERT(info != NULL);
PR_ASSERT(inst != NULL);
@@ -1027,10 +1028,11 @@ void import_foreman(void *param)
info->state = RUNNING;
/* Read that entry from the cache */
- fi = import_fifo_fetch(job, id, 0);
+ fi = import_fifo_fetch(job, id, 0, shift);
if (! fi) {
- import_log_notice(job, "ERROR: foreman fifo error");
- goto error;
+ import_log_notice(job, "WARNING: entry id %d is missing", id);
+ shift++;
+ continue;
}
/* first, fill in any operational attributes */
@@ -1050,7 +1052,7 @@ void import_foreman(void *param)
*/
if (job->flags & FLAG_ABORT) {
goto error;
- }
+ }
if (parent_status == IMPORT_ADD_OP_ATTRS_NO_PARENT) {
/* If this entry is a suffix entry, this is not a problem */
@@ -1268,7 +1270,7 @@ void import_worker(void *param)
info->state = RUNNING;
/* Read that entry from the cache */
- fi = import_fifo_fetch(job, id, 1);
+ fi = import_fifo_fetch(job, id, 1, 0);
ep = fi ? fi->entry : NULL;
if (!ep) {
/* skipping an entry that turned out to be bad */
diff --git a/ldap/servers/slapd/back-ldbm/import.c b/ldap/servers/slapd/back-ldbm/import.c
index 0889d894..62169dc8 100644
--- a/ldap/servers/slapd/back-ldbm/import.c
+++ b/ldap/servers/slapd/back-ldbm/import.c
@@ -91,7 +91,7 @@ static int import_fifo_init(ImportJob *job)
return 0;
}
-FifoItem *import_fifo_fetch(ImportJob *job, ID id, int worker)
+FifoItem *import_fifo_fetch(ImportJob *job, ID id, int worker, int shift)
{
int idx = id % job->fifo.size;
FifoItem *fi;
@@ -102,7 +102,7 @@ FifoItem *import_fifo_fetch(ImportJob *job, ID id, int worker)
return NULL;
}
if (fi->entry) {
- if (id != fi->entry->ep_id)
+ if (id != fi->entry->ep_id - shift)
fi = NULL;
else if (worker) {
if (fi->bad) return NULL;
diff --git a/ldap/servers/slapd/back-ldbm/import.h b/ldap/servers/slapd/back-ldbm/import.h
index f9af304c..f0398deb 100644
--- a/ldap/servers/slapd/back-ldbm/import.h
+++ b/ldap/servers/slapd/back-ldbm/import.h
@@ -201,7 +201,7 @@ struct _import_worker_info {
/* import.c */
-FifoItem *import_fifo_fetch(ImportJob *job, ID id, int worker);
+FifoItem *import_fifo_fetch(ImportJob *job, ID id, int worker, int shift);
void import_free_job(ImportJob *job);
void import_log_notice(ImportJob *job, char *format, ...);
void import_abort_all(ImportJob *job, int wait_for_them);