Current section
Files
Jump to
Current section
Files
lib/mnesia/mnesia_repo.ex
defmodule CsQueue.Mnesia.MnesiaRepo do
@moduledoc """
Start mnesia. Initialize schema if it does not exist.
"""
use GenServer
alias CsQueue.Queue.Supervisor, as: QSupervisor
def start_link(_opts) do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def init(_opts) do
initialize_mnesia()
start_table_workers()
{:ok, %{}}
end
defp initialize_mnesia do
:mnesia.system_info(:directory)
|> File.mkdir()
:mnesia.create_schema([Node.self()])
:mnesia.start()
end
defp start_table_workers do
:mnesia.system_info(:tables)
|> Enum.map(&Atom.to_string(&1))
|> Enum.each(fn table_name ->
case Regex.run(~r/(\w+)_waiting_queue/, table_name) do
nil -> :ok
[_partial_match] -> :ok
[_full_match, queue_name] -> QSupervisor.start_child(%{name: queue_name})
end
end)
end
end