From 846d0fb16de3a343400e8b8ff96731a606b4271c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Wed, 7 Aug 2024 08:21:57 +0200 Subject: [PATCH] feat: add supervisor --- lib/todo/cache.ex | 11 +++++++---- lib/todo/database.ex | 7 ++++--- lib/todo/database_worker.ex | 3 ++- lib/todo/server.ex | 2 ++ lib/todo/system.ex | 14 ++++++++++++++ 5 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 lib/todo/system.ex diff --git a/lib/todo/cache.ex b/lib/todo/cache.ex index 9e29fc6..b774a1c 100644 --- a/lib/todo/cache.ex +++ b/lib/todo/cache.ex @@ -3,7 +3,10 @@ defmodule Todo.Cache do @impl GenServer def init(_init_args) do + IO.puts("Starting #{__MODULE__}") + Todo.Database.start() + {:ok, %{}} end @@ -22,11 +25,11 @@ defmodule Todo.Cache do end end - def start() do - GenServer.start(__MODULE__, nil) + def start_link(_) do + GenServer.start_link(__MODULE__, nil, name: __MODULE__) end - def server_process(pid, name) do - GenServer.call(pid, {:server_process, name}) + def server_process(name) do + GenServer.call(__MODULE__, {:server_process, name}) end end diff --git a/lib/todo/database.ex b/lib/todo/database.ex index b67dfb8..2660223 100644 --- a/lib/todo/database.ex +++ b/lib/todo/database.ex @@ -19,6 +19,8 @@ defmodule Todo.Database do @impl GenServer def init(_) do + IO.puts("Starting #{__MODULE__}") + File.mkdir_p!(@db_folder) {:ok, nil, {:continue, :init}} @@ -36,14 +38,13 @@ defmodule Todo.Database do end) |> Map.new() - IO.inspect(workers) {:noreply, workers} end @impl GenServer def handle_cast({:store, key, data}, workers) do workers - |> get_worker(key) + |> choose_worker(key) |> DatabaseWorker.store(key, data) {:noreply, workers} @@ -53,7 +54,7 @@ defmodule Todo.Database do def handle_call({:get, key}, _, workers) do data = workers - |> get_worker(key) + |> choose_worker(key) |> DatabaseWorker.get(key) {:reply, data, workers} diff --git a/lib/todo/database_worker.ex b/lib/todo/database_worker.ex index 8a2e265..4ad902a 100644 --- a/lib/todo/database_worker.ex +++ b/lib/todo/database_worker.ex @@ -15,6 +15,8 @@ defmodule Todo.DatabaseWorker do @impl GenServer def init(db_folder) do + IO.puts("Starting #{__MODULE__} with db folder #{db_folder}.") + {:ok, db_folder} end @@ -44,5 +46,4 @@ defmodule Todo.DatabaseWorker do def file_name({db_folder, key}) do Path.join(db_folder, to_string(key)) end - end diff --git a/lib/todo/server.ex b/lib/todo/server.ex index 2688873..a881bc6 100644 --- a/lib/todo/server.ex +++ b/lib/todo/server.ex @@ -23,6 +23,8 @@ defmodule Todo.Server do @impl GenServer def init(name) do + IO.puts("Starting #{__MODULE__} for #{name}.") + {:ok, {name, nil}, {:continue, :init}} end diff --git a/lib/todo/system.ex b/lib/todo/system.ex new file mode 100644 index 0000000..c9ff243 --- /dev/null +++ b/lib/todo/system.ex @@ -0,0 +1,14 @@ +defmodule Todo.System do + use Supervisor + + def start_link do + Supervisor.start_link(__MODULE__, nil) + end + + def init(_) do + Supervisor.init( + [Todo.Cache], + strategy: :one_for_one + ) + end +end