Avoid DB timeouts when scheduling migrations
This commit is contained in:
parent
65be6f1abf
commit
304b43a622
3 changed files with 15 additions and 12 deletions
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Avoid DB timeouts when scheduling migrations
|
||||
merge_request: 29437
|
||||
author:
|
||||
type: fixed
|
|
@ -16,15 +16,10 @@ class EnqueueResetMergeStatus < ActiveRecord::Migration[5.1]
|
|||
def up
|
||||
say 'Scheduling `ResetMergeStatus` jobs'
|
||||
|
||||
# We currently have around 135_000 opened, mergeable MRs in GitLab.com. This iteration
|
||||
# will schedule around 13 batches of 10_000 MRs, which should take around 1 hour to
|
||||
# complete.
|
||||
relation = MergeRequest.where(state: 'opened', merge_status: 'can_be_merged')
|
||||
|
||||
relation.each_batch(of: BATCH_SIZE) do |batch, index|
|
||||
range = batch.pluck('MIN(id)', 'MAX(id)').first
|
||||
|
||||
BackgroundMigrationWorker.perform_in(index * DELAY_INTERVAL, MIGRATION, range)
|
||||
end
|
||||
# We currently have more than ~5_000_000 merge request records on GitLab.com.
|
||||
# This means it'll schedule ~500 jobs (10k MRs each) with a 5 minutes gap,
|
||||
# so this should take ~41 hours for all background migrations to complete.
|
||||
# ((5_000_000 / 10_000) * 5) / 60 => 41.6666..
|
||||
queue_background_migration_jobs_by_range_at_intervals(MergeRequest, MIGRATION, DELAY_INTERVAL, batch_size: BATCH_SIZE)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,9 +40,12 @@ describe EnqueueResetMergeStatus, :migration, :sidekiq do
|
|||
.to be_scheduled_delayed_migration(5.minutes, 1, 2)
|
||||
|
||||
expect(described_class::MIGRATION)
|
||||
.to be_scheduled_delayed_migration(10.minutes, 3, 3)
|
||||
.to be_scheduled_delayed_migration(10.minutes, 3, 4)
|
||||
|
||||
expect(BackgroundMigrationWorker.jobs.size).to eq(2)
|
||||
expect(described_class::MIGRATION)
|
||||
.to be_scheduled_delayed_migration(15.minutes, 5, 5)
|
||||
|
||||
expect(BackgroundMigrationWorker.jobs.size).to eq(3)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue