diff options
Diffstat (limited to 'lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users.rb')
-rw-r--r-- | lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users.rb b/lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users.rb new file mode 100644 index 00000000000..43a7032e682 --- /dev/null +++ b/lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Gitlab + module BackgroundMigration + # A background migration that finished any pending + # MigrateMergeRequestDiffCommitUsers jobs, and schedules new jobs itself. + # + # This migration exists so we can bypass rescheduling issues (e.g. jobs + # getting dropped after too many retries) that may occur when + # MigrateMergeRequestDiffCommitUsers jobs take longer than expected. + class StealMigrateMergeRequestDiffCommitUsers + def perform(start_id, stop_id) + MigrateMergeRequestDiffCommitUsers.new.perform(start_id, stop_id) + schedule_next_job + end + + def schedule_next_job + next_job = Database::BackgroundMigrationJob + .for_migration_class('MigrateMergeRequestDiffCommitUsers') + .pending + .first + + return unless next_job + + BackgroundMigrationWorker.perform_in( + 5.minutes, + 'StealMigrateMergeRequestDiffCommitUsers', + next_job.arguments + ) + end + end + end +end |