diff options
author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-09-21 16:01:08 +0100 |
---|---|---|
committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-09-21 16:01:08 +0100 |
commit | 9ab618e374229e925ea80c870c8d2e48bb027cf1 (patch) | |
tree | 69201ed7ecb66cdbf9186a33a6e02d9c6ee96f23 | |
parent | 9a56f663cd1e7697161005dc9769bb655fb6ccfc (diff) | |
download | rabbitmq-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.erl | 32 |
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()}. |