From a5a6f08d76cd031bf62d63cc66486e963bf99544 Mon Sep 17 00:00:00 2001 From: "Peter M. Goldstein" Date: Mon, 17 Feb 2014 14:58:52 -0800 Subject: [PATCH 1/8] Add the restart option to the usage string --- examples/sidekiq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/sidekiq b/examples/sidekiq index 42f1e23a..95403ecc 100644 --- a/examples/sidekiq +++ b/examples/sidekiq @@ -93,7 +93,7 @@ case "$1" in fi ;; *) - echo "Usage: $0 {start|stop|status}" + echo "Usage: $0 {start|stop|restart|status}" exit 0 ;; esac From 8911d7dafe2384ebbff6510b0ee5894bb0f54ea2 Mon Sep 17 00:00:00 2001 From: Tom Dallimore Date: Tue, 18 Feb 2014 09:27:04 +0000 Subject: [PATCH 2/8] Added rescue to prevent crashing on Windows 'unsupported signal SIGUSR1' occurs when running on Windows. SIGINT is supported in Windows and the rest would be ignored. --- lib/sidekiq/cli.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/sidekiq/cli.rb b/lib/sidekiq/cli.rb index f6364a0d..6a29af66 100644 --- a/lib/sidekiq/cli.rb +++ b/lib/sidekiq/cli.rb @@ -46,8 +46,12 @@ module Sidekiq self_read, self_write = IO.pipe %w(INT TERM USR1 USR2 TTIN).each do |sig| - trap sig do - self_write.puts(sig) + begin + trap sig do + self_write.puts(sig) + end + rescue ArgumentError + puts "Signal #{sig} not supported" end end From cecfc7f106bc7a5563782d73356915c8c56a1ccb Mon Sep 17 00:00:00 2001 From: Jonathan Hyman Date: Tue, 18 Feb 2014 09:08:43 -0500 Subject: [PATCH 3/8] Fixes a race condition which could result in a scheduled item being added to the queue twice, or a retry being retried twice. --- lib/sidekiq/api.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index b4331780..05d7907d 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -231,8 +231,10 @@ module Sidekiq def add_to_queue Sidekiq.redis do |conn| - results = conn.zrangebyscore('schedule', score, score) - conn.zremrangebyscore('schedule', score, score) + results = conn.multi do + conn.zrangebyscore('schedule', score, score) + conn.zremrangebyscore('schedule', score, score) + end.first results.map do |message| msg = Sidekiq.load_json(message) Sidekiq::Client.push(msg) @@ -243,8 +245,10 @@ module Sidekiq def retry raise "Retry not available on jobs not in the Retry queue." unless item["failed_at"] Sidekiq.redis do |conn| - results = conn.zrangebyscore('retry', score, score) - conn.zremrangebyscore('retry', score, score) + results = conn.multi do + conn.zrangebyscore('retry', score, score) + conn.zremrangebyscore('retry', score, score) + end.first results.map do |message| msg = Sidekiq.load_json(message) msg['retry_count'] = msg['retry_count'] - 1 From b530d59025815c794d695505409f66426199b81e Mon Sep 17 00:00:00 2001 From: Jonathan Hyman Date: Tue, 18 Feb 2014 09:11:01 -0500 Subject: [PATCH 4/8] Removes unnecessary transaction. --- lib/sidekiq/api.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index b4331780..4447af80 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -420,10 +420,7 @@ module Sidekiq Sidekiq.redis do |conn| workers = conn.smembers("workers") workers.each do |w| - msg, time = conn.multi do - conn.get("worker:#{w}") - conn.get("worker:#{w}:started") - end + msg, time = conn.mget("worker:#{w}", "worker:#{w}:started") next unless msg block.call(w, Sidekiq.load_json(msg), time) end From efb624cc2f6500d2c1de718a01c87489f9744e98 Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Tue, 18 Feb 2014 11:23:15 -0800 Subject: [PATCH 5/8] Fix sidekiqctl pidfile issues, fixes #1490 --- bin/sidekiqctl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/sidekiqctl b/bin/sidekiqctl index d80f7522..26268ac9 100755 --- a/bin/sidekiqctl +++ b/bin/sidekiqctl @@ -12,7 +12,7 @@ class Sidekiqctl @timeout = timeout done('No pidfile given', :error) if !pidfile - done("Pidfile #{pidfile} does not exist", :error) if !File.exist?(pidfile) + done("Pidfile #{pidfile} does not exist", :warn) if !File.exist?(pidfile) done('Invalid pidfile content', :error) if pid == 0 fetch_process @@ -40,7 +40,7 @@ class Sidekiqctl end def pid - File.read(pidfile).to_i + @pid ||= File.read(pidfile).to_i end def quiet From d28cbf91359016d13b77ac875620899de958c18e Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Tue, 18 Feb 2014 21:05:23 -0800 Subject: [PATCH 6/8] bump ver --- Changes.md | 5 +++++ lib/sidekiq/version.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Changes.md b/Changes.md index 73e89173..faee5bd2 100644 --- a/Changes.md +++ b/Changes.md @@ -1,3 +1,8 @@ +2.17.6 +----------- + +- Fix capistrano integration due to missing pidfile. [#1490] + 2.17.5 ----------- diff --git a/lib/sidekiq/version.rb b/lib/sidekiq/version.rb index eed4f4c0..c3987c20 100644 --- a/lib/sidekiq/version.rb +++ b/lib/sidekiq/version.rb @@ -1,3 +1,3 @@ module Sidekiq - VERSION = "2.17.5" + VERSION = "2.17.6" end From 20b7a4fe47585ce9c43981305d146bd087540bbf Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Fri, 21 Feb 2014 17:59:32 -0800 Subject: [PATCH 7/8] Auto-prune old jobs from worker list, fixes #1508 --- Changes.md | 5 +++++ lib/sidekiq/web.rb | 2 +- lib/sidekiq/web_helpers.rb | 17 ++++++++++++++++- web/views/_workers.erb | 4 ++-- web/views/{index.erb => workers.erb} | 0 5 files changed, 24 insertions(+), 4 deletions(-) rename web/views/{index.erb => workers.erb} (100%) diff --git a/Changes.md b/Changes.md index faee5bd2..c8cf07a3 100644 --- a/Changes.md +++ b/Changes.md @@ -1,3 +1,8 @@ +2.17.7 +----------- + +- Auto-prune jobs older than one hour from the Workers page [#1508] + 2.17.6 ----------- diff --git a/lib/sidekiq/web.rb b/lib/sidekiq/web.rb index 2288b4e3..d764633e 100644 --- a/lib/sidekiq/web.rb +++ b/lib/sidekiq/web.rb @@ -38,7 +38,7 @@ module Sidekiq end get "/workers" do - erb :index + erb :workers end get "/queues" do diff --git a/lib/sidekiq/web_helpers.rb b/lib/sidekiq/web_helpers.rb index ba881e16..3acecf2b 100644 --- a/lib/sidekiq/web_helpers.rb +++ b/lib/sidekiq/web_helpers.rb @@ -47,13 +47,28 @@ module Sidekiq end end + MAX_JOB_DURATION = 60*60 + def workers @workers ||= begin to_rem = [] workers = Sidekiq.redis do |conn| conn.smembers('workers').map do |w| msg = conn.get("worker:#{w}") - msg ? [w, Sidekiq.load_json(msg)] : (to_rem << w; nil) + if !msg + to_rem << w + nil + else + m = Sidekiq.load_json(msg) + run_at = Time.at(m['run_at']) + # prune jobs older than one hour + if run_at < (Time.now - MAX_JOB_DURATION) + to_rem << w + nil + else + [w, m, run_at] + end + end end.compact.sort { |x| x[1] ? -1 : 1 } end diff --git a/web/views/_workers.erb b/web/views/_workers.erb index 79afb8c8..d5896690 100644 --- a/web/views/_workers.erb +++ b/web/views/_workers.erb @@ -6,7 +6,7 @@ <%= t('Arguments') %> <%= t('Started') %> - <% workers.each_with_index do |(worker, msg), index| %> + <% workers.each_with_index do |(worker, msg, run_at), index| %> <%= worker %> @@ -16,7 +16,7 @@
<%= display_args(msg['payload']['args']) %>
- <%= relative_time(msg['run_at'].is_a?(Numeric) ? Time.at(msg['run_at']) : Time.parse(msg['run_at'])) %> + <%= relative_time(run_at) %> <% end %> diff --git a/web/views/index.erb b/web/views/workers.erb similarity index 100% rename from web/views/index.erb rename to web/views/workers.erb From 939006e05aa0282bcc628db2f5b43ae16025c49f Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Fri, 21 Feb 2014 17:59:49 -0800 Subject: [PATCH 8/8] version bump --- lib/sidekiq/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sidekiq/version.rb b/lib/sidekiq/version.rb index c3987c20..dca173d8 100644 --- a/lib/sidekiq/version.rb +++ b/lib/sidekiq/version.rb @@ -1,3 +1,3 @@ module Sidekiq - VERSION = "2.17.6" + VERSION = "2.17.7" end