lib/solver/core/distributed.ex

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