BUG/MEDIUM: startup: fix zero-warning mode

Let's check the second time a global counter of "ha_warning" messages, if
zero-warning is set. And let's do this just before forking. At this moment we
are sure, that we've already done all init operations, where we could emit
"ha_warning", and we still have stderr fd opened.

Even with the second check, we could lost some late and rare warnings
about failing to drop supplementary groups and about re-enabling core dumps.
Notes about this are added into 'zero-warning' keyword description.
This commit is contained in:
Valentine Krasnobaeva 2024-07-17 18:40:41 +02:00 committed by Willy Tarreau
parent beaa0e1635
commit fcd4bf54c8
2 changed files with 20 additions and 5 deletions

View File

@ -4176,11 +4176,18 @@ quiet
zero-warning zero-warning
When this option is set, HAProxy will refuse to start if any warning was When this option is set, HAProxy will refuse to start if any warning was
emitted while processing the configuration. It is highly recommended to set emitted while processing the configuration and applying it. It means that
this option on configurations that are not changed often, as it helps detect warnings about bad combinations of parameters, warnings about very high
subtle mistakes and keep the configuration clean and forward-compatible. Note limits that couldn't be set, and so on, make the process exit with an error
that "haproxy -c" will also report errors in such a case. This option is during startup. A few late startup warnings cannot be caught by this option,
equivalent to command line argument "-dW". such as the failure to drop supplementary groups when changing the group ID
in "daemon" or "master-worker" modes, or the failure to mark the process
dumpable after the fork(). This option does not catch warnings emitted at
runtime. It is highly recommended to set this option on configurations that
are not changed often, as it helps to detect subtle mistakes and keep the
configuration clean and forward-compatible. Note that "haproxy -c" will also
report errors in such a case. This option is equivalent to command line
argument "-dW".
3.4. Userlists 3.4. Userlists

View File

@ -3485,6 +3485,14 @@ int main(int argc, char **argv)
clock_adjust_now_offset(); clock_adjust_now_offset();
ready_date = date; ready_date = date;
/* catch last warnings, which could be produced while adjusting limits
* or preallocating fds
*/
if (warned & WARN_ANY && global.mode & MODE_ZERO_WARNING) {
ha_alert("Some warnings were found and 'zero-warning' is set. Aborting.\n");
exit(1);
}
if (global.mode & (MODE_DAEMON | MODE_MWORKER | MODE_MWORKER_WAIT)) { if (global.mode & (MODE_DAEMON | MODE_MWORKER | MODE_MWORKER_WAIT)) {
int ret = 0; int ret = 0;
int in_parent = 0; int in_parent = 0;