2121list_nodes () ->
2222 case application :get_env (rabbit , cluster_nodes , {[], disc }) of
2323 {Nodes , NodeType } ->
24+ check_local_node (Nodes ),
25+ check_duplicates (Nodes ),
2426 {ok , {add_this_node (Nodes ), NodeType }};
2527 Nodes when is_list (Nodes ) ->
28+ check_local_node (Nodes ),
29+ check_duplicates (Nodes ),
2630 {ok , {add_this_node (Nodes ), disc }}
2731 end .
2832
@@ -33,6 +37,26 @@ add_this_node(Nodes) ->
3337 false -> [ThisNode | Nodes ]
3438 end .
3539
40+ check_duplicates (Nodes ) ->
41+ case (length (lists :usort (Nodes )) == length (Nodes )) of
42+ true ->
43+ ok ;
44+ false ->
45+ rabbit_log :warning (" Classic peer discovery backend: list of "
46+ " nodes contains duplicates ~0tp " ,
47+ [Nodes ])
48+ end .
49+
50+ check_local_node (Nodes ) ->
51+ case lists :member (node (), Nodes ) of
52+ true ->
53+ ok ;
54+ false ->
55+ rabbit_log :warning (" Classic peer discovery backend: list of "
56+ " nodes does not contain the local node ~0tp " ,
57+ [Nodes ])
58+ end .
59+
3660-spec lock (Nodes :: [node ()]) ->
3761 {ok , {{ResourceId :: string (), LockRequesterId :: node ()}, Nodes :: [node ()]}} |
3862 {error , Reason :: string ()}.
0 commit comments