On 1 Feb 2020, at 12:10, Jay Fenlason <ds389(a)nerd-marrow.com>
wrote:
I have a small FreeIPA deployment of ~6-8 servers running on Centos
7.7. Do to the addition and removal of some of the servers, some
cruft (tombstones, replication conflicts, etc) have crept in to the
directory. I noticed that when I attempted to delete some of the
cruft entries, ns-slapd would hang, failirg to process requests, or
even shut down.
Can you tell us exactly what entries you noticed and how you attempted to delete them?
There are certainly some things like tombstones and such that you shouldn't be
touching as they are part of the internal replication state machine.
Knowing what you did will also help us to create a test case and reproducers to validate
your patch also.
Thanks for the report :)
In my investigation I found that pre-write callback
of the plugins (including the nis plugin) were being called, but no
corresponding post-write call was happening. The nis plugin takes a
write lock in the pre-write callback and releases it in the post-write
callback. Never releasing the lock causes the next attempt to take it
to hang. I wrote the attached patch, which simply ensures the
post-write callback is always called if the pre-write callback was
called.
This is such a simple patch that it scarcely needs a signoff.
Nonetheless:
Signed-off-by: Jay Fenlason <ds389(a)nerd-marrow.com>
--- a/ldap/servers/slapd/back-ldbm/ldbm_delete.c.orig 2020-01-31 07:28:04.085861174
-0500
+++ b/ldap/servers/slapd/back-ldbm/ldbm_delete.c 2020-01-31 07:30:33.932947489 -0500
@@ -81,6 +81,7 @@
Connection *pb_conn;
int32_t parent_op = 0;
struct timespec parent_time;
+ int pre_delete_called = 0;
if (slapi_pblock_get(pb, SLAPI_CONN_ID, &conn_id) < 0) {
conn_id = 0; /* connection is NULL */
@@ -371,6 +372,7 @@
}
if (retval == 0) {
retval = plugin_call_plugins(pb, SLAPI_PLUGIN_BE_PRE_DELETE_FN);
+ pre_delete_called = 1;
}
if (retval)
{
@@ -1491,7 +1493,7 @@
* The bepostop is called even if the operation fails,
* but not if the operation is purging tombstones.
*/
- if (!delete_tombstone_entry) {
+ if (pre_delete_called) {
plugin_call_plugins(pb, SLAPI_PLUGIN_BE_POST_DELETE_FN);
}
/* Need to return to cache after post op plugins are called */
_______________________________________________
389-devel mailing list -- 389-devel(a)lists.fedoraproject.org
To unsubscribe send an email to 389-devel-leave(a)lists.fedoraproject.org
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines:
https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedoraproject.org/archives/list/389-devel@lists.fedoraproje...
—
Sincerely,
William Brown
Senior Software Engineer, 389 Directory Server
SUSE Labs