From: Willy Tarreau Date: Wed, 7 Sep 2011 21:48:48 +0000 (+0200) Subject: [MEDIUM] stats: offer the possibility to kill sessions by server X-Git-Tag: v1.5-dev8~112 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52b2d228edaf5081331cf2ccac21b4fcbefdfc68;p=thirdparty%2Fhaproxy.git [MEDIUM] stats: offer the possibility to kill sessions by server It's now possible to issue "shutdown sessions server " and have all this server's sessions immediately killed. --- diff --git a/doc/configuration.txt b/doc/configuration.txt index a1fa9baf57..c5b7c61431 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -9838,6 +9838,12 @@ shutdown session endless transfer is ongoing. Such terminated sessions are reported with a 'K' flag in the logs. +shutdown sessions / + Immediately terminate all the sessions attached to the specified server. This + can be used to terminate long-running sessions after a server is put into + maintenance mode, for instance. Such terminated sessions are reported with a + 'K' flag in the logs. + /* * Local variables: * fill-column: 79 diff --git a/src/dumpstats.c b/src/dumpstats.c index 1e49dc7708..5dcd8c4b72 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -1313,8 +1313,30 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) session_shutdown(sess, SN_ERR_KILLED); return 1; } + else if (strcmp(args[1], "sessions") == 0) { + if (strcmp(args[2], "server") == 0) { + struct server *sv; + struct session *sess, *sess_bck; + + sv = expect_server_admin(s, si, args[3]); + if (!sv) + return 1; + + /* kill all the session that are on this server */ + list_for_each_entry_safe(sess, sess_bck, &sv->actconns, by_srv) + if (sess->srv_conn == sv) + session_shutdown(sess, SN_ERR_KILLED); + + return 1; + } + else { + si->applet.ctx.cli.msg = "'shutdown sessions' only supports 'server'.\n"; + si->applet.st0 = STAT_CLI_PRINT; + return 1; + } + } else { /* unknown "disable" parameter */ - si->applet.ctx.cli.msg = "'shutdown' only supports 'frontend' and 'session'.\n"; + si->applet.ctx.cli.msg = "'shutdown' only supports 'frontend', 'session' and 'sessions'.\n"; si->applet.st0 = STAT_CLI_PRINT; return 1; }