summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_connection_tracking.erl13
-rw-r--r--src/rabbit_connection_tracking_handler.erl7
2 files changed, 16 insertions, 4 deletions
diff --git a/src/rabbit_connection_tracking.erl b/src/rabbit_connection_tracking.erl
index 460bf964a0..38684482ef 100644
--- a/src/rabbit_connection_tracking.erl
+++ b/src/rabbit_connection_tracking.erl
@@ -34,7 +34,7 @@
delete_tracked_connections_table_for_node/1, delete_per_vhost_tracked_connections_table_for_node/1,
clear_tracked_connection_tables_for_this_node/0,
register_connection/1, unregister_connection/1,
- list/0, list/1, list_on_node/1,
+ list/0, list/1, list_on_node/1, list_of_user/1,
tracked_connection_from_connection_created/1,
tracked_connection_from_connection_state/1,
count_connections_in/1]).
@@ -217,6 +217,17 @@ list_on_node(Node) ->
catch exit:{aborted, {no_exists, _}} -> []
end.
+-spec list_of_user(rabbit_types:username()) -> [rabbit_types:tracked_connection()].
+
+list_of_user(Username) ->
+ lists:foldl(
+ fun (Node, Acc) ->
+ Tab = tracked_connection_table_name_for(Node),
+ Acc ++ mnesia:dirty_match_object(
+ Tab,
+ #tracked_connection{username = Username, _ = '_'})
+ end, [], rabbit_mnesia:cluster_nodes(running)).
+
-spec count_connections_in(rabbit_types:vhost()) -> non_neg_integer().
count_connections_in(VirtualHost) ->
diff --git a/src/rabbit_connection_tracking_handler.erl b/src/rabbit_connection_tracking_handler.erl
index 598fe686c3..cd60b82dbb 100644
--- a/src/rabbit_connection_tracking_handler.erl
+++ b/src/rabbit_connection_tracking_handler.erl
@@ -81,9 +81,10 @@ handle_event(#event{type = vhost_deleted, props = Details}, State) ->
|| Conn <- rabbit_connection_tracking:list(VHost)],
{ok, State};
handle_event(#event{type = user_deleted, props = Details}, State) ->
- _Username = pget(name, Details),
- %% TODO: force close and unregister connections from
- %% this user. Moved to rabbitmq/rabbitmq-server#628.
+ 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)],
{ok, State};
%% A node had been deleted from the cluster.
handle_event(#event{type = node_deleted, props = Details}, State) ->