40 lines
1.3 KiB
Ruby
40 lines
1.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module BackgroundMigration
|
||
|
# This background migration creates all the records on the
|
||
|
# import state table for projects that are considered imports or forks
|
||
|
class PopulateImportState
|
||
|
def perform(start_id, end_id)
|
||
|
move_attributes_data_to_import_state(start_id, end_id)
|
||
|
rescue ActiveRecord::RecordNotUnique
|
||
|
retry
|
||
|
end
|
||
|
|
||
|
def move_attributes_data_to_import_state(start_id, end_id)
|
||
|
Rails.logger.info("#{self.class.name} - Moving import attributes data to project mirror data table: #{start_id} - #{end_id}")
|
||
|
|
||
|
ActiveRecord::Base.connection.execute <<~SQL
|
||
|
INSERT INTO project_mirror_data (project_id, status, jid, last_error)
|
||
|
SELECT id, import_status, import_jid, import_error
|
||
|
FROM projects
|
||
|
WHERE projects.import_status != 'none'
|
||
|
AND projects.id BETWEEN #{start_id} AND #{end_id}
|
||
|
AND NOT EXISTS (
|
||
|
SELECT id
|
||
|
FROM project_mirror_data
|
||
|
WHERE project_id = projects.id
|
||
|
)
|
||
|
SQL
|
||
|
|
||
|
ActiveRecord::Base.connection.execute <<~SQL
|
||
|
UPDATE projects
|
||
|
SET import_status = 'none'
|
||
|
WHERE import_status != 'none'
|
||
|
AND id BETWEEN #{start_id} AND #{end_id}
|
||
|
SQL
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|