sidekiq-pool 1.5.4 → 1.6.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 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: []