Преглед изворни кода

Fix infinite loop in AccountsStatusesCleanupScheduler (#24840)

Claire пре 1 година
родитељ
комит
7bd34f8b23

+ 1 - 0
app/workers/scheduler/accounts_statuses_cleanup_scheduler.rb

@@ -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

+ 14 - 0
spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb

@@ -141,6 +141,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