From b04f7ac0339ec5fe63bf0b888f223954e002398e Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Fri, 10 May 2013 16:37:11 -0700 Subject: [PATCH] More intelligent redis error handling for job fetch --- Changes.md | 2 ++ lib/sidekiq/fetch.rb | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Changes.md b/Changes.md index 3c31f18c..0d7b7b03 100644 --- a/Changes.md +++ b/Changes.md @@ -1,6 +1,8 @@ 2.11.3 ----------- +- Better handling for Redis downtime when fetching jobs, don't print + exceptions every second and print success message when Redis is back. - Fix unclean shutdown leading to duplicate jobs [#897] - Add Korean locale [#890] diff --git a/lib/sidekiq/fetch.rb b/lib/sidekiq/fetch.rb index 2e3d0430..4c804869 100644 --- a/lib/sidekiq/fetch.rb +++ b/lib/sidekiq/fetch.rb @@ -13,6 +13,7 @@ module Sidekiq TIMEOUT = 1 def initialize(mgr, options) + @down = nil @mgr = mgr @strategy = Fetcher.strategy.new(options) end @@ -31,6 +32,8 @@ module Sidekiq begin work = @strategy.retrieve_work + ::Sidekiq.logger.info("Redis is online, #{Time.now.to_f - @down.to_f} sec downtime") if @down + @down = nil if work @mgr.async.assign(work) @@ -38,8 +41,13 @@ module Sidekiq after(0) { fetch } end rescue => ex - logger.error("Error fetching message: #{ex}") - logger.error(ex.backtrace.first) + if !@down + logger.error("Error fetching message: #{ex}") + ex.backtrace.each do |bt| + logger.error(bt) + end + end + @down ||= Time.now sleep(TIMEOUT) after(0) { fetch } end