pgpool2.git / summary / log / commit / refs

commit    ec6740f7259f010e2ee312335239239a606a0682
Author:   Tatsuo Ishii <ishii@postgresql.org>
Date:     Sat Oct 26 04:19:39 2024 +0000

    Fix sporadic health check failures due to authentication failure.
    
    It is reported that health check process fails due to authentication
    failures.
    [pgpool-general: 9236] Sporadic health check failures due to authentication failure
    https://www.pgpool.net/pipermail/pgpool-general/2024-October/001913.html
    
    When health_check_password is empty string, health check process looks
    for the password from pool_passwd file. Problem is, the file
    descriptor for the file is inherited from parent pgpool process. This
    means that pgpool main and health check process (possibly multiple
    process) share the same descriptor, which causes various problem
    including the issue reported here. To fix the problem, re-open the
    file when health check process starts so that each health check
    process owns its own file descriptor.
    
    Note that pgpool child process (responsible for frontend sessions)
    already re-opens the file descriptor and they are related to the
    issue.
    
    Problem reported and analyzed by Emond Papegaaij.
    Backpatch-through: v4.1
    Discussion: https://www.pgpool.net/pipermail/pgpool-general/2024-October/001913.html


src/main/health_check.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/health_check.c b/src/main/health_check.c index d6551f4bc..64b0507df 100644 --- a/src/main/health_check.c +++ b/src/main/health_check.c @@ -154,6 +154,14 @@ do_health_check_child(int *node_id) /* Initialize per process context */ pool_init_process_context(); + /* + * Open pool_passwd. + */ + if (strcmp("", pool_config->pool_passwd)) + { + pool_reopen_passwd_file(); + } + if (sigsetjmp(local_sigjmp_buf, 1) != 0) { pool_signal(SIGALRM, SIG_IGN); [parent: 6b715386cd88]