diff --git a/lib/scheduler/manager.rb b/lib/scheduler/manager.rb index 6e74d219a..74ef05658 100644 --- a/lib/scheduler/manager.rb +++ b/lib/scheduler/manager.rb @@ -184,7 +184,11 @@ module Scheduler return unless key if due.to_i <= Time.now.to_i klass = get_klass(key) - return unless klass + unless klass + # corrupt key, nuke it (renamed job or something) + redis.zrem Manager.queue_key, key + return + end info = schedule_info(klass) info.prev_run = Time.now.to_i info.prev_result = "QUEUED" diff --git a/spec/components/scheduler/manager_spec.rb b/spec/components/scheduler/manager_spec.rb index 2f9dbe8e5..eec63758f 100644 --- a/spec/components/scheduler/manager_spec.rb +++ b/spec/components/scheduler/manager_spec.rb @@ -59,6 +59,13 @@ describe Scheduler::Manager do describe '#tick' do + it 'should nuke missing jobs' do + $redis.zadd Scheduler::Manager.queue_key, Time.now.to_i - 1000, "BLABLA" + manager.tick + $redis.zcard(Scheduler::Manager.queue_key).should == 0 + + end + it 'should recover from crashed manager' do info = manager.schedule_info(Testing::SuperLongJob)