From 4e46b62ab1426d3eed9799fd7d98de3bfbb5e1cf Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 23 Nov 2016 16:50:48 +0100 Subject: [PATCH] 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. --- src/cli.c | 22 ---------------------- src/stream.c | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/cli.c b/src/cli.c index 3e560c3e3..8a5bf7fca 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 0d987452b..721736cec 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 }, {{},} }};