sidekiq-worker-killer 1.0.1 → 1.1.0
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.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/sidekiq/worker_killer/version.rb +1 -1
- data/lib/sidekiq/worker_killer.rb +11 -1
- data/spec/sidekiq/worker_killer_spec.rb +22 -0
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1335f7577f6a507808c59651cc9f479a49a9d54e144906b39b06355af0fcfcba
|
4
|
+
data.tar.gz: f61243439575d5ec2f75e0e7e803ff6588279b349a4ab9ebabc62e58fb3fcb7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97742129013c4374090ed58f35d9b407f6dc2b9ff44a23d4de187b7d3035c11961ebb089b0753bf7b1688d386d77b2aef7cceba4344dd614a2dd3181fc28a0c2
|
7
|
+
data.tar.gz: cbf8b55a9bbf3171f988c0eabb4a137bbe3e458f9aa8368cb2c1cbe3759a14ce4b6dd919b9568458e48ac473c7780f01ad72be437503ee8e3695e1b67613f59d
|
data/README.md
CHANGED
@@ -52,6 +52,7 @@ The following options can be overridden.
|
|
52
52
|
| kill_signal | SIGKILL | Signal to use to kill Sidekiq process if it doesn't stop. |
|
53
53
|
| gc | true | Try to run garbage collection before Sidekiq process stops in case of exceeded max_rss. |
|
54
54
|
| skip_shutdown_if | proc {false} | Executes a block of code after max_rss exceeds but before requesting shutdown. |
|
55
|
+
| on_shutdown | nil | Executes a block of code before just before requesting shutdown. This can be used to send custom logs or metrics to external services. |
|
55
56
|
|
56
57
|
*skip_shutdown_if* is expected to return anything other than `false` or `nil` to skip shutdown.
|
57
58
|
|
@@ -36,6 +36,9 @@ class Sidekiq::WorkerKiller
|
|
36
36
|
# @option options [Proc] skip_shutdown_if
|
37
37
|
# Executes a block of code after max_rss exceeds but before requesting
|
38
38
|
# shutdown. (default: `proc {false}`)
|
39
|
+
# @option options [Proc] on_shutdown
|
40
|
+
# Executes a block of code right before a shutdown happens.
|
41
|
+
# (default: `nil`)
|
39
42
|
def initialize(options = {})
|
40
43
|
@max_rss = options.fetch(:max_rss, 0)
|
41
44
|
@grace_time = options.fetch(:grace_time, 15 * 60)
|
@@ -43,6 +46,7 @@ class Sidekiq::WorkerKiller
|
|
43
46
|
@kill_signal = options.fetch(:kill_signal, "SIGKILL")
|
44
47
|
@gc = options.fetch(:gc, true)
|
45
48
|
@skip_shutdown = options.fetch(:skip_shutdown_if, proc { false })
|
49
|
+
@on_shutdown = options.fetch(:on_shutdown, nil)
|
46
50
|
end
|
47
51
|
|
48
52
|
# @param [String, Class] worker_class
|
@@ -68,17 +72,23 @@ class Sidekiq::WorkerKiller
|
|
68
72
|
|
69
73
|
warn "current RSS #{current_rss} of #{identity} exceeds " \
|
70
74
|
"maximum RSS #{@max_rss}"
|
75
|
+
|
76
|
+
run_shutdown_hook(worker, job, queue)
|
71
77
|
request_shutdown
|
72
78
|
end
|
73
79
|
|
74
80
|
private
|
75
81
|
|
82
|
+
def run_shutdown_hook(worker, job, queue)
|
83
|
+
@on_shutdown.respond_to?(:call) && @on_shutdown.call(worker, job, queue)
|
84
|
+
end
|
85
|
+
|
76
86
|
def skip_shutdown?(worker, job, queue)
|
77
87
|
@skip_shutdown.respond_to?(:call) && @skip_shutdown.call(worker, job, queue)
|
78
88
|
end
|
79
89
|
|
80
90
|
def request_shutdown
|
81
|
-
# In another thread to allow
|
91
|
+
# In another thread to allow underlying job to finish
|
82
92
|
Thread.new do
|
83
93
|
# Only if another thread is not already
|
84
94
|
# shutting down the Sidekiq process
|
@@ -129,6 +129,28 @@ describe Sidekiq::WorkerKiller do
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
|
+
context "and on_shutdown is given" do
|
133
|
+
subject{ described_class.new(max_rss: 2, on_shutdown: on_shutdown_proc) }
|
134
|
+
|
135
|
+
context "and on_shutdown is a proc" do
|
136
|
+
let(:on_shutdown_proc) { proc { |worker, job, queue| nil } }
|
137
|
+
it "should execute on_shutdown hook" do
|
138
|
+
expect(subject).to receive(:request_shutdown).once
|
139
|
+
expect(on_shutdown_proc).to receive(:call).once
|
140
|
+
subject.call(worker, job, queue){}
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context "and on_shutdown is a lambda" do
|
145
|
+
let(:on_shutdown_proc) { ->(worker, job, queue) { nil } }
|
146
|
+
it "should execute on_shutdown hook" do
|
147
|
+
expect(subject).to receive(:request_shutdown).once
|
148
|
+
expect(on_shutdown_proc).to receive(:call).once
|
149
|
+
subject.call(worker, job, queue){}
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
132
154
|
context "when gc is false" do
|
133
155
|
subject{ described_class.new(max_rss: 2, gc: false) }
|
134
156
|
it "should not call garbage collect" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-worker-killer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyrille Courtiere
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: get_process_mem
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description:
|
83
|
+
description:
|
84
84
|
email:
|
85
85
|
- dev@klaxit.com
|
86
86
|
executables: []
|
@@ -95,7 +95,7 @@ files:
|
|
95
95
|
homepage: http://github.com/klaxit/sidekiq-worker-killer
|
96
96
|
licenses: []
|
97
97
|
metadata: {}
|
98
|
-
post_install_message:
|
98
|
+
post_install_message:
|
99
99
|
rdoc_options: []
|
100
100
|
require_paths:
|
101
101
|
- lib
|
@@ -110,8 +110,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
requirements: []
|
113
|
-
rubygems_version: 3.
|
114
|
-
signing_key:
|
113
|
+
rubygems_version: 3.3.26
|
114
|
+
signing_key:
|
115
115
|
specification_version: 4
|
116
116
|
summary: Sidekiq worker killer
|
117
117
|
test_files:
|