diff options
| author | Michael Klishin <michael@novemberain.com> | 2017-01-07 05:30:53 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-07 05:30:53 +0800 |
| commit | 20e7ba8ee8dcee02cc3e7e5dbb2ab725cb0151a7 (patch) | |
| tree | fbb3288ade07f380c43dc3e7b8e6d332a0841f29 /src | |
| parent | f2e4139eeb52e599d5b9a5c465ac1a94f3e992df (diff) | |
| parent | 7cedbad38b93ccb67bc6b42c271c84392d500a08 (diff) | |
| download | rabbitmq-server-git-20e7ba8ee8dcee02cc3e7e5dbb2ab725cb0151a7.tar.gz | |
Merge pull request #1074 from rabbitmq/rabbitmq-cli-155
Export close_connections
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_connection_tracking_handler.erl | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/rabbit_connection_tracking_handler.erl b/src/rabbit_connection_tracking_handler.erl index cd60b82dbb..739b8049c0 100644 --- a/src/rabbit_connection_tracking_handler.erl +++ b/src/rabbit_connection_tracking_handler.erl @@ -27,6 +27,8 @@ -export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, code_change/3]). +-export([close_connections/3]). + -include_lib("rabbit.hrl"). -import(rabbit_misc, [pget/2]). @@ -77,14 +79,14 @@ handle_event(#event{type = connection_closed, props = Details}, State) -> handle_event(#event{type = vhost_deleted, props = Details}, State) -> VHost = pget(name, Details), rabbit_log_connection:info("Closing all connections in vhost '~s' because it's being deleted", [VHost]), - [close_connection(Conn, rabbit_misc:format("vhost '~s' is deleted", [VHost])) - || Conn <- rabbit_connection_tracking:list(VHost)], + close_connections(rabbit_connection_tracking:list(VHost), + rabbit_misc:format("vhost '~s' is deleted", [VHost])), {ok, State}; handle_event(#event{type = user_deleted, props = Details}, State) -> Username = pget(name, Details), rabbit_log_connection:info("Closing all connections from user '~s' because it's being deleted", [Username]), - [close_connection(Conn, rabbit_misc:format("user '~s' is deleted", [Username])) - || Conn <- rabbit_connection_tracking:list_of_user(Username)], + close_connections(rabbit_connection_tracking:list_of_user(Username), + rabbit_misc:format("user '~s' is deleted", [Username])), {ok, State}; %% A node had been deleted from the cluster. handle_event(#event{type = node_deleted, props = Details}, State) -> @@ -108,6 +110,17 @@ terminate(_Arg, _State) -> code_change(_OldVsn, State, _Extra) -> {ok, State}. + +close_connections(Tracked, Message) -> + close_connections(Tracked, Message, 0). + +close_connections(Tracked, Message, Delay) -> + [begin + close_connection(Conn, Message), + timer:sleep(Delay) + end || Conn <- Tracked], + ok. + close_connection(#tracked_connection{pid = Pid, type = network}, Message) -> rabbit_networking:close_connection(Pid, Message); close_connection(#tracked_connection{pid = Pid, type = direct}, Message) -> |
