~cytrogen/masto-fe

c3c7d5907211c57cabe4256ba947c2712677eab3 — Claire 2 years ago f95125b
Fix infinite loop in AccountsStatusesCleanupScheduler (#24840)

M app/workers/scheduler/accounts_statuses_cleanup_scheduler.rb => app/workers/scheduler/accounts_statuses_cleanup_scheduler.rb +1 -0
@@ 79,6 79,7 @@ class Scheduler::AccountsStatusesCleanupScheduler
      # and start back after the last processed account otherwise
      break if budget.zero? || (num_processed_accounts.zero? && !full_iteration)

      full_iteration  = false unless first_iteration
      first_iteration = false
    end
  end

M spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb => spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb +14 -0
@@ 143,6 143,20 @@ describe Scheduler::AccountsStatusesCleanupScheduler do
          expect { subject.perform }.to change { Status.count }.by(-30)
        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