40 lines
1.2 KiB
Ruby
40 lines
1.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class ScheduleBackfillPushRulesIdInProjects < ActiveRecord::Migration[6.0]
|
||
|
include Gitlab::Database::MigrationHelpers
|
||
|
|
||
|
disable_ddl_transaction!
|
||
|
|
||
|
MIGRATION = 'BackfillPushRulesIdInProjects'.freeze
|
||
|
BATCH_SIZE = 1_000
|
||
|
|
||
|
class PushRules < ActiveRecord::Base
|
||
|
include EachBatch
|
||
|
|
||
|
self.table_name = 'push_rules'
|
||
|
end
|
||
|
|
||
|
def up
|
||
|
# Update one record that is connected to the instance
|
||
|
value_to_be_updated_to = ScheduleBackfillPushRulesIdInProjects::PushRules.find_by(is_sample: true)&.id
|
||
|
|
||
|
if value_to_be_updated_to
|
||
|
execute "UPDATE application_settings SET push_rule_id = #{value_to_be_updated_to}
|
||
|
WHERE id IN (SELECT MAX(id) FROM application_settings);"
|
||
|
end
|
||
|
|
||
|
ApplicationSetting.expire
|
||
|
|
||
|
queue_background_migration_jobs_by_range_at_intervals(ScheduleBackfillPushRulesIdInProjects::PushRules,
|
||
|
MIGRATION,
|
||
|
5.minutes,
|
||
|
batch_size: BATCH_SIZE)
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
execute "UPDATE application_settings SET push_rule_id = NULL"
|
||
|
|
||
|
ApplicationSetting.expire
|
||
|
end
|
||
|
end
|