]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: sink: fix unexpected double postinit of sink backend
authorAurelien DARRAGON <adarragon@haproxy.com>
Thu, 18 Sep 2025 11:29:53 +0000 (13:29 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Thu, 18 Sep 2025 14:49:29 +0000 (16:49 +0200)
commit40eb1dd13545248ce062d704aa894ad288c339b1
tree878da4878bcadd040f78c33ce49e2d4915652605
parent79ef362d9e64f6fd0b6bf9ec29c0c1fe6ca6d91d
BUG/MEDIUM: sink: fix unexpected double postinit of sink backend

Willy experienced an unexpected behavior with the config below:

    global
        stats socket :1514

    ring buf1
        server srv1 127.0.0.1:1514

Indeed, haproxy would connect to the ring server twice since commit 23e5f18b
("MEDIUM: sink: change the sink mode type to PR_MODE_SYSLOG"), and one of the
connection would report errors.

The reason behind is is, despite the above commit saying no change of behavior
is expected, with the sink forward_px proxy now being set with PR_MODE_SYSLOG,
postcheck_log_backend() was being automatically executed in addition to the
manual cfg_post_parse_ring() function for each "ring" section. The consequence
is that sink_finalize() was called twice for a given "ring" section, which
means the connection init would be triggered twice.. which in turn resulted in
the behavior described above, plus possible unexpected side-effects.

To fix the issue, when we create the forward_px proxy, we now set the
PR_CAP_INT capability on it to tell haproxy not to automatically manage the
proxy (ie: to skip the automatic log backend postinit), because we are about
to manually manage the proxy from the sink API.

No backport needed, this bug is specific to 3.3
src/log.c
src/sink.c