diff options
Diffstat (limited to 'apps/dreki/src/dreki_peer_service.erl')
-rw-r--r-- | apps/dreki/src/dreki_peer_service.erl | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/apps/dreki/src/dreki_peer_service.erl b/apps/dreki/src/dreki_peer_service.erl new file mode 100644 index 0000000..fe69de3 --- /dev/null +++ b/apps/dreki/src/dreki_peer_service.erl @@ -0,0 +1,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). + |