diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2016-07-13 03:42:37 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2016-07-13 03:42:37 +0300 |
| commit | 4ecdb1413de429f0c21ef73a32fea098140f6121 (patch) | |
| tree | 6bfda1dbe55af595d29f5192316d7195d70fdf1e /src | |
| parent | 079ac7f2e5e2bc6966126968f939cdd5141cdf01 (diff) | |
| parent | 1e3810ad57e6db46265b1324b3908122f613d13e (diff) | |
| download | rabbitmq-server-git-4ecdb1413de429f0c21ef73a32fea098140f6121.tar.gz | |
Merge branch 'rabbitmq-server-fix-join-cluster-when-already-member' of https://github.com/binarin/rabbitmq-server into binarin-rabbitmq-server-fix-join-cluster-when-already-member
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_mnesia.erl | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index c327b33e5d..f247757420 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -200,8 +200,17 @@ join_cluster(DiscoveryNode, NodeType) -> {error, Reason} end; true -> - rabbit_log:info("Already member of cluster: ~p~n", [ClusterNodes]), - {ok, already_member} + %% DiscoveryNode thinks that we are part of a cluster, but + %% do we think so ourselves? + case are_we_clustered_with(DiscoveryNode) of + true -> + rabbit_log:info("Already member of cluster: ~p~n", [ClusterNodes]), + {ok, already_member}; + false -> + Msg = format_inconsistent_cluster_message(DiscoveryNode, node()), + rabbit_log:error(Msg), + {error, {inconsistent_cluster, Msg}} + end end. %% return node to its virgin state, where it is not member of any @@ -788,9 +797,7 @@ check_nodes_consistency(Node, RemoteStatus = {RemoteAllNodes, _, _}) -> {ok, RemoteStatus}; false -> {error, {inconsistent_cluster, - rabbit_misc:format("Node ~p thinks it's clustered " - "with node ~p, but ~p disagrees", - [node(), Node, Node])}} + format_inconsistent_cluster_message(node(), Node)}} end. check_mnesia_or_otp_consistency(_Node, unsupported, OTP) -> @@ -896,6 +903,9 @@ is_only_clustered_disc_node() -> node_type() =:= disc andalso is_clustered() andalso cluster_nodes(disc) =:= [node()]. +are_we_clustered_with(Node) -> + lists:member(Node, mnesia_lib:all_nodes()). + me_in_nodes(Nodes) -> lists:member(node(), Nodes). nodes_incl_me(Nodes) -> lists:usort([node()|Nodes]). @@ -946,3 +956,8 @@ error_description(removing_node_from_offline_node) -> "from must be a disc node and all the other nodes must be offline."; error_description(no_running_cluster_nodes) -> "You cannot leave a cluster if no online nodes are present.". + +format_inconsistent_cluster_message(Thinker, Dissident) -> + rabbit_misc:format("Node ~p thinks it's clustered " + "with node ~p, but ~p disagrees", + [Thinker, Dissident, Dissident]). |
