1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
-module(dreki_peer_service).
-export([join/1, connect_nearest_dns/0]).
-define(DEFAULT_PORT, 18086).
join(Node) ->
connect_node(Node).
connect_nearest_dns() ->
%%connect_nearest_dns(dreki_world_dns:parents(dreki_world_dns:node()), []),
todo.
connect_nearest_dns([], _) -> error;
connect_nearest_dns([{root, _} | Rest], Tries) ->
Nodes = dreki_world_dns:all_nodes() -- Tries,
connect_nearest_dns(Rest ++ Nodes, Tries);
connect_nearest_dns([V = {region, _} | Rest], Tries) ->
connect_nearest_dns(Rest ++ dreki_world_dns:parents(V), Tries);
connect_nearest_dns([V = {node, Node} | Rest], Tries) ->
case connect_node(Node) of
ok -> ok;
Error ->
logger:error("Failed to connect to node: ~p: ~p", [Node, Error]),
connect_nearest_dns(Rest, [V | Tries])
end.
connect_node(Node) ->
{ok, Endpoints} = dreki_world_dns:node_ips(Node),
{ok, NodeName} = dreki_world_dns:node_param(Node, node_name),
logger:info("dreki_peer_service: joining node=~p ~p ~p", [Node, NodeName, Endpoints]),
{ok, NodeSpec} = partisan:node_spec(NodeName, Endpoints),
partisan_peer_service:join(NodeSpec).
|