From: Willy Tarreau Date: Wed, 23 Nov 2016 15:50:48 +0000 (+0100) Subject: REORG: cli: move "shutdown sessions server" to stream.c X-Git-Tag: v1.7.0~38 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4e46b62ab1426d3eed9799fd7d98de3bfbb5e1cf;p=thirdparty%2Fhaproxy.git REORG: cli: move "shutdown sessions server" to stream.c It could be argued that it's between server, stream and session but at least due to the fact that it operates on streams, its best place is in stream.c. --- diff --git a/src/cli.c b/src/cli.c index 3e560c3e3f..8a5bf7fca4 100644 --- a/src/cli.c +++ b/src/cli.c @@ -881,28 +881,6 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) stream_shutdown(sess, SF_ERR_KILLED); return 1; } - else if (strcmp(args[1], "sessions") == 0) { - if (strcmp(args[2], "server") == 0) { - struct server *sv; - struct stream *sess, *sess_bck; - - sv = expect_server_admin(s, si, args[3]); - if (!sv) - return 1; - - /* kill all the stream that are on this server */ - list_for_each_entry_safe(sess, sess_bck, &sv->actconns, by_srv) - if (sess->srv_conn == sv) - stream_shutdown(sess, SF_ERR_KILLED); - - return 1; - } - else { - appctx->ctx.cli.msg = "'shutdown sessions' only supports 'server'.\n"; - appctx->st0 = STAT_CLI_PRINT; - return 1; - } - } else { /* unknown "disable" parameter */ appctx->ctx.cli.msg = "'shutdown' only supports 'frontend', 'session' and 'sessions'.\n"; appctx->st0 = STAT_CLI_PRINT; diff --git a/src/stream.c b/src/stream.c index 0d987452b4..721736cec2 100644 --- a/src/stream.c +++ b/src/stream.c @@ -3914,9 +3914,30 @@ static void cli_release_show_sess(struct appctx *appctx) } } +/* Parses the "shutdown session server" directive, it always returns 1 */ +static int cli_parse_shutdown_sessions_server(char **args, struct appctx *appctx, void *private) +{ + struct server *sv; + struct stream *strm, *strm_bck; + + if (!cli_has_level(appctx, ACCESS_LVL_ADMIN)) + return 1; + + sv = cli_find_server(appctx, args[3]); + if (!sv) + return 1; + + /* kill all the stream that are on this server */ + list_for_each_entry_safe(strm, strm_bck, &sv->actconns, by_srv) + if (strm->srv_conn == sv) + stream_shutdown(strm, SF_ERR_KILLED); + return 1; +} + /* register cli keywords */ static struct cli_kw_list cli_kws = {{ },{ { { "show", "sess", NULL }, "show sess [id] : report the list of current sessions or dump this session", cli_parse_show_sess, cli_io_handler_dump_sess, cli_release_show_sess }, + { { "shutdown", "sessions", "server" }, "shutdown sessions server : kill sessions on a server", cli_parse_shutdown_sessions_server, NULL, NULL }, {{},} }};