summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Corbacho <diana@rabbitmq.com>2017-01-06 08:26:36 +0100
committerDiana Corbacho <diana@rabbitmq.com>2017-01-06 08:29:15 +0100
commit341973d024b1046a7eaa1d915374f838f08fd471 (patch)
tree5e4f24e5162967d9921338288f05700cf8064ed2
parentca4d19fa0a5aa082e9b600352da109cbe636ab64 (diff)
downloadrabbitmq-server-git-341973d024b1046a7eaa1d915374f838f08fd471.tar.gz
Export close_connections
-rw-r--r--src/rabbit_connection_tracking_handler.erl21
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) ->