aboutsummaryrefslogtreecommitdiff
path: root/apps/dreki/src/dreki_peer_service.erl
blob: fe69de38e599ef574e5b24e5f59224a38a18d519 (plain) (blame)
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).