aboutsummaryrefslogtreecommitdiff
path: root/apps/dreki/src/dreki_peer_service.erl
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dreki/src/dreki_peer_service.erl')
-rw-r--r--apps/dreki/src/dreki_peer_service.erl32
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).
+