From 25ddfd6174ca785b1649b1464c4c639f0f02b969 Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Fri, 17 Feb 2012 21:33:17 -0800 Subject: [PATCH] Speed up shutdown, only pause 5 seconds if necessary --- lib/sidekiq/cli.rb | 2 +- lib/sidekiq/manager.rb | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/sidekiq/cli.rb b/lib/sidekiq/cli.rb index ad9cb5c9..b99058de 100644 --- a/lib/sidekiq/cli.rb +++ b/lib/sidekiq/cli.rb @@ -57,7 +57,7 @@ module Sidekiq sleep rescue Interrupt # TODO Need clean shutdown support from Celluloid - logger.info 'Shutting down, pausing 5 seconds to let workers finish...' + logger.info 'Shutting down' manager.stop! manager.wait(:shutdown) end diff --git a/lib/sidekiq/manager.rb b/lib/sidekiq/manager.rb index 55414ea9..ff758e27 100644 --- a/lib/sidekiq/manager.rb +++ b/lib/sidekiq/manager.rb @@ -35,16 +35,23 @@ module Sidekiq @ready.each(&:terminate) @ready.clear - after(5) do - signal(:shutdown) - end - redis.with_connection do |conn| workers = conn.smembers('workers') workers.each do |name| conn.srem('workers', name) if name =~ /:#{process_id}-/ end end + + if @busy.empty? + return signal(:shutdown) + end + + logger.info("Pausing 5 seconds to allow workers to finish...") + after(5) do + @busy.each(&:terminate) + #@busy.each(&:requeue) + signal(:shutdown) + end end def start