solid_queue 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SolidQueue::Processes
4
- class GracefulTerminationRequested < Interrupt; end
5
- class ImmediateTerminationRequested < Interrupt; end
6
-
7
- module Signals
8
- extend ActiveSupport::Concern
9
-
10
- private
11
- SIGNALS = %i[ QUIT INT TERM ]
12
-
13
- def register_signal_handlers
14
- SIGNALS.each do |signal|
15
- trap(signal) do
16
- signal_queue << signal
17
- interrupt
18
- end
19
- end
20
- end
21
-
22
- def restore_default_signal_handlers
23
- SIGNALS.each do |signal|
24
- trap(signal, :DEFAULT)
25
- end
26
- end
27
-
28
- def process_signal_queue
29
- while signal = signal_queue.shift
30
- handle_signal(signal)
31
- end
32
- end
33
-
34
- def handle_signal(signal)
35
- case signal
36
- when :TERM, :INT
37
- request_graceful_termination
38
- when :QUIT
39
- request_immediate_termination
40
- else
41
- SolidQueue.instrument :unhandled_signal_error, signal: signal
42
- end
43
- end
44
-
45
- def request_graceful_termination
46
- raise GracefulTerminationRequested
47
- end
48
-
49
- def request_immediate_termination
50
- raise ImmediateTerminationRequested
51
- end
52
-
53
- def signal_processes(pids, signal)
54
- pids.each do |pid|
55
- signal_process pid, signal
56
- end
57
- end
58
-
59
- def signal_process(pid, signal)
60
- ::Process.kill signal, pid
61
- rescue Errno::ESRCH
62
- # Ignore, process died before
63
- end
64
-
65
- def signal_queue
66
- @signal_queue ||= []
67
- end
68
- end
69
- end