diff --git a/Changes.md b/Changes.md index c9cc51dc..501a06ff 100644 --- a/Changes.md +++ b/Changes.md @@ -1,6 +1,6 @@ HEAD ----------- - +- Add random integer to process identity [#2113, michaeldiscala] - Log Sidekiq Pro's Batch ID if available [#2076] - Refactor Processor Redis usage to avoid redis/redis-rb#490 [#] - Add better usage text for `sidekiqctl`. diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index 20dde163..44df0a30 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -616,6 +616,7 @@ module Sidekiq # 'queues' => ['default', 'low'], # 'busy' => 10, # 'beat' => , + # 'identity' => , # } class Process def initialize(hash) @@ -655,7 +656,7 @@ module Sidekiq end def identity - @id ||= "#{self['hostname']}:#{self['pid']}" + self['identity'] end end diff --git a/lib/sidekiq/launcher.rb b/lib/sidekiq/launcher.rb index f6d4aa74..ccba06d0 100644 --- a/lib/sidekiq/launcher.rb +++ b/lib/sidekiq/launcher.rb @@ -75,6 +75,7 @@ module Sidekiq 'concurrency' => @options[:concurrency], 'queues' => @options[:queues].uniq, 'labels' => Sidekiq.options[:labels], + 'identity' => identity, } # this data doesn't change so dump it to a string # now so we don't need to dump it every heartbeat. diff --git a/lib/sidekiq/util.rb b/lib/sidekiq/util.rb index 223be3a7..3f38976d 100644 --- a/lib/sidekiq/util.rb +++ b/lib/sidekiq/util.rb @@ -1,4 +1,5 @@ require 'socket' +require 'securerandom' require 'sidekiq/exception_handler' require 'sidekiq/core_ext' @@ -30,8 +31,12 @@ module Sidekiq ENV['DYNO'] || Socket.gethostname end + def process_nonce + @@process_nonce ||= SecureRandom.hex(6) + end + def identity - @@identity ||= "#{hostname}:#{$$}" + @@identity ||= "#{hostname}:#{$$}:#{process_nonce}" end def fire_event(event) diff --git a/lib/sidekiq/web.rb b/lib/sidekiq/web.rb index d0bbefdf..09eb408a 100644 --- a/lib/sidekiq/web.rb +++ b/lib/sidekiq/web.rb @@ -45,8 +45,8 @@ module Sidekiq end post "/busy" do - if params['hostname'] - p = Sidekiq::Process.new('hostname' => params["hostname"], 'pid' => params['pid']) + if params['identity'] + p = Sidekiq::Process.new('identity' => params['identity']) p.quiet! if params[:quiet] p.stop! if params[:stop] else diff --git a/test/test_api.rb b/test/test_api.rb index 41e687d7..aa16421e 100644 --- a/test/test_api.rb +++ b/test/test_api.rb @@ -374,7 +374,15 @@ class TestApi < Sidekiq::Test end it 'can enumerate processes' do - odata = { 'pid' => 123, 'hostname' => hostname, 'key' => "#{hostname}:123", 'started_at' => Time.now.to_f - 15 } + identity_string = "identity_string" + odata = { + 'pid' => 123, + 'hostname' => hostname, + 'key' => identity_string, + 'identity' => identity_string, + 'started_at' => Time.now.to_f - 15, + } + time = Time.now.to_f Sidekiq.redis do |conn| conn.multi do @@ -392,8 +400,9 @@ class TestApi < Sidekiq::Test assert_equal 123, data['pid'] data.quiet! data.stop! - assert_equal "TERM", Sidekiq.redis{|c| c.lpop("#{hostname}:123-signals") } - assert_equal "USR1", Sidekiq.redis{|c| c.lpop("#{hostname}:123-signals") } + signals_string = "#{odata['key']}-signals" + assert_equal "TERM", Sidekiq.redis{|c| c.lpop(signals_string) } + assert_equal "USR1", Sidekiq.redis{|c| c.lpop(signals_string) } end it 'can enumerate workers' do diff --git a/test/test_web.rb b/test/test_web.rb index f3d4596f..988bdeac 100644 --- a/test/test_web.rb +++ b/test/test_web.rb @@ -50,17 +50,23 @@ class TestWeb < Sidekiq::Test end it 'can quiet a process' do - assert_nil Sidekiq.redis { |c| c.lpop "host:pid-signals" } - post '/busy', 'quiet' => '1', 'hostname' => 'host', 'pid' => 'pid' + identity = 'identity' + signals_key = "#{identity}-signals" + + assert_nil Sidekiq.redis { |c| c.lpop signals_key } + post '/busy', 'quiet' => '1', 'identity' => identity assert_equal 302, last_response.status - assert_equal 'USR1', Sidekiq.redis { |c| c.lpop "host:pid-signals" } + assert_equal 'USR1', Sidekiq.redis { |c| c.lpop signals_key } end it 'can stop a process' do - assert_nil Sidekiq.redis { |c| c.lpop "host:pid-signals" } - post '/busy', 'stop' => '1', 'hostname' => 'host', 'pid' => 'pid' + identity = 'identity' + signals_key = "#{identity}-signals" + + assert_nil Sidekiq.redis { |c| c.lpop signals_key } + post '/busy', 'stop' => '1', 'identity' => identity assert_equal 302, last_response.status - assert_equal 'TERM', Sidekiq.redis { |c| c.lpop "host:pid-signals" } + assert_equal 'TERM', Sidekiq.redis { |c| c.lpop signals_key } end end diff --git a/web/views/busy.erb b/web/views/busy.erb index 7f0b12af..5723a5e1 100644 --- a/web/views/busy.erb +++ b/web/views/busy.erb @@ -39,8 +39,7 @@
- - +