sidekiq-worker-killer 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4be8fc2573572f8428c331dc1ea372c951898f13
4
- data.tar.gz: cc93aa9658b9becb22c499aaf6d73a8b24629aaa
3
+ metadata.gz: 4269c4f6da1a1eff0beed38c5ced2f6fca035b83
4
+ data.tar.gz: 9d9fb7cb1bf97982dfb489ab5a397b06930c0620
5
5
  SHA512:
6
- metadata.gz: 62f4ed8ef018035f1688aa4f90ac92bab7127814ebed837ef51b4743be6966bb1f59c87df05dc73d0bfe0a2d882c9aa3ef024a35b84e126165ef8f71b3816b71
7
- data.tar.gz: 2852845d75c163bd682dd1bf073040bd620c68d871eaddb5cb818dfe3cc2e39aa0532264b223572d59c23cbbe804ba06d38770e941fec4e6bd809b9854931b03
6
+ metadata.gz: 716ea8ce12527e8653f0bc08c9cc16acc428917340907a9701e2e45d8f3996a157dacc634a96d0db74db3dfa949ba8ffb0377391837942df5d343d5b1870463f
7
+ data.tar.gz: 0f04a39f3ac416f231e7b075a34ce827f4c435183e1b2277d50ce1fb4392b66a7ddcef59c60d4c0e1392ac34c572849501624d8be642b3cb76495562ebd85cd5
data/README.md CHANGED
@@ -32,7 +32,7 @@ The following options can be overrided.
32
32
  | Option | Defaults | Description |
33
33
  | ------- | ------- | ----------- |
34
34
  | max_rss | 0 MB (disabled) | max RSS in megabytes. Above this, shutdown will be triggered. |
35
- | grace_time | 900 seconds | when shutdown is triggered, the Sidekiq process will not accept new job but wait 15 minutes for running jobs to finish. |
35
+ | grace_time | 900 seconds | when shutdown is triggered, the Sidekiq process will not accept new job and wait at most 15 minutes for running jobs to finish. |
36
36
  | shutdown_wait | 30 seconds | when the grace time expires, still running jobs get 30 seconds to terminate. After that, kill signal is triggered. |
37
37
  | kill_signal | SIGKILL | Signal to use kill Sidekiq process if it doesn't terminate. |
38
38
 
@@ -21,6 +21,8 @@ module Sidekiq
21
21
  yield
22
22
  # Skip if the max RSS is not exceeded
23
23
  return unless @max_rss > 0 && current_rss > @max_rss
24
+ GC.start(full_mark: true, immediate_sweep: true)
25
+ return unless @max_rss > 0 && current_rss > @max_rss
24
26
  # Launch the shutdown process
25
27
  warn "current RSS #{current_rss} of #{identity} exceeds " \
26
28
  "maximum RSS #{@max_rss}"
@@ -43,7 +45,7 @@ module Sidekiq
43
45
  signal(quiet_signal, pid)
44
46
 
45
47
  warn "shutting down #{identity} in #{@grace_time} seconds"
46
- sleep(@grace_time)
48
+ wait_job_finish_in_grace_time
47
49
 
48
50
  warn "sending SIGTERM to #{identity}"
49
51
  signal("SIGTERM", pid)
@@ -56,6 +58,21 @@ module Sidekiq
56
58
  signal(@kill_signal, pid)
57
59
  end
58
60
 
61
+ def wait_job_finish_in_grace_time
62
+ start = Time.now
63
+ loop do
64
+ break if start + @grace_time < Time.now || no_jobs_on_quiet_processes?
65
+ sleep(1)
66
+ end
67
+ end
68
+
69
+ def no_jobs_on_quiet_processes?
70
+ Sidekiq::ProcessSet.new.each do |process|
71
+ return false if !process["busy"].zero? && process["quiet"]
72
+ end
73
+ true
74
+ end
75
+
59
76
  def current_rss
60
77
  ::GetProcessMem.new.mb
61
78
  end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  class WorkerKiller
3
- VERSION = "0.2.1".freeze
3
+ VERSION = "0.3.0".freeze
4
4
  end
5
5
  end
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: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyrille Courtiere
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-13 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: get_process_mem
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  version: '0'
98
98
  requirements: []
99
99
  rubyforge_project:
100
- rubygems_version: 2.6.14
100
+ rubygems_version: 2.5.2.3
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: Sidekiq worker killer