From: Willy Tarreau Date: Wed, 22 Jun 2016 12:51:40 +0000 (+0200) Subject: BUG/MINOR: srv-state: fix incorrect output of state file X-Git-Tag: v1.7-dev4~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a58c4359bb2d11fcaed27bb3ec1cabd9b16d4ccb;p=thirdparty%2Fhaproxy.git BUG/MINOR: srv-state: fix incorrect output of state file Eric Webster reported that the state file wouldn't reload in 1.6.5 while it used to work in 1.6.4. The issue is that headers are now missing from the output when a specific backend is dumped since commit 4c1544d ("BUG/MEDIUM: stats: show servers state may show an empty or incomplete result"). This patch fixes this by introducing a dump state. It must be backported to 1.6. --- diff --git a/src/dumpstats.c b/src/dumpstats.c index d0c11f23bf..1e823d0062 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -3200,15 +3200,22 @@ static int stats_dump_servers_state_to_buffer(struct stream_interface *si) chunk_reset(&trash); - if (!appctx->ctx.server_state.px) { + if (appctx->st2 == STAT_ST_INIT) { + if (!appctx->ctx.server_state.px) + appctx->ctx.server_state.px = proxy; + appctx->st2 = STAT_ST_HEAD; + } + + if (appctx->st2 == STAT_ST_HEAD) { chunk_printf(&trash, "%d\n# %s\n", SRV_STATE_FILE_VERSION, SRV_STATE_FILE_FIELD_NAMES); if (bi_putchk(si_ic(si), &trash) == -1) { si_applet_cant_put(si); return 0; } - appctx->ctx.server_state.px = proxy; + appctx->st2 = STAT_ST_INFO; } + /* STAT_ST_INFO */ for (; appctx->ctx.server_state.px != NULL; appctx->ctx.server_state.px = curproxy->next) { curproxy = appctx->ctx.server_state.px; /* servers are only in backends */