All sidekiq versions supported

This commit is contained in:
Alexey Gaziev 2015-10-13 17:24:04 +08:00
parent e693dcf205
commit 5e49e989ee
4 changed files with 28 additions and 4 deletions

View File

@ -1,4 +1,5 @@
require 'sidekiq'
require 'sidekiq/fetch'
require 'sidekiq/util'
require 'sidekiq/api'
require 'forwardable'
@ -17,6 +18,13 @@ class Sidekiq::LimitFetch
include Redis
Sidekiq.options[:fetch] = self
TIMEOUT = \
if Sidekiq::VERSION < '4.0.0'
Sidekiq::Fetcher::TIMEOUT
else
Sidekiq::BasicFetch::TIMEOUT
end
def self.bulk_requeue(*args)
Sidekiq::BasicFetch.bulk_requeue *args
end
@ -34,7 +42,7 @@ class Sidekiq::LimitFetch
private
def fetch_message
queue, _ = redis_brpop *@queues.acquire, Sidekiq::BasicFetch::TIMEOUT
queue, _ = redis_brpop *@queues.acquire, TIMEOUT
ensure
@queues.release_except queue
end

View File

@ -3,7 +3,21 @@ module Sidekiq::LimitFetch::Redis
def nonblocking_redis
redis do |redis|
# Celluloid 0.16 broke this method + yield redis
if Sidekiq::VERSION >= '4.0.0' || Celluloid::VERSION.to_f >= 0.16
yield redis
else
# prevent blocking of fetcher
# more bullet-proof and faster (O_O)
# than using Celluloid::IO
#
# https://github.com/brainopia/sidekiq-limit_fetch/issues/41
# explanation of why Future#value is beneficial here
begin
Celluloid::Future.new { yield redis }.value
rescue Celluloid::Task::TerminatedError
end
end
end
end

View File

@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
gem.test_files = gem.files.grep %r{^spec/}
gem.require_paths = %w(lib)
gem.add_dependency 'sidekiq', '~> 4.0.0'
gem.add_dependency 'sidekiq', '>= 2.6.5'
gem.add_development_dependency 'rspec', '~> 3.2.0'
gem.add_development_dependency 'rake'
end

View File

@ -1,5 +1,7 @@
require 'sidekiq/limit_fetch'
require 'sidekiq/version'
require 'celluloid/autostart' if Sidekiq::VERSION < '4.0.0'
require 'sidekiq/fetch'
require 'sidekiq/limit_fetch'
Sidekiq.logger = nil
Sidekiq.redis = { namespace: ENV['namespace'] }