diff --git a/src/cets_discovery.erl b/src/cets_discovery.erl index b930609d..398f62ad 100644 --- a/src/cets_discovery.erl +++ b/src/cets_discovery.erl @@ -595,7 +595,9 @@ verify_tried_joining(State = #{nodes := Nodes, tables := Tables}) -> NodesToJoin = [Node || Node <- Nodes, lists:member(Node, AvailableNodes)], Missing = [ {Node, Table} - || Node <- NodesToJoin, Table <- Tables, not has_join_result_for(Node, Table, State) + || Node <- NodesToJoin, + Table <- Tables, + not (has_join_result_for(Node, Table, State) orelse already_joined(Node, Table)) ], case Missing of [] -> []; @@ -606,6 +608,18 @@ verify_tried_joining(State = #{nodes := Nodes, tables := Tables}) -> has_join_result_for(Node, Table, #{results := Results}) -> [] =/= [R || R = #{node := N, table := T} <- Results, N =:= Node, T =:= Table]. +-spec already_joined(node(), cets:table_name()) -> boolean(). +already_joined(Node, Table) -> + lists:member( + Node, + try + %% Careful, it is a blocking call + cets:other_nodes(Table) + catch + _:_ -> [] + end + ). + -spec handle_system_info(state()) -> system_info(). handle_system_info(State) -> State#{