diff options
author | Stan Hu <stanhu@gmail.com> | 2019-06-10 17:36:19 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-06-10 17:36:19 +0000 |
commit | 9254b5d4c0cc41e552e896e16ef0bf62b5d9ae5b (patch) | |
tree | 904b17b33f86670a185ffd4785d36049bf897958 | |
parent | 65be6f1abf18c0ef5cc91d4af0b1212fa3b9fc52 (diff) | |
parent | 304b43a6227733d9326bca3a379c9588cbe93a8d (diff) | |
download | gitlab-ce-9254b5d4c0cc41e552e896e16ef0bf62b5d9ae5b.tar.gz |
Merge branch 'osw-fix-post-dep-migration-with-timeout' into 'master'
Avoid DB timeouts when scheduling migrations
Closes #63036
See merge request gitlab-org/gitlab-ce!29437
3 files changed, 15 insertions, 12 deletions
diff --git a/changelogs/unreleased/osw-fix-post-dep-migration-with-timeout.yml b/changelogs/unreleased/osw-fix-post-dep-migration-with-timeout.yml new file mode 100644 index 00000000000..6b37bb11ad5 --- /dev/null +++ b/changelogs/unreleased/osw-fix-post-dep-migration-with-timeout.yml @@ -0,0 +1,5 @@ +--- +title: Avoid DB timeouts when scheduling migrations +merge_request: 29437 +author: +type: fixed diff --git a/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb b/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb index 1b668d85bac..a3d2f497806 100644 --- a/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb +++ b/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb @@ -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 diff --git a/spec/migrations/enqueue_reset_merge_status_spec.rb b/spec/migrations/enqueue_reset_merge_status_spec.rb index 0d5e33bfd46..a6dd2e08079 100644 --- a/spec/migrations/enqueue_reset_merge_status_spec.rb +++ b/spec/migrations/enqueue_reset_merge_status_spec.rb @@ -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 |