@@ -50,7 +50,7 @@ ensure_feature_flags_are_in_sync(Nodes, NodeIsVirgin) ->
5050 RemoteNode :: node (),
5151 Ret :: Ok | Error ,
5252 Ok :: {ok , [node ()]} | {ok , already_member },
53- Error :: {error , {inconsistent_cluster , string ()}}.
53+ Error :: {error , {inconsistent_cluster , string ()} | { error , { erpc , noconnection }} }.
5454
5555can_join (RemoteNode ) ->
5656 ? LOG_INFO (
@@ -82,7 +82,7 @@ can_join_using_khepri(RemoteNode) ->
8282 NodeType :: node_type (),
8383 Ret :: Ok | Error ,
8484 Ok :: ok | {ok , already_member },
85- Error :: {error , {inconsistent_cluster , string ()}}.
85+ Error :: {error , {inconsistent_cluster , string ()} | { error , { erpc , noconnection }} }.
8686% % @doc Adds this node to a cluster using `RemoteNode' to reach it.
8787
8888join (ThisNode , _NodeType ) when ThisNode =:= node () ->
@@ -214,6 +214,22 @@ join(RemoteNode, NodeType)
214214 end ;
215215 {ok , already_member } ->
216216 {ok , already_member };
217+ {error , {inconsistent_cluster , _Msg }} = Error ->
218+ case rabbit_khepri :is_enabled () of
219+ true ->
220+ Error ;
221+ false ->
222+ % % rabbit_mnesia:can_join_cluster/1 notice inconsistent_cluster,
223+ % % as RemoteNode thinks this node is already in the cluster.
224+ % % Attempt to leave the RemoteNode cluster, the discovery cluster,
225+ % % and simply retry the operation.
226+ rabbit_log :info (" Mnesia: node ~tp thinks it's clustered "
227+ " with node ~tp , but ~tp disagrees. ~tp will ask "
228+ " to leave the cluster and try again." ,
229+ [RemoteNode , node (), node (), node ()]),
230+ ok = rabbit_mnesia :leave_then_rediscover_cluster (RemoteNode ),
231+ join (RemoteNode , NodeType )
232+ end ;
217233 {error , _ } = Error ->
218234 Error
219235 end .
0 commit comments