summaryrefslogtreecommitdiff
path: root/lib/gitlab/background_migration/populate_import_state.rb
blob: 695a2a713c55ed399e3b95ad8c43f9dd8f3fb4a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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