Skip to content

Commit ad8c332

Browse files
vanwhaledefunkt
authored andcommitted
requeue and remove failed jobs by queue name
1 parent 87970a9 commit ad8c332

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

lib/resque/failure.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,27 @@ def self.requeue(index)
6666
def self.remove(index)
6767
backend.remove(index)
6868
end
69+
70+
def self.requeue_queue(queue)
71+
i=0
72+
while job = Resque::Failure.all(i)
73+
if job['queue'] == queue
74+
Resque::Failure.requeue(i)
75+
end
76+
i+=1
77+
end
78+
end
79+
80+
def self.remove_queue(queue)
81+
i=0
82+
while job = Resque::Failure.all(i)
83+
if job['queue'] == queue
84+
# This will remove from the queue so don't increment the index
85+
Resque::Failure.remove(i)
86+
else
87+
i+=1
88+
end
89+
end
90+
end
6991
end
7092
end

test/worker_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,4 +352,24 @@ def self.exception
352352
test "returns PID of running process" do
353353
assert_equal @worker.to_s.split(":")[1].to_i, @worker.pid
354354
end
355+
356+
test "requeue failed queue" do
357+
queue = 'good_job'
358+
Resque::Failure.create(:exception => Exception.new, :worker => Resque::Worker.new(queue), :queue => queue, :payload => {'class' => GoodJob})
359+
Resque::Failure.create(:exception => Exception.new, :worker => Resque::Worker.new(queue), :queue => 'some_job', :payload => {'class' => SomeJob})
360+
Resque::Failure.requeue_queue(queue)
361+
assert Resque::Failure.all(0).has_key?('retried_at')
362+
assert !Resque::Failure.all(1).has_key?('retried_at')
363+
end
364+
365+
test "remove failed queue" do
366+
queue = 'good_job'
367+
queue2 = 'some_job'
368+
Resque::Failure.create(:exception => Exception.new, :worker => Resque::Worker.new(queue), :queue => queue, :payload => {'class' => GoodJob})
369+
Resque::Failure.create(:exception => Exception.new, :worker => Resque::Worker.new(queue2), :queue => queue2, :payload => {'class' => SomeJob})
370+
Resque::Failure.create(:exception => Exception.new, :worker => Resque::Worker.new(queue), :queue => queue, :payload => {'class' => GoodJob})
371+
Resque::Failure.remove_queue(queue)
372+
assert_equal queue2, Resque::Failure.all(0)['queue']
373+
assert_equal 1, Resque::Failure.count
374+
end
355375
end

0 commit comments

Comments
 (0)