Meeting?
by William Brown
hey everyone,
I joined at UTC+10 22:00, and was in the room for 10 minutes but didn't hear from anyone. Did I miss something?
—
Sincerely,
William Brown
Senior Software Engineer, 389 Directory Server
SUSE Labs
4 years, 2 months
[PATCH] prevent slapd from hanging under unlikely circumstances
by Jay Fenlason
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. 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 */
4 years, 2 months