1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Merge pull request #123 from Burgestrand/faithful_perform_async

Have Redis tell us if perform_async succeeded
This commit is contained in:
Mike Perham 2012-04-11 13:30:13 -07:00
commit 2e736be796
2 changed files with 10 additions and 4 deletions

View file

@ -41,14 +41,13 @@ module Sidekiq
Sidekiq.client_middleware.invoke(worker_class, item, queue) do
payload = MultiJson.encode(item)
Sidekiq.redis do |conn|
conn.multi do
_, pushed = conn.multi do
conn.sadd('queues', queue)
conn.rpush("queue:#{queue}", payload)
end
end
pushed = true
end
pushed
!! pushed
end
# Redis compatibility helper. Example usage:

View file

@ -30,7 +30,7 @@ class TestClient < MiniTest::Unit::TestCase
describe 'with mock redis' do
before do
@redis = MiniTest::Mock.new
def @redis.multi; yield if block_given?; end
def @redis.multi; [yield] * 2 if block_given?; end
def @redis.set(*); true; end
def @redis.sadd(*); true; end
def @redis.srem(*); true; end
@ -74,6 +74,13 @@ class TestClient < MiniTest::Unit::TestCase
@redis.verify
end
it 'handles perform_async on failure' do
@redis.expect :rpush, nil, ['queue:default', String]
pushed = MyWorker.perform_async(1, 2)
refute pushed
@redis.verify
end
it 'enqueues messages to redis' do
@redis.expect :rpush, 1, ['queue:default', String]
pushed = Sidekiq::Client.enqueue(MyWorker, 1, 2)