Fix Redis 3.x API issues

This commit is contained in:
Mike Perham 2012-05-26 18:38:55 -07:00
parent 9bea41fb10
commit b486fcf6e0
5 changed files with 37 additions and 7 deletions

View File

@ -28,6 +28,9 @@ I want to specially thank @yabawock for his work on sidekiq-scheduler.
His extension for Sidekiq 1.x filled an obvious functional gap that I now think is
useful enough to implement in Sidekiq proper.
- Fixed issues due to Redis 3.x API changes. Sidekiq now requires
the Redis 3.x client.
1.2.1
-----------

View File

@ -60,16 +60,17 @@ module Sidekiq
end
def retries(count=50)
Sidekiq.redis do |conn|
results = conn.zrange('retry', 0, count, :withscores => true)
results.each_slice(2).map { |msg, score| [Sidekiq.load_json(msg), Float(score)] }
end
zcontents('retry', count)
end
def scheduled(count=50)
zcontents('schedule', count)
end
def zcontents(name, count)
Sidekiq.redis do |conn|
results = conn.zrange('schedule', 0, count, :withscores => true)
results.each_slice(2).map { |msg, score| [Sidekiq.load_json(msg), Float(score)] }
results = conn.zrange(name, 0, count, :withscores => true)
results.map { |msg, score| [Sidekiq.load_json(msg), score] }
end
end

View File

@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
gem.name = "sidekiq"
gem.require_paths = ["lib"]
gem.version = Sidekiq::VERSION
gem.add_dependency 'redis'
gem.add_dependency 'redis', '~> 3'
gem.add_dependency 'redis-namespace'
gem.add_dependency 'connection_pool', '~> 0.9.0'
gem.add_dependency 'celluloid', '~> 0.10.0'

View File

@ -112,6 +112,7 @@ class TestRetry < MiniTest::Unit::TestCase
it 'should poll like a bad mother...SHUT YO MOUTH' do
fake_msg = Sidekiq.dump_json({ 'class' => 'Bob', 'args' => [1,2], 'queue' => 'someq' })
@redis.expect :multi, [[fake_msg], 1], []
@redis.expect :multi, [[], nil], []
@redis.expect :rpush, 1, ['queue:someq', fake_msg]
inst = Sidekiq::Scheduled::Poller.new

View File

@ -80,6 +80,20 @@ class TestWeb < MiniTest::Unit::TestCase
end
end
it 'can display scheduled' do
get '/scheduled'
assert_equal 200, last_response.status
assert_match /found/, last_response.body
refute_match /HardWorker/, last_response.body
add_scheduled
get '/scheduled'
assert_equal 200, last_response.status
refute_match /found/, last_response.body
assert_match /HardWorker/, last_response.body
end
it 'can display retries' do
get '/retries'
assert_equal 200, last_response.status
@ -104,6 +118,17 @@ class TestWeb < MiniTest::Unit::TestCase
assert_match /HardWorker/, last_response.body
end
def add_scheduled
msg = { 'class' => 'HardWorker',
'args' => ['bob', 1, Time.now.to_f],
'at' => Time.now.to_f }
score = Time.now.to_f
Sidekiq.redis do |conn|
conn.zadd('schedule', score, Sidekiq.dump_json(msg))
end
[msg, score]
end
def add_retry
msg = { 'class' => 'HardWorker',
'args' => ['bob', 1, Time.now.to_f],