summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Mazzoli <francesco@rabbitmq.com>2012-09-21 16:01:08 +0100
committerFrancesco Mazzoli <francesco@rabbitmq.com>2012-09-21 16:01:08 +0100
commit9ab618e374229e925ea80c870c8d2e48bb027cf1 (patch)
tree69201ed7ecb66cdbf9186a33a6e02d9c6ee96f23
parent9a56f663cd1e7697161005dc9769bb655fb6ccfc (diff)
downloadrabbitmq-server-9ab618e374229e925ea80c870c8d2e48bb027cf1.tar.gz
reverse to using `system_info(running_db_nodes)'
We noticed that our function is never necessary. Doing these changes, I also noticed that `running_db_nodes' does not do an rpc call if mnesia is running, and instead records the running node in some ETS table. This makes the clustering management tests racy, since we don't know when the information about the nodes which are up/down will propagate.
-rw-r--r--src/rabbit_mnesia.erl32
1 files changed, 9 insertions, 23 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index cce4f4b9..6b24854b 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -316,8 +316,7 @@ forget_cluster_node(Node, RemoveWhenOffline) ->
end.
remove_node_offline_node(Node) ->
- case {ordsets:del_element(Node, running_nodes(all_clustered_nodes())),
- is_disc_node()} of
+ case {mnesia:system_info(running_db_nodes) -- [Node], is_disc_node()} of
{[], true} ->
%% Note that while we check if the nodes was the last to
%% go down, apart from the node we're removing from, this
@@ -415,19 +414,17 @@ mnesia_nodes() ->
true -> ordsets:add_element(node(), DiscCopies);
false -> DiscCopies
end,
- {ok, {AllNodes, DiscNodes}};
+ RunningNodes = mnesia:system_info(running_db_nodes),
+ {ok, {AllNodes, DiscNodes, RunningNodes}};
false ->
{error, tables_not_present}
end
end.
cluster_status(WhichNodes, ForceMnesia) ->
- %% I don't want to call `running_nodes/1' unless if necessary, since it's
- %% pretty expensive.
Nodes = case mnesia_nodes() of
- {ok, {AllNodes, DiscNodes}} ->
- {ok, {AllNodes, DiscNodes,
- fun() -> running_nodes(AllNodes) end}};
+ {ok, {AllNodes, DiscNodes, RunningNodes}} ->
+ {ok, {AllNodes, DiscNodes, RunningNodes}};
{error, _Reason} when not ForceMnesia ->
{AllNodes, DiscNodes, RunningNodes} =
rabbit_node_monitor:read_cluster_status(),
@@ -1004,14 +1001,10 @@ remove_node_if_mnesia_running(Node) ->
end.
leave_cluster() ->
- case {is_clustered(),
- running_nodes(ordsets:del_element(node(), all_clustered_nodes()))}
- of
- {false, []} -> ok;
- {_, AllNodes} -> case lists:any(fun leave_cluster/1, AllNodes) of
- true -> ok;
- false -> e(no_running_cluster_nodes)
- end
+ AllNodes = all_clustered_nodes() -- [node()],
+ case not is_clustered() orelse lists:any(fun leave_cluster/1, AllNodes) of
+ true -> ok;
+ false -> e(no_running_cluster_nodes)
end.
leave_cluster(Node) ->
@@ -1052,13 +1045,6 @@ change_extra_db_nodes(ClusterNodes0, Force) ->
Nodes
end.
-%% We're not using `mnesia:system_info(running_db_nodes)' directly because if
-%% the node is a RAM node it won't know about other nodes when mnesia is stopped
-running_nodes(Nodes) ->
- {Replies, _BadNodes} =
- rpc:multicall(Nodes, rabbit_mnesia, is_running_remote, []),
- [Node || {Running, Node} <- Replies, Running].
-
is_running_remote() ->
{mnesia:system_info(is_running) =:= yes, node()}.