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 */ /* destroy unreferenced defaults proxies */
proxy_destroy_all_unref_defaults(); 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(); err_code |= prcf->fct();
if (err_code & (ERR_ABORT|ERR_FATAL)) {
if (err_code & (ERR_ABORT|ERR_FATAL)) { ha_alert("Fatal errors found in configuration.\n");
ha_alert("Fatal errors found in configuration.\n"); exit(1);
exit(1); }
} }
/* update the ready date that will be used to count the startup time /* 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; continue;
list_for_each_entry(pscf, &post_server_check_list, list) { 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); 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); 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; 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(); err_code |= pattern_finalize_config();
if (err_code & (ERR_ABORT|ERR_FATAL)) { if (err_code & (ERR_ABORT|ERR_FATAL)) {