summaryrefslogtreecommitdiff
path: root/db/post_migrate/20181121111200_schedule_runners_token_encryption.rb
blob: 753e052f7a7d2f825d592dea12da3678f8346fac (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
# frozen_string_literal: true

class ScheduleRunnersTokenEncryption < ActiveRecord::Migration
  include Gitlab::Database::MigrationHelpers

  DOWNTIME = false
  BATCH_SIZE = 10000
  RANGE_SIZE = 2000
  MIGRATION = 'EncryptRunnersTokens'

  MODELS = [
    ::Gitlab::BackgroundMigration::Models::EncryptColumns::Settings,
    ::Gitlab::BackgroundMigration::Models::EncryptColumns::Namespace,
    ::Gitlab::BackgroundMigration::Models::EncryptColumns::Project,
    ::Gitlab::BackgroundMigration::Models::EncryptColumns::Runner
  ].freeze

  disable_ddl_transaction!

  def up
    MODELS.each do |model|
      model.each_batch(of: BATCH_SIZE) do |relation, index|
        delay = index * 4.minutes

        relation.each_batch(of: RANGE_SIZE) do |relation|
          range = relation.pluck('MIN(id)', 'MAX(id)').first
          args = [model.name.demodulize.downcase, *range]

          BackgroundMigrationWorker.perform_in(delay, MIGRATION, args)
        end
      end
    end
  end

  def down
    # no-op
  end
end