55 lines
1.1 KiB
Ruby
55 lines
1.1 KiB
Ruby
![]() |
# frozen_string_literal: true
|
||
|
|
||
|
class BackfillEnvironmentIdOnDeploymentMergeRequests < ActiveRecord::Migration[6.0]
|
||
|
include Gitlab::Database::MigrationHelpers
|
||
|
|
||
|
DOWNTIME = false
|
||
|
BATCH_SIZE = 400
|
||
|
DELAY = 1.minute
|
||
|
|
||
|
disable_ddl_transaction!
|
||
|
|
||
|
def up
|
||
|
max_mr_id = DeploymentMergeRequest
|
||
|
.select(:merge_request_id)
|
||
|
.distinct
|
||
|
.order(merge_request_id: :desc)
|
||
|
.limit(1)
|
||
|
.pluck(:merge_request_id)
|
||
|
.first || 0
|
||
|
|
||
|
last_mr_id = 0
|
||
|
step = 0
|
||
|
|
||
|
while last_mr_id < max_mr_id
|
||
|
stop =
|
||
|
DeploymentMergeRequest
|
||
|
.select(:merge_request_id)
|
||
|
.distinct
|
||
|
.where('merge_request_id > ?', last_mr_id)
|
||
|
.order(:merge_request_id)
|
||
|
.offset(BATCH_SIZE)
|
||
|
.limit(1)
|
||
|
.pluck(:merge_request_id)
|
||
|
.first
|
||
|
|
||
|
stop ||= max_mr_id
|
||
|
|
||
|
migrate_in(
|
||
|
step * DELAY,
|
||
|
'BackfillEnvironmentIdDeploymentMergeRequests',
|
||
|
[last_mr_id + 1, stop]
|
||
|
)
|
||
|
|
||
|
last_mr_id = stop
|
||
|
step += 1
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
# no-op
|
||
|
|
||
|
# this migration is designed to delete duplicated data
|
||
|
end
|
||
|
end
|