Skip to content

Commit 96332e1

Browse files
committed
Mnesia: Ask to leave a cluster and retry to join if cluster already consider node a member.
Khepri: no-op. Khepri is less strict already, and rabbit_khepri:can_join would accept a join request from a node that is already a member
1 parent 9439756 commit 96332e1

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

deps/rabbit/src/rabbit_mnesia.erl

+17-11
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,15 @@ can_join_cluster(DiscoveryNode) ->
178178
rabbit_log:info("Asked to join a cluster but already a member of it: ~tp", [ClusterNodes]),
179179
{ok, already_member};
180180
false ->
181-
Msg = format_inconsistent_cluster_message(DiscoveryNode, node()),
182-
rabbit_log:error(Msg),
183-
{error, {inconsistent_cluster, Msg}}
181+
%% Leave cluster and try again. Limit the number of times?
182+
%% Also this is perhaps a weird place to do this, better to do
183+
%% something similar in rabbit_db_cluster:join/2?
184+
rabbit_log:info("Mnesia: node ~tp thinks it's clustered "
185+
"with node ~tp, but ~tp disagrees. ~tp will ask "
186+
"to leave the cluster and try again.",
187+
[DiscoveryNode, node(), node(), node()]),
188+
leave_cluster(rabbit_nodes:nodes_excl_me(ClusterNodes)),
189+
can_join_cluster(DiscoveryNode)
184190
end
185191
end.
186192

@@ -924,14 +930,14 @@ remove_node_if_mnesia_running(Node) ->
924930
end.
925931

926932
leave_cluster() ->
927-
case rabbit_nodes:nodes_excl_me(cluster_nodes(all)) of
928-
[] -> ok;
929-
AllNodes -> case lists:any(fun leave_cluster/1, AllNodes) of
930-
true -> ok;
931-
false -> e(no_running_cluster_nodes)
932-
end
933-
end.
934-
933+
leave_cluster(rabbit_nodes:nodes_excl_me(cluster_nodes(all))).
934+
leave_cluster([]) ->
935+
ok;
936+
leave_cluster(Nodes) when is_list(Nodes) ->
937+
case lists:any(fun leave_cluster/1, Nodes) of
938+
true -> ok;
939+
false -> e(no_running_cluster_nodes)
940+
end;
935941
leave_cluster(Node) ->
936942
case rpc:call(Node,
937943
rabbit_mnesia, remove_node_if_mnesia_running, [node()]) of

0 commit comments

Comments
 (0)