diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-03-18 13:43:45 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-03-18 13:43:45 +0000 |
commit | 26515dcee343397c954e838c901f33285f24c06b (patch) | |
tree | 8c904c4591274e0c23126a890dcbc95cb86319ba /src/rabbit_mnesia.erl | |
parent | 069e8323e60742443c06b8ad25bac54321f3b0a7 (diff) | |
parent | 40e2d8fb4a036b591c718856e589376a3000e29a (diff) | |
download | rabbitmq-server-26515dcee343397c954e838c901f33285f24c06b.tar.gz |
Merge bug25722
Diffstat (limited to 'src/rabbit_mnesia.erl')
-rw-r--r-- | src/rabbit_mnesia.erl | 50 |
1 files changed, 16 insertions, 34 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 521f2e6d..baf53712 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -129,7 +129,7 @@ init_from_config() -> {ok, Node} -> rabbit_log:info("Node '~p' selected for clustering from " "configuration~n", [Node]), - {ok, {_, DiscNodes, _}} = discover_cluster(Node), + {ok, {_, DiscNodes, _}} = discover_cluster0(Node), init_db_and_upgrade(DiscNodes, NodeType, true), rabbit_node_monitor:notify_joined_cluster(); none -> @@ -160,10 +160,7 @@ join_cluster(DiscoveryNode, NodeType) -> true -> e(clustering_only_disc_node); false -> ok end, - {ClusterNodes, _, _} = case discover_cluster(DiscoveryNode) of - {ok, Res} -> Res; - {error, _} = E -> throw(E) - end, + {ClusterNodes, _, _} = discover_cluster([DiscoveryNode]), case me_in_nodes(ClusterNodes) of false -> %% reset the node. this simplifies things and it will be needed in @@ -229,10 +226,7 @@ change_cluster_node_type(Type) -> false -> e(not_clustered); true -> ok end, - {_, _, RunningNodes} = case discover_cluster(cluster_nodes(all)) of - {ok, Status} -> Status; - {error, _Reason} -> e(cannot_connect_to_cluster) - end, + {_, _, RunningNodes} = discover_cluster(cluster_nodes(all)), %% We might still be marked as running by a remote node since the %% information of us going down might not have propagated yet. Node = case RunningNodes -- [node()] of @@ -245,11 +239,7 @@ change_cluster_node_type(Type) -> update_cluster_nodes(DiscoveryNode) -> ensure_mnesia_not_running(), ensure_mnesia_dir(), - Status = {AllNodes, _, _} = - case discover_cluster(DiscoveryNode) of - {ok, Status0} -> Status0; - {error, _Reason} -> e(cannot_connect_to_node) - end, + Status = {AllNodes, _, _} = discover_cluster([DiscoveryNode]), case me_in_nodes(AllNodes) of true -> %% As in `check_consistency/0', we can safely delete the @@ -607,22 +597,20 @@ running_disc_nodes() -> %% Internal helpers %%-------------------------------------------------------------------- -discover_cluster(Nodes) when is_list(Nodes) -> - lists:foldl(fun (_, {ok, Res}) -> {ok, Res}; - (Node, {error, _}) -> discover_cluster(Node) - end, {error, no_nodes_provided}, Nodes); -discover_cluster(Node) when Node == node() -> - {error, {cannot_discover_cluster, "Cannot cluster node with itself"}}; -discover_cluster(Node) -> - OfflineError = - {error, {cannot_discover_cluster, - "The nodes provided are either offline or not running"}}, - case rpc:call(Node, rabbit_mnesia, cluster_status_from_mnesia, []) of - {badrpc, _Reason} -> OfflineError; - {error, mnesia_not_running} -> OfflineError; - {ok, Res} -> {ok, Res} +discover_cluster(Nodes) -> + case lists:foldl(fun (_, {ok, Res}) -> {ok, Res}; + (Node, _) -> discover_cluster0(Node) + end, {error, no_nodes_provided}, Nodes) of + {ok, Res} -> Res; + {error, E} -> throw(E); + {badrpc, Reason} -> throw({badrpc_multi, Reason, Nodes}) end. +discover_cluster0(Node) when Node == node() -> + {error, cannot_cluster_node_with_itself}; +discover_cluster0(Node) -> + rpc:call(Node, rabbit_mnesia, cluster_status_from_mnesia, []). + schema_ok_or_move() -> case rabbit_table:check_schema_integrity() of ok -> @@ -833,15 +821,9 @@ error_description(resetting_only_disc_node) -> "Please convert another node of the cluster to a disc node first."; error_description(not_clustered) -> "Non-clustered nodes can only be disc nodes."; -error_description(cannot_connect_to_cluster) -> - "Could not connect to the cluster nodes present in this node's " - "status file. If the cluster has changed, you can use the " - "'update_cluster_nodes' command to point to the new cluster nodes."; error_description(no_online_cluster_nodes) -> "Could not find any online cluster nodes. If the cluster has changed, " "you can use the 'update_cluster_nodes' command."; -error_description(cannot_connect_to_node) -> - "Could not connect to the cluster node provided."; error_description(inconsistent_cluster) -> "The nodes provided do not have this node as part of the cluster."; error_description(not_a_cluster_node) -> |