From a769dc70990dc2006e7d74639c40c2557c5354cd Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Sat, 26 Oct 2024 13:19:39 +0900 Subject: [PATCH] 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 50981c11b..d2f1986e9 100644 --- a/src/main/health_check.c +++ b/src/main/health_check.c @@ -138,6 +138,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);