Re: [PATCH] prevent slapd from hanging under unlikely circumstances

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On 1 Feb 2020, at 12:10, Jay Fenlason <ds389@xxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx>
> 
> --- 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@xxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to 389-devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
> 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@xxxxxxxxxxxxxxxxxxxxxxx

—
Sincerely,

William Brown

Senior Software Engineer, 389 Directory Server
SUSE Labs
_______________________________________________
389-devel mailing list -- 389-devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to 389-devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
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@xxxxxxxxxxxxxxxxxxxxxxx




[Index of Archives]     [Fedora Directory Announce]     [Fedora Users]     [Older Fedora Users Mail]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Review]     [Fedora Art]     [Fedora Music]     [Fedora Packaging]     [CentOS]     [Fedora SELinux]     [Big List of Linux Books]     [KDE Users]     [Fedora Art]     [Fedora Docs]

  Powered by Linux