summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2016-07-13 03:42:37 +0300
committerMichael Klishin <michael@clojurewerkz.org>2016-07-13 03:42:37 +0300
commit4ecdb1413de429f0c21ef73a32fea098140f6121 (patch)
tree6bfda1dbe55af595d29f5192316d7195d70fdf1e /src
parent079ac7f2e5e2bc6966126968f939cdd5141cdf01 (diff)
parent1e3810ad57e6db46265b1324b3908122f613d13e (diff)
downloadrabbitmq-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.erl25
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]).