summaryrefslogtreecommitdiff
path: root/src/rabbit_mnesia.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rabbit_mnesia.erl')
-rw-r--r--src/rabbit_mnesia.erl56
1 files changed, 30 insertions, 26 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index dec332d4..4541e9e4 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -60,9 +60,6 @@
-include("rabbit.hrl").
-%% This is safe because ordsets are lists.
--define(empty_set(Set), (Set =:= [])).
-
%%----------------------------------------------------------------------------
-ifdef(use_specs).
@@ -315,9 +312,10 @@ forget_cluster_node(Node, RemoveWhenOffline) ->
end.
remove_node_offline_node(Node) ->
- case {ordsets:del_element(Node, running_nodes(all_clustered_nodes())),
+ case {empty_set(
+ ordsets:del_element(Node, running_nodes(all_clustered_nodes()))),
node_type()} of
- {Nodes, disc} when ?empty_set(Nodes) ->
+ {true, disc} ->
%% Note that while we check if the nodes was the last to
%% go down, apart from the node we're removing from, this
%% is still unsafe. Consider the situation in which A and
@@ -326,8 +324,8 @@ remove_node_offline_node(Node) ->
%% and B goes down. In this case, C is the second-to-last,
%% but we don't know that and we'll remove B from A
%% anyway, even if that will lead to bad things.
- case ?empty_set(ordsets:subtract(running_clustered_nodes(),
- ordsets:from_list([node(), Node])))
+ case empty_set(ordsets:subtract(running_clustered_nodes(),
+ ordsets:from_list([node(), Node])))
of true -> start_mnesia(),
try
[mnesia:force_load_table(T) ||
@@ -339,7 +337,7 @@ remove_node_offline_node(Node) ->
end;
false -> e(not_last_node_to_go_down)
end;
- {_, _} ->
+ {false, _} ->
e(removing_node_from_offline_node)
end.
@@ -349,8 +347,11 @@ remove_node_offline_node(Node) ->
%%----------------------------------------------------------------------------
status() ->
- IfNonEmpty = fun (_, Nodes) when ?empty_set(Nodes) -> [];
- (Type, Nodes) -> [{Type, ordsets:to_list(Nodes)}]
+ IfNonEmpty = fun (Type, Nodes) ->
+ case empty_set(Nodes) of
+ true -> [];
+ false -> [{Type, ordsets:to_list(Nodes)}]
+ end
end,
[{nodes, (IfNonEmpty(disc, clustered_disc_nodes()) ++
IfNonEmpty(ram, clustered_ram_nodes()))}] ++
@@ -365,7 +366,7 @@ is_db_empty() ->
is_clustered() ->
AllNodes = all_clustered_nodes(),
- not is_only_node(AllNodes) andalso not ?empty_set(AllNodes).
+ not is_only_node(AllNodes) andalso not empty_set(AllNodes).
is_disc_and_clustered() -> node_type() =:= disc andalso is_clustered().
@@ -466,7 +467,7 @@ node_info() ->
node_type() ->
DiscNodes = clustered_disc_nodes(),
- case ?empty_set(DiscNodes) orelse ordsets:is_element(node(), DiscNodes) of
+ case empty_set(DiscNodes) orelse ordsets:is_element(node(), DiscNodes) of
true -> disc;
false -> ram
end.
@@ -704,7 +705,7 @@ on_node_up(Node) ->
end.
on_node_down(_Node) ->
- case ?empty_set(running_clustered_disc_nodes()) of
+ case empty_set(running_clustered_disc_nodes()) of
true -> rabbit_log:info("only running disc node went down~n");
false -> ok
end.
@@ -1003,16 +1004,16 @@ remove_node_if_mnesia_running(Node) ->
end.
leave_cluster() ->
- case {is_clustered(),
- running_nodes(ordsets:del_element(node(), all_clustered_nodes()))}
- of
- {false, Nodes} when ?empty_set(Nodes) ->
+ RunningNodes =
+ running_nodes(ordsets:del_element(node(), all_clustered_nodes())),
+ case not is_clustered() andalso empty_set(RunningNodes) of
+ true ->
ok;
- {_, AllNodes} ->
- case lists:any(fun leave_cluster/1, ordsets:to_list(AllNodes)) of
- true -> ok;
- false -> e(no_running_cluster_nodes)
- end
+ false ->
+ case lists:any(fun leave_cluster/1, ordsets:to_list(RunningNodes))
+ of true -> ok;
+ false -> e(no_running_cluster_nodes)
+ end
end.
leave_cluster(Node) ->
@@ -1044,12 +1045,12 @@ stop_mnesia() ->
ensure_mnesia_not_running().
change_extra_db_nodes(ClusterNodes0, Force) ->
- ClusterNodes = ordsets:del_element(node(), ClusterNodes0),
- case mnesia:change_config(extra_db_nodes, ordsets:to_list(ClusterNodes)) of
- {ok, []} when not Force andalso not ?empty_set(ClusterNodes) ->
+ ClusterNodes = ordsets:to_list(ordsets:del_element(node(), ClusterNodes0)),
+ case {mnesia:change_config(extra_db_nodes, ClusterNodes), ClusterNodes} of
+ {{ok, []}, [_|_]} when not Force ->
throw({error, {failed_to_cluster_with, ClusterNodes,
"Mnesia could not connect to any nodes."}});
- {ok, Nodes} ->
+ {{ok, Nodes}, _} ->
Nodes
end.
@@ -1180,3 +1181,6 @@ is_only_node(Nodes) ->
is_only_disc_node() ->
is_only_node(clustered_disc_nodes()).
+
+empty_set(Set) ->
+ ordsets:size(Set) =:= 0.