lib/pistis/pod.ex

defmodule Pistis.Pod do
  alias Pistis.Pod.Raft
  alias Pistis.Cluster.Manager
  use Pistis.Core.Journal

  def start(), do: :ra.start()

  def create_pod(pod_index) do
    Task.async(fn -> boot_pod(pod_index) end)
  end

  defp boot_pod(pod_index) do
    pod_address = Manager.create_node(pod_index)
    Manager.wait()

    pod_address
    |> Manager.erlang_connect()
    |> boot_raft()
  end

  def boot_raft(pod_address) do
    :rpc.call(pod_address, Pistis.Pod, :start, [])
    Raft.to_server_id(pod_address)
  end
end