Fix infinite loop in AccountsStatusesCleanupScheduler (#24840)
parent
7012bf6ed3
commit
7bd34f8b23
|
@ -79,6 +79,7 @@ class Scheduler::AccountsStatusesCleanupScheduler
|
||||||
# and start back after the last processed account otherwise
|
# and start back after the last processed account otherwise
|
||||||
break if budget.zero? || (num_processed_accounts.zero? && !full_iteration)
|
break if budget.zero? || (num_processed_accounts.zero? && !full_iteration)
|
||||||
|
|
||||||
|
full_iteration = false unless first_iteration
|
||||||
first_iteration = false
|
first_iteration = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -141,6 +141,20 @@ describe Scheduler::AccountsStatusesCleanupScheduler do
|
||||||
expect { subject.perform }.to change { Status.count }.by(-30)
|
expect { subject.perform }.to change { Status.count }.by(-30)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when there is no work to be done' do
|
||||||
|
let(:process_set_stub) { [{ 'concurrency' => 400, 'queues' => %w(push default) }] }
|
||||||
|
|
||||||
|
before do
|
||||||
|
stub_const 'Scheduler::AccountsStatusesCleanupScheduler::MAX_BUDGET', 400
|
||||||
|
subject.perform
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not get stuck' do
|
||||||
|
expect(subject.compute_budget).to eq(400)
|
||||||
|
expect { subject.perform }.to_not change { Status.count }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Reference in New Issue