54 lines
1.6 KiB
Ruby
54 lines
1.6 KiB
Ruby
![]() |
# frozen_string_literal: true
|
||
|
|
||
|
class MigrateOpsFeatureFlagsScopesTargetUserIds < ActiveRecord::Migration[5.2]
|
||
|
include Gitlab::Database::MigrationHelpers
|
||
|
|
||
|
DOWNTIME = false
|
||
|
|
||
|
disable_ddl_transaction!
|
||
|
|
||
|
class OperationsFeatureFlagScope < ActiveRecord::Base
|
||
|
include EachBatch
|
||
|
self.table_name = 'operations_feature_flag_scopes'
|
||
|
self.inheritance_column = :_type_disabled
|
||
|
end
|
||
|
|
||
|
###
|
||
|
# 2019-11-26
|
||
|
#
|
||
|
# There are about 1000 rows in the operations_feature_flag_scopes table on gitlab.com.
|
||
|
# This migration will update about 30 of them.
|
||
|
# https://gitlab.com/gitlab-org/gitlab/merge_requests/20325#note_250742098
|
||
|
#
|
||
|
# This should take a few seconds to run.
|
||
|
# https://gitlab.com/gitlab-org/gitlab/merge_requests/20325#note_254871603
|
||
|
#
|
||
|
###
|
||
|
def up
|
||
|
OperationsFeatureFlagScope.where("strategies @> ?", [{ 'name': 'userWithId' }].to_json).each_batch do |scopes|
|
||
|
scopes.each do |scope|
|
||
|
if scope.active
|
||
|
default_strategy = scope.strategies.find { |s| s['name'] == 'default' }
|
||
|
|
||
|
if default_strategy.present?
|
||
|
scope.update({ strategies: [default_strategy] })
|
||
|
end
|
||
|
else
|
||
|
user_with_id_strategy = scope.strategies.find { |s| s['name'] == 'userWithId' }
|
||
|
|
||
|
scope.update({
|
||
|
active: true,
|
||
|
strategies: [user_with_id_strategy]
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
# This is not reversible.
|
||
|
# The old Target Users feature required the same list of user ids to be applied to each environment scope.
|
||
|
# Now we allow the list of user ids to differ for each scope.
|
||
|
end
|
||
|
end
|