diff options
| author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-06-28 14:51:50 +0100 |
|---|---|---|
| committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-06-28 14:51:50 +0100 |
| commit | f4c857dd43b91a88ff9685369e4c7b06a73190cf (patch) | |
| tree | 02118bedf0aad414935c83a35cfdde653572480b /src | |
| parent | 65148f62365b6fcd0f0b7049387686fa6eb27414 (diff) | |
| download | rabbitmq-server-git-f4c857dd43b91a88ff9685369e4c7b06a73190cf.tar.gz | |
don't use `system_info(running_db_nodes)', check for running rabbits instead
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_mnesia.erl | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index e4f50523ab..2f7d475457 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -49,7 +49,8 @@ %% Used internally in rpc calls -export([node_info/0, - remove_node_if_mnesia_running/1 + remove_node_if_mnesia_running/1, + is_running_remote/0 ]). %% create_tables/0 exported for helping embed RabbitMQ in or alongside @@ -388,10 +389,11 @@ cluster_status_from_mnesia() -> end, case mnesia:system_info(is_running) of no -> {error, mnesia_not_running}; - yes -> {ok, {ordsets:from_list(mnesia:system_info(db_nodes)), + yes -> AllNodes = ordsets:from_list(mnesia:system_info(db_nodes)), + {ok, {AllNodes, Check(ordsets:from_list( mnesia:table_info(schema, disc_copies))), - ordsets:from_list(mnesia:system_info(running_db_nodes))}} + running_nodes(AllNodes)}} end. cluster_status() -> @@ -1013,3 +1015,15 @@ change_extra_db_nodes(ClusterNodes0, Force) -> {ok, Nodes} -> {ok, Nodes} end. + +%% What we really want is nodes running rabbit, not running mnesia. Using +%% `rabbit_mnesia:system_info(running_db_nodes)' will return false positives +%% when we are actually just doing cluster operations (e.g. joining the +%% cluster). +running_nodes(Nodes) -> + {Replies, _BadNodes} = + rpc:multicall(Nodes, rabbit_mnesia, is_running_remote, []), + [Node || {Running, Node} <- Replies, Running]. + +is_running_remote() -> + {proplists:is_defined(rabbit, application:which_applications()), node()}. |
