forked from pool/haproxy
Marcus Rueckert
55e4255fc5
0001-BUG-MAJOR-fix-listening-IP-address-storage-for-front.patch 0002-BUG-MINOR-fix-listening-IP-address-storage-for-front.patch 0003-DOC-Fix-typo-so-fetch-is-properly-parsed-by-Cyril-s-.patch 0004-BUG-MAJOR-http-fix-breakage-of-reqdeny-causing-rando.patch 0005-BUG-MEDIUM-stick-tables-fix-breakage-in-table-conver.patch 0006-BUG-MEDIUM-dns-unbreak-DNS-resolver-after-header-fix.patch 0007-BUILD-fix-build-on-Solaris-11.patch 0008-CLEANUP-connection-fix-double-negation-on-memcmp.patch 0009-BUG-MEDIUM-stats-show-servers-state-may-show-an-serv.patch 0010-BUG-MEDIUM-fix-risk-of-segfault-with-show-tls-keys.patch 0011-BUG-MEDIUM-sticktables-segfault-in-some-configuratio.patch 0012-BUG-MEDIUM-lua-converters-doesn-t-work.patch 0013-BUG-MINOR-http-add-header-header-name-copied-twice.patch 0014-BUG-MEDIUM-http-add-header-buffer-overwritten.patch OBS-URL: https://build.opensuse.org/package/show/server:http/haproxy?expand=0&rev=129
75 lines
2.5 KiB
Diff
75 lines
2.5 KiB
Diff
From 4cb6ccc835ce0c2c874e9868a62a981278b510f7 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Cyril=20Bont=C3=A9?= <cyril.bonte@free.fr>
|
|
Date: Fri, 27 May 2016 00:06:45 +0200
|
|
Subject: [PATCH 09/14] BUG/MEDIUM: stats: show servers state may show an
|
|
servers from another backend
|
|
|
|
Olivier Doucet reported that "show servers state" was producing an invalid
|
|
output with some configurations where nbproc > 1.
|
|
|
|
Indeed, commit 76a99784f4 fixed some issues but unfortunately introduced a
|
|
regression when a backend bound to the same process as the stats socket and a
|
|
previous backend is bound to another one.
|
|
|
|
For example :
|
|
global
|
|
daemon
|
|
nbproc 2
|
|
stats socket /var/run/haproxy-1.sock process 1
|
|
stats socket /var/run/haproxy-2.sock process 2
|
|
|
|
listen proc1
|
|
bind 127.0.0.1:9001
|
|
bind-process 1
|
|
server WRONG 127.0.0.1:80
|
|
|
|
listen proc2
|
|
bind 127.0.0.1:9002
|
|
bind-process 2
|
|
server RIGHT 127.0.0.1:80
|
|
|
|
Requesting "show servers state" on /var/run/haproxy-2.sock was producing a line
|
|
like :
|
|
3 proc2 1 WRONG 127.0.0.1 2 0 1 1 4 1 0 2 0 0 0 0
|
|
|
|
whereas the line below was awaited :
|
|
3 proc2 1 RIGHT 127.0.0.1 2 0 1 1 5 1 0 2 0 0 0 0
|
|
|
|
This was caused by the initialization of the server loop too early, before the
|
|
bind_proc filtering whereas it should be done after.
|
|
|
|
This fix should be backported to 1.6, where the regression has unfortunately
|
|
been backported.
|
|
|
|
(cherry picked from commit d55bd7a6a934387cdc5df7ad3fbc2718dc3a724e)
|
|
---
|
|
src/dumpstats.c | 5 +++--
|
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/dumpstats.c b/src/dumpstats.c
|
|
index b9f5719..4614cf2 100644
|
|
--- a/src/dumpstats.c
|
|
+++ b/src/dumpstats.c
|
|
@@ -2755,6 +2755,9 @@ static int dump_servers_state(struct stream_interface *si, struct chunk *buf)
|
|
if (appctx->ctx.server_state.px->bind_proc && !(appctx->ctx.server_state.px->bind_proc & (1UL << (relative_pid - 1))))
|
|
return 1;
|
|
|
|
+ if (!appctx->ctx.server_state.sv)
|
|
+ appctx->ctx.server_state.sv = appctx->ctx.server_state.px->srv;
|
|
+
|
|
for (; appctx->ctx.server_state.sv != NULL; appctx->ctx.server_state.sv = srv->next) {
|
|
srv = appctx->ctx.server_state.sv;
|
|
srv_addr[0] = '\0';
|
|
@@ -2857,8 +2860,6 @@ static int stats_dump_servers_state_to_buffer(struct stream_interface *si)
|
|
|
|
for (; appctx->ctx.server_state.px != NULL; appctx->ctx.server_state.px = curproxy->next) {
|
|
curproxy = appctx->ctx.server_state.px;
|
|
- if (!appctx->ctx.server_state.sv)
|
|
- appctx->ctx.server_state.sv = appctx->ctx.server_state.px->srv;
|
|
/* servers are only in backends */
|
|
if (curproxy->cap & PR_CAP_BE) {
|
|
if (!dump_servers_state(si, &trash))
|
|
--
|
|
2.6.6
|
|
|