MINOR: haproxy: abort config parsing on fatal errors for post parsing hooks

When pre-check and post-check postparsing hooks= are evaluated in
step_init_2() potential fatal errors are ignored during the iteration
and are only taken into account at the end of the loop. This is not ideal
because some errors (ie: memory errors) could cause multiple alert
messages in a row, which could make troubleshooting harder for the user.

Let's stop as soon as a fatal error is encountered for post parsing
hooks, as we use to do everywhere else.
This commit is contained in:
Aurelien DARRAGON 2025-08-27 12:27:53 +02:00
parent 49db9739d0
commit 9736221e90

View File

@ -2061,12 +2061,12 @@ static void step_init_2(int argc, char** argv)
/* destroy unreferenced defaults proxies */
proxy_destroy_all_unref_defaults();
list_for_each_entry(prcf, &pre_check_list, list)
list_for_each_entry(prcf, &pre_check_list, list) {
err_code |= prcf->fct();
if (err_code & (ERR_ABORT|ERR_FATAL)) {
ha_alert("Fatal errors found in configuration.\n");
exit(1);
if (err_code & (ERR_ABORT|ERR_FATAL)) {
ha_alert("Fatal errors found in configuration.\n");
exit(1);
}
}
/* update the ready date that will be used to count the startup time
@ -2119,17 +2119,24 @@ static void step_init_2(int argc, char** argv)
continue;
list_for_each_entry(pscf, &post_server_check_list, list) {
for (srv = px->srv; srv; srv = srv->next)
for (srv = px->srv; srv; srv = srv->next) {
err_code |= pscf->fct(srv);
if (err_code & (ERR_ABORT|ERR_FATAL)) {
ha_alert("Fatal errors found in configuration.\n");
exit(1);
}
}
}
list_for_each_entry(ppcf, &post_proxy_check_list, list)
list_for_each_entry(ppcf, &post_proxy_check_list, list) {
err_code |= ppcf->fct(px);
if (err_code & (ERR_ABORT|ERR_FATAL)) {
ha_alert("Fatal errors found in configuration.\n");
exit(1);
}
}
px->flags |= PR_FL_CHECKED;
}
if (err_code & (ERR_ABORT|ERR_FATAL)) {
ha_alert("Fatal errors found in configuration.\n");
exit(1);
}
err_code |= pattern_finalize_config();
if (err_code & (ERR_ABORT|ERR_FATAL)) {