|
|
769039 |
From 90ba52ac8f655cb5d6cfd3f201c15f8004eb8414 Mon Sep 17 00:00:00 2001
|
|
|
769039 |
From: Thierry Bordaz <tbordaz@redhat.com>
|
|
|
769039 |
Date: Fri, 4 Jan 2019 12:24:56 +0100
|
|
|
769039 |
Subject: [PATCH] Ticket 50117 - after certain failed import operation,
|
|
|
769039 |
impossible to replay an import operation
|
|
|
769039 |
|
|
|
769039 |
Bug Description:
|
|
|
769039 |
At the beginning of an import, a flag is set to mark the target backend is busy.
|
|
|
769039 |
Then import tests if there are pending operations. If such operations exist the import can not proceed and fails.
|
|
|
769039 |
The problem is that in such case of pending operations, the import fails without resetting the busy flag.
|
|
|
769039 |
It let the backend busy (until next reboot) and prevent new import.
|
|
|
769039 |
|
|
|
769039 |
Fix Description:
|
|
|
769039 |
It needs to reset the busy flag if there are pending operations
|
|
|
769039 |
|
|
|
769039 |
https://pagure.io/389-ds-base/issue/50117
|
|
|
769039 |
|
|
|
769039 |
Reviewed by: Mark Reynolds, William Brown
|
|
|
769039 |
|
|
|
769039 |
Platforms tested: F27
|
|
|
769039 |
|
|
|
769039 |
Flag Day: no
|
|
|
769039 |
|
|
|
769039 |
Doc impact: no
|
|
|
769039 |
|
|
|
769039 |
(cherry picked from commit ff00b07402747aac403478a157adab75e306d7d1)
|
|
|
769039 |
(cherry picked from commit 630940ec119a90c3bbfc7cd3464eb02ab779b474)
|
|
|
769039 |
---
|
|
|
769039 |
ldap/servers/slapd/back-ldbm/ldif2ldbm.c | 14 ++++++++++++--
|
|
|
769039 |
1 file changed, 12 insertions(+), 2 deletions(-)
|
|
|
769039 |
|
|
|
769039 |
diff --git a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
|
|
|
769039 |
index 16b87ee6b..69a2af9cf 100644
|
|
|
769039 |
--- a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
|
|
|
769039 |
+++ b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
|
|
|
769039 |
@@ -704,12 +704,22 @@ ldbm_back_ldif2ldbm(Slapi_PBlock *pb)
|
|
|
769039 |
}
|
|
|
769039 |
|
|
|
769039 |
/* check if an import/restore is already ongoing... */
|
|
|
769039 |
- if ((instance_set_busy(inst) != 0) ||
|
|
|
769039 |
- (slapi_counter_get_value(inst->inst_ref_count) > 0)) {
|
|
|
769039 |
+ if ((instance_set_busy(inst) != 0)) {
|
|
|
769039 |
slapi_log_err(SLAPI_LOG_ERR, "ldbm_back_ldif2ldbm", "ldbm: '%s' is already in the middle of "
|
|
|
769039 |
"another task and cannot be disturbed.\n",
|
|
|
769039 |
inst->inst_name);
|
|
|
769039 |
return -1;
|
|
|
769039 |
+ } else {
|
|
|
769039 |
+ uint64_t refcnt;
|
|
|
769039 |
+ refcnt = slapi_counter_get_value(inst->inst_ref_count);
|
|
|
769039 |
+ if (refcnt > 0) {
|
|
|
769039 |
+ slapi_log_err(SLAPI_LOG_ERR, "ldbm_back_ldif2ldbm", "ldbm: '%s' there are %d pending operation(s)."
|
|
|
769039 |
+ " Import can not proceed until they are completed.\n",
|
|
|
769039 |
+ inst->inst_name,
|
|
|
769039 |
+ refcnt);
|
|
|
769039 |
+ instance_set_not_busy(inst);
|
|
|
769039 |
+ return -1;
|
|
|
769039 |
+ }
|
|
|
769039 |
}
|
|
|
769039 |
|
|
|
769039 |
if ((task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE)) {
|
|
|
769039 |
--
|
|
|
769039 |
2.17.2
|
|
|
769039 |
|