summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <mklishin@pivotal.io>2016-08-14 10:09:30 +0300
committerMichael Klishin <mklishin@pivotal.io>2016-08-14 10:09:30 +0300
commit0363bac78b403e666ab36584f58c527682ac7869 (patch)
tree4773906cc7ae489b7e91ee5f524257dcfd93fb67 /src
parentede361d09288eb8a04cf55f0f7e53f01c069d6c0 (diff)
downloadrabbitmq-server-git-0363bac78b403e666ab36584f58c527682ac7869.tar.gz
Delete connection tracking tables for nodes removed from the cluster
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_connection_tracking.erl31
-rw-r--r--src/rabbit_connection_tracking_handler.erl7
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}.