defmodule CPSolver.Distributed do def call(node, solver, mod, function, args) do :erpc.call(node, mod, function, [solver | args]) end def worker_nodes(node_list \\ [Node.self() | Node.list()]) do node_list end def choose_worker_node(nodes \\ worker_nodes()) def choose_worker_node(true) do worker_nodes() |> choose_worker_node() end def choose_worker_node(distributed?) when not distributed? do Node.self() end def choose_worker_node(node_list) when is_list(node_list) do Enum.random(node_list) end end