diff options
| author | Michael Klishin <mklishin@pivotal.io> | 2016-08-14 10:09:30 +0300 |
|---|---|---|
| committer | Michael Klishin <mklishin@pivotal.io> | 2016-08-14 10:09:30 +0300 |
| commit | 0363bac78b403e666ab36584f58c527682ac7869 (patch) | |
| tree | 4773906cc7ae489b7e91ee5f524257dcfd93fb67 | |
| parent | ede361d09288eb8a04cf55f0f7e53f01c069d6c0 (diff) | |
| download | rabbitmq-server-git-0363bac78b403e666ab36584f58c527682ac7869.tar.gz | |
Delete connection tracking tables for nodes removed from the cluster
| -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}. |
