@@ -54,23 +54,32 @@ defmodule ElixirQueue.WorkerPool do
54
54
end
55
55
56
56
@ impl true
57
- def handle_info ( { :DOWN , _ref , :process , pid , _reason } , % {
57
+ def handle_info ( { :DOWN , _ref , :process , dead_worker , _reason } , % {
58
58
pids: pids ,
59
59
successful_jobs: successful_jobs ,
60
60
failed_jobs: failed_jobs
61
61
} ) 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
+ """ )
66
73
67
74
{ :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
+ } }
69
80
end
70
81
71
- def handle_info ( _msg , state ) do
72
- { :noreply , state }
73
- end
82
+ def handle_info ( _msg , state ) , do: { :noreply , state }
74
83
75
84
# Client side functions
76
85
@ spec add_worker ( pid ( ) ) :: :ok
0 commit comments