> On 1 Feb 2020, at 12:10, Jay Fenlason <[email protected]> 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 <[email protected]>
> 
> --- 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 -- [email protected]
> To unsubscribe send an email to [email protected]
> 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/[email protected]

—
Sincerely,

William Brown

Senior Software Engineer, 389 Directory Server
SUSE Labs
_______________________________________________
389-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
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/[email protected]

Reply via email to