From a58c4359bb2d11fcaed27bb3ec1cabd9b16d4ccb Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 22 Jun 2016 14:51:40 +0200 Subject: [PATCH] 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. --- src/dumpstats.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/dumpstats.c b/src/dumpstats.c index d0c11f23b..1e823d006 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 */