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
commit9c8aaa2223981431466f01d1e91c4384f7c3d6ba (patch)
tree69201ed7ecb66cdbf9186a33a6e02d9c6ee96f23
parentc28efc0f79592843eb8d71a893e9978b1a8588b3 (diff)
downloadrabbitmq-server-git-9c8aaa2223981431466f01d1e91c4384f7c3d6ba.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 cce4f4b9c0..6b24854bc8 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()}.