diff options
| author | Michael Klishin <michael@novemberain.com> | 2017-01-06 03:54:00 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-06 03:54:00 +0800 |
| commit | ca4d19fa0a5aa082e9b600352da109cbe636ab64 (patch) | |
| tree | 003835d09d5c8f33e7e7f9281658cbc58c8e8ad8 /src | |
| parent | e1bb001582da62718fc5339490813ab53045a719 (diff) | |
| parent | c6c40352d46aa7f9de8aa412825122871e9aa3a6 (diff) | |
| download | rabbitmq-server-git-ca4d19fa0a5aa082e9b600352da109cbe636ab64.tar.gz | |
Merge pull request #1073 from rabbitmq/rabbitmq-server-628
Force close connection when user is deleted
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_connection_tracking.erl | 13 | ||||
| -rw-r--r-- | src/rabbit_connection_tracking_handler.erl | 7 |
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) -> |
