diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_connection_tracking.erl | 31 | ||||
| -rw-r--r-- | src/rabbit_connection_tracking_handler.erl | 7 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/rabbit_connection_tracking.erl b/src/rabbit_connection_tracking.erl index fe5392a8a0..27d713ae4e 100644 --- a/src/rabbit_connection_tracking.erl +++ b/src/rabbit_connection_tracking.erl @@ -31,6 +31,7 @@ ensure_tracked_connections_table_for_this_node/0, ensure_per_vhost_tracked_connections_table_for_this_node/0, tracked_connection_table_name_for/1, tracked_connection_per_vhost_table_name_for/1, + delete_tracked_connections_table_for_node/1, delete_per_vhost_tracked_connections_table_for_node/1, clear_tracked_connections_table_for_this_node/0, register_connection/1, unregister_connection/1, list/0, list/1, list_on_node/1, @@ -52,10 +53,10 @@ %% node. boot() -> ensure_tracked_connections_table_for_this_node(), - rabbit_log:info("Created a table for connection tracking on this node: ~p", + rabbit_log:info("Setting up a table for connection tracking on this node: ~p", [tracked_connection_table_name_for(node())]), ensure_per_vhost_tracked_connections_table_for_this_node(), - rabbit_log:info("Created a table for per-vhost connection counting on this node: ~p", + rabbit_log:info("Setting up a table for per-vhost connection counting on this node: ~p", [tracked_connection_per_vhost_table_name_for(node())]), clear_tracked_connections_table_for_this_node(), ok. @@ -111,6 +112,32 @@ clear_tracked_connections_table_for_this_node() -> end. +-spec delete_tracked_connections_table_for_node(node()) -> ok. + +delete_tracked_connections_table_for_node(Node) -> + TableName = tracked_connection_table_name_for(Node), + case mnesia:delete_table(TableName) of + {atomic, ok} -> ok; + {aborted, {no_exists, _}} -> ok; + {aborted, Error} -> + rabbit_log:error("Failed to delete a tracked connection table for node ~p: ~p", [Node, Error]), + ok + end. + + +-spec delete_per_vhost_tracked_connections_table_for_node(node()) -> ok. + +delete_per_vhost_tracked_connections_table_for_node(Node) -> + TableName = tracked_connection_per_vhost_table_name_for(Node), + case mnesia:delete_table(TableName) of + {atomic, ok} -> ok; + {aborted, {no_exists, _}} -> ok; + {aborted, Error} -> + rabbit_log:error("Failed to delete a per-vhost tracked connection table for node ~p: ~p", [Node, Error]), + ok + end. + + -spec tracked_connection_table_name_for(node()) -> atom(). tracked_connection_table_name_for(Node) -> diff --git a/src/rabbit_connection_tracking_handler.erl b/src/rabbit_connection_tracking_handler.erl index 404d84f69b..fd1df8c88a 100644 --- a/src/rabbit_connection_tracking_handler.erl +++ b/src/rabbit_connection_tracking_handler.erl @@ -85,6 +85,13 @@ handle_event(#event{type = user_deleted, props = Details}, State) -> %% TODO: force close and unregister connections from %% this user. Moved to rabbitmq/rabbitmq-server#628. {ok, State}; +%% A node had been deleted from the cluster. +handle_event(#event{type = node_deleted, props = Details}, State) -> + Node = pget(node, Details), + rabbit_log_connection:info("Node '~s' was removed from the cluster, deleting its connection tracking tables...", [Node]), + rabbit_connection_tracking:delete_tracked_connections_table_for_node(Node), + rabbit_connection_tracking:delete_per_vhost_tracked_connections_table_for_node(Node), + {ok, State}; handle_event(_Event, State) -> {ok, State}. |
