sidekiq-pool 1.5.4 → 1.6.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: f398c3a7872ba4a1fc067774741fea66e52f23dd
4
- data.tar.gz: b296394a24798e387dfde35e67a7682653509c24
3
+ metadata.gz: aae2717b1470d3fe230ee71d92ed00e2c8a657ab
4
+ data.tar.gz: 28320e8f8244f32866a8e8791f36f16e896cc0d5
5
5
  SHA512:
6
- metadata.gz: 95a3517a34ee42621ce2cf6f3dabe722db1ff51ed215e28005b2167dd7bc7d4da5684d3305b245ac132f5740887428d927edeea9d8e04683a839ffc937eaf8dd
7
- data.tar.gz: bddba9d1436f510522c9afb43ddd5fb09acccee120d786cec3c1da75d0422ec115ee630d3105d46702aa2f9be1f80f7ee84daa123e4c7433c2efd57988008329
6
+ metadata.gz: 21a5f70aa506b01a412796dd17ca62891cc152f07474eb8e44b649e0a5d9f8e476bca86831b3dfc280b183628c26e23e668d77c3c5f3d39e1248154497699b26
7
+ data.tar.gz: c7d6a1d24110e31198e465b51524e78586b5b05010468c027706baa54da757ce06cb116e412af62da4945e7faa7526e3244b0155f1f95e82818e994eea0a40f6
data/bin/sidekiq-pool CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Quiet some warnings we see when running in warning mode:
4
- # RUBYOPT=-w bundle exec sidekiq-pool
5
3
  $TESTING = false
6
4
 
7
5
  require_relative '../lib/sidekiq/pool/cli'
@@ -4,10 +4,17 @@ require 'sidekiq/pool/version'
4
4
  module Sidekiq
5
5
  module Pool
6
6
  class CLI < Sidekiq::CLI
7
+
8
+ START_CTX = {
9
+ :argv => ARGV.map(&:dup),
10
+ 0 => $0.dup,
11
+ }
12
+
7
13
  def initialize
8
14
  @child_index = 0
9
15
  @pool = []
10
16
  @done = false
17
+ @system_booted = false
11
18
  super
12
19
  end
13
20
 
@@ -41,6 +48,15 @@ module Sidekiq
41
48
 
42
49
  DEFAULT_FORK_WAIT = 1
43
50
 
51
+ def boot_system
52
+ if @system_booted
53
+ logger.info "#{::Process.pid} - environment already started"
54
+ else
55
+ super
56
+ @system_booted = true
57
+ end
58
+ end
59
+
44
60
  def working_directory
45
61
  @working_directory || @settings[:working_directory]
46
62
  end
@@ -49,6 +65,9 @@ module Sidekiq
49
65
  logger.info 'Starting new pool'
50
66
  @settings = parse_config_file(@pool_config)
51
67
  Dir.chdir(working_directory) if working_directory
68
+
69
+ boot_system
70
+
52
71
  @types = @settings[:workers]
53
72
  @types.each do |type|
54
73
  type[:amount].times do
@@ -56,6 +75,7 @@ module Sidekiq
56
75
  fork_child(type[:command])
57
76
  end
58
77
  end
78
+ drop_reload_marker
59
79
  end
60
80
 
61
81
  def parse_options(argv)
@@ -228,25 +248,43 @@ module Sidekiq
228
248
  logger.info "Sending #{sig} signal to the pool"
229
249
  signal_to_pool(sig)
230
250
  when 'HUP'
231
- logger.info 'Gracefully reloading pool'
232
- old_pool = @pool.dup
251
+ reload
252
+ end
253
+ end
254
+
255
+ def reload
256
+ logger.info 'Gracefully reloading pool'
233
257
 
234
- # Signal old pool
235
- # USR1 tells Sidekiq it will be shutting down in near future.
236
- signal_to_pool('USR1') if @suspend_before_graceful_reload
258
+ # USR1 tells Sidekiq it will be shutting down in near future.
259
+ signal_to_pool('USR1') if @suspend_before_graceful_reload
237
260
 
238
- # Reset pool
239
- @pool = []
261
+ add_reload_marker
262
+ reexec
240
263
 
241
- # Start new pool
242
- start_new_pool
264
+ stop_children
265
+ logger.info 'Graceful reload completed'
266
+ ensure
267
+ exit(0)
268
+ end
243
269
 
244
- # Stop old pool
245
- stop_children(old_pool)
246
- logger.info 'Graceful reload completed'
270
+ def reexec
271
+ fork do
272
+ cmd = [START_CTX[0]].concat(START_CTX[:argv])
273
+ logger.info("Starting new master process #{cmd}")
274
+ exec(*cmd)
247
275
  end
248
276
  end
249
277
 
278
+ def add_reload_marker
279
+ return unless options[:pidfile]
280
+ File.write([options[:pidfile], '.reload'].join, '')
281
+ end
282
+
283
+ def drop_reload_marker
284
+ reload_marker = [options[:pidfile], '.reload'].join
285
+ File.unlink(reload_marker) if File.exist?(reload_marker)
286
+ end
287
+
250
288
  def signal_to_pool(sig, given_pool = @pool)
251
289
  given_pool.each { |child| signal_to_child(sig, child[:pid]) }
252
290
  end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Pool
3
- VERSION = '1.5.4'
3
+ VERSION = '1.6.0'
4
4
  end
5
5
  end
data/sidekiq-pool.gemspec CHANGED
@@ -6,8 +6,8 @@ require 'sidekiq/pool/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'sidekiq-pool'
8
8
  spec.version = Sidekiq::Pool::VERSION
9
- spec.authors = ['Laurynas Butkus']
10
- spec.email = ['laurynas.butkus@gmail.com']
9
+ spec.authors = ['Laurynas Butkus', 'Raimondas Valickas']
10
+ spec.email = ['laurynas.butkus@gmail.com', 'raimondas.valickas@gmail.com']
11
11
 
12
12
  spec.summary = %q{Forks and manages multiple Sidekiq processes}
13
13
  spec.description = %q{Allows Sidekiq using more CPU cores on Ruby MRI by forking multiple processes.}
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.4
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurynas Butkus
8
+ - Raimondas Valickas
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2017-09-28 00:00:00.000000000 Z
12
+ date: 2018-03-20 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: sidekiq
@@ -75,6 +76,7 @@ dependencies:
75
76
  description: Allows Sidekiq using more CPU cores on Ruby MRI by forking multiple processes.
76
77
  email:
77
78
  - laurynas.butkus@gmail.com
79
+ - raimondas.valickas@gmail.com
78
80
  executables:
79
81
  - sidekiq-pool
80
82
  extensions: []