From 43bc53a73060002644240d6bf47f58a41eca0c55 Mon Sep 17 00:00:00 2001 From: Wilhansen Li Date: Wed, 17 Apr 2024 00:48:58 +0800 Subject: [PATCH] Fix GH-14037: Make /ping of php-fpm work with pm.status_listen pool The ping feature of php-fpm monitoring was previously not working in pm.status_listen pool due to the configuration variables ping.path and ping.response not being copied over to the worker when forked. This results in the ping code path being disabled because the worker detects that ping.path is not configured. Closes GH-13980 Co-authored-by: Pierrick Charron --- NEWS | 4 ++++ sapi/fpm/fpm/fpm_conf.c | 2 ++ sapi/fpm/tests/status-ping.phpt | 40 +++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 sapi/fpm/tests/status-ping.phpt diff --git a/NEWS b/NEWS index 76604c3b66b..db375c3b7cc 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,10 @@ PHP NEWS - DOM: . Fixed bug GH-14343 (Memory leak in xml and dom). (nielsdos) +- FPM: + . Fixed bug GH-14037 (PHP-FPM ping.path and ping.response config vars are + ignored in status pool). (Wilhansen Li, Pierrick Charron) + - GD: . Fix parameter numbers for imagecolorset(). (Giovanni Giacobbi) diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c index e1aec90ff3e..389a85a7d0f 100644 --- a/sapi/fpm/fpm/fpm_conf.c +++ b/sapi/fpm/fpm/fpm_conf.c @@ -752,6 +752,8 @@ static int fpm_worker_pool_shared_status_alloc(struct fpm_worker_pool_s *shared_ FPM_WPC_STR_CP(config, shared_config, user); FPM_WPC_STR_CP(config, shared_config, group); FPM_WPC_STR_CP(config, shared_config, pm_status_path); + FPM_WPC_STR_CP(config, shared_config, ping_path); + FPM_WPC_STR_CP(config, shared_config, ping_response); config->pm = PM_STYLE_ONDEMAND; config->pm_max_children = 2; diff --git a/sapi/fpm/tests/status-ping.phpt b/sapi/fpm/tests/status-ping.phpt new file mode 100644 index 00000000000..9516efad751 --- /dev/null +++ b/sapi/fpm/tests/status-ping.phpt @@ -0,0 +1,40 @@ +--TEST-- +FPM: Ping on the status invisible pool +--SKIPIF-- + +--FILE-- +start(); +$tester->expectLogStartNotices(); +$tester->ping('{{ADDR[status]}}'); +usleep(100000); +$tester->terminate(); +$tester->expectLogTerminatingNotices(); +$tester->close(); + +?> +Done +--EXPECT-- +Done +--CLEAN-- +