Skip to content

Commit fe2789e

Browse files
committed
improvements on job death
1 parent 6ecd2e3 commit fe2789e

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

lib/elixir_queue/worker_pool.ex

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,32 @@ defmodule ElixirQueue.WorkerPool do
5454
end
5555

5656
@impl true
57-
def handle_info({:DOWN, _ref, :process, pid, _reason}, %{
57+
def handle_info({:DOWN, _ref, :process, dead_worker, _reason}, %{
5858
pids: pids,
5959
successful_jobs: successful_jobs,
6060
failed_jobs: failed_jobs
6161
}) do
62-
{:ok, new_pid} = DynamicSupervisor.start_child(WorkerSupervisor, Worker)
63-
new_ref = Process.monitor(new_pid)
64-
65-
pids = Enum.filter(pids, &(&1 != pid))
62+
{:ok, worker} = DynamicSupervisor.start_child(WorkerSupervisor, Worker)
63+
worker_reference = Process.monitor(worker)
64+
pids = Enum.filter(pids, &(&1 != dead_worker))
65+
66+
unless Mix.env() == :test,
67+
do:
68+
Logger.error("""
69+
Worker #{inspect(dead_worker)} received EXIT SIGNAL.
70+
It have been replaced by #{inspect(worker)} worker.
71+
All the job progress was lost and job failed.
72+
""")
6673

6774
{:noreply,
68-
%{pids: [{pid, new_ref} | pids], successful_jobs: successful_jobs, failed_jobs: failed_jobs}}
75+
%{
76+
pids: [{worker, worker_reference} | pids],
77+
successful_jobs: successful_jobs,
78+
failed_jobs: failed_jobs
79+
}}
6980
end
7081

71-
def handle_info(_msg, state) do
72-
{:noreply, state}
73-
end
82+
def handle_info(_msg, state), do: {:noreply, state}
7483

7584
# Client side functions
7685
@spec add_worker(pid()) :: :ok

0 commit comments

Comments
 (0)