55 lines
1.5 KiB
Ruby
55 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ScheduleFixMergeRequestDiffCommitUsersMigration < Gitlab::Database::Migration[1.0]
|
|
disable_ddl_transaction!
|
|
|
|
MIGRATION_CLASS = 'FixMergeRequestDiffCommitUsers'
|
|
|
|
class Project < ApplicationRecord
|
|
include EachBatch
|
|
|
|
self.table_name = 'projects'
|
|
end
|
|
|
|
def up
|
|
# This is the day on which we merged
|
|
# https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63669. Since the
|
|
# deploy of this MR we may have imported projects using the old format, but
|
|
# after their merge_request_diff_id range had been migrated by Sidekiq. As a
|
|
# result, there may be rows without a committer_id or commit_author_id
|
|
# field.
|
|
date = '2021-07-07 00:00:00'
|
|
|
|
transaction do
|
|
Project.each_batch(of: 10_000) do |batch|
|
|
time = Time.now.utc
|
|
rows = batch
|
|
.where('created_at >= ?', date)
|
|
.where(import_type: 'gitlab_project')
|
|
.pluck(:id)
|
|
.map do |id|
|
|
Gitlab::Database::BackgroundMigrationJob.new(
|
|
class_name: MIGRATION_CLASS,
|
|
arguments: [id],
|
|
created_at: time,
|
|
updated_at: time
|
|
)
|
|
end
|
|
|
|
Gitlab::Database::BackgroundMigrationJob
|
|
.bulk_insert!(rows, validate: false)
|
|
end
|
|
end
|
|
|
|
job = Gitlab::Database::BackgroundMigrationJob
|
|
.for_migration_class(MIGRATION_CLASS)
|
|
.pending
|
|
.first
|
|
|
|
migrate_in(2.minutes, MIGRATION_CLASS, job.arguments) if job
|
|
end
|
|
|
|
def down
|
|
# no-op
|
|
end
|
|
end
|