From e66535e8407ccb8dd229fefdce817902a364f58a Mon Sep 17 00:00:00 2001 From: Oswaldo Ferreira Date: Tue, 3 Jul 2018 17:05:19 -0300 Subject: Create a diff deletion worker scheduler to avoid long-running post-migration --- .../enqueue_delete_diff_files_workers_spec.rb | 40 ++++++++-------------- 1 file changed, 15 insertions(+), 25 deletions(-) (limited to 'spec/migrations') diff --git a/spec/migrations/enqueue_delete_diff_files_workers_spec.rb b/spec/migrations/enqueue_delete_diff_files_workers_spec.rb index 52d6e9b2c64..43dbd7e8f53 100644 --- a/spec/migrations/enqueue_delete_diff_files_workers_spec.rb +++ b/spec/migrations/enqueue_delete_diff_files_workers_spec.rb @@ -8,7 +8,7 @@ describe EnqueueDeleteDiffFilesWorkers, :migration, :sidekiq do let(:projects) { table(:projects) } before do - stub_const("#{described_class.name}::BATCH_SIZE", 7) + stub_const("#{described_class.name}::BATCH_SIZE", 4) namespaces.create!(id: 1, name: 'gitlab', path: 'gitlab') projects.create!(id: 1, namespace_id: 1, name: 'gitlab', path: 'gitlab') @@ -22,35 +22,25 @@ describe EnqueueDeleteDiffFilesWorkers, :migration, :sidekiq do merge_request_diffs.create!(id: 5, merge_request_id: 1, state: 'empty') merge_request_diffs.create!(id: 6, merge_request_id: 1, state: 'collected') merge_request_diffs.create!(id: 7, merge_request_id: 1, state: 'collected') - merge_request_diffs.create!(id: 8, merge_request_id: 1, state: 'collected') - merge_request_diffs.create!(id: 9, merge_request_id: 1, state: 'collected') - merge_request_diffs.create!(id: 10, merge_request_id: 1, state: 'collected') merge_requests.update(1, latest_merge_request_diff_id: 6) end - it 'correctly schedules diff file deletion workers' do + it 'correctly schedules diff file deletion workers schedulers' do Sidekiq::Testing.fake! do - Timecop.freeze do - migrate! - - # 1st batch schedule - [1, 3, 4, 6, 7].each do |id| - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(10.minutes, id) - end - [8, 9].each do |id| - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(11.minutes, id) - end - - # 2nd batch schedule - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(20.minutes, 10) - expect(BackgroundMigrationWorker.jobs.size).to eq(8) - end - end - end + # First scheduling batch + expect(BackgroundMigrationWorker).to receive(:perform_async) + .with(described_class::SCHEDULER, [[[1], [3], [4], [6]], 1]) + .and_call_original + + # Second scheduling batch + expect(BackgroundMigrationWorker).to receive(:perform_async) + .with(described_class::SCHEDULER, [[[7]], 2]) + .and_call_original - it 'migrates the data' do - expect { migrate! }.to change { merge_request_diffs.where(state: 'without_files').count } - .from(1).to(4) + migrate! + + expect(BackgroundMigrationWorker.jobs.size).to eq(2) + end end end -- cgit v1.2.1