60 lines
1.4 KiB
Ruby
60 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class SliceMergeRequestDiffCommitMigrations < ActiveRecord::Migration[6.1]
|
|
include Gitlab::Database::MigrationHelpers
|
|
|
|
disable_ddl_transaction!
|
|
|
|
BATCH_SIZE = 5_000
|
|
MIGRATION_CLASS = 'MigrateMergeRequestDiffCommitUsers'
|
|
STEAL_MIGRATION_CLASS = 'StealMigrateMergeRequestDiffCommitUsers'
|
|
|
|
def up
|
|
old_jobs = Gitlab::Database::BackgroundMigrationJob
|
|
.for_migration_class(MIGRATION_CLASS)
|
|
.pending
|
|
.to_a
|
|
|
|
return if old_jobs.empty?
|
|
|
|
transaction do
|
|
# This ensures we stop processing the old ranges, as the background
|
|
# migrations skip already processed jobs.
|
|
Gitlab::Database::BackgroundMigrationJob
|
|
.for_migration_class(MIGRATION_CLASS)
|
|
.pending
|
|
.update_all(status: :succeeded)
|
|
|
|
rows = []
|
|
|
|
old_jobs.each do |job|
|
|
min, max = job.arguments
|
|
|
|
while min < max
|
|
rows << {
|
|
class_name: MIGRATION_CLASS,
|
|
arguments: [min, min + BATCH_SIZE],
|
|
created_at: Time.now.utc,
|
|
updated_at: Time.now.utc
|
|
}
|
|
|
|
min += BATCH_SIZE
|
|
end
|
|
end
|
|
|
|
Gitlab::Database::BackgroundMigrationJob.insert_all!(rows)
|
|
end
|
|
|
|
job = Gitlab::Database::BackgroundMigrationJob
|
|
.for_migration_class(MIGRATION_CLASS)
|
|
.pending
|
|
.first
|
|
|
|
migrate_in(1.hour, STEAL_MIGRATION_CLASS, job.arguments)
|
|
end
|
|
|
|
def down
|
|
# no-op
|
|
end
|
|
end
|