diff options
Diffstat (limited to 'db/post_migrate/20220519045133_bulk_insert_cluster_enabled_grants.rb')
-rw-r--r-- | db/post_migrate/20220519045133_bulk_insert_cluster_enabled_grants.rb | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/db/post_migrate/20220519045133_bulk_insert_cluster_enabled_grants.rb b/db/post_migrate/20220519045133_bulk_insert_cluster_enabled_grants.rb new file mode 100644 index 00000000000..6c1d9058673 --- /dev/null +++ b/db/post_migrate/20220519045133_bulk_insert_cluster_enabled_grants.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +class BulkInsertClusterEnabledGrants < Gitlab::Database::Migration[2.0] + restrict_gitlab_migration gitlab_schema: :gitlab_main + + disable_ddl_transaction! + + def up + return unless Gitlab.dev_or_test_env? || Gitlab.com? + + define_batchable_model('cluster_groups').each_batch do |batch| + min, max = batch.pick('MIN(id), MAX(id)') + + bulk_insert = <<-SQL + INSERT INTO cluster_enabled_grants (namespace_id, created_at) + SELECT DISTINCT(traversal_ids[1]), NOW() + FROM cluster_groups + INNER JOIN namespaces ON cluster_groups.group_id = namespaces.id + WHERE cluster_groups.id BETWEEN #{min} AND #{max} + ON CONFLICT (namespace_id) DO NOTHING + SQL + + connection.execute(bulk_insert) + end + + define_batchable_model('cluster_projects').each_batch do |batch| + min, max = batch.pick('MIN(id), MAX(id)') + + bulk_insert = <<-SQL + INSERT INTO cluster_enabled_grants (namespace_id, created_at) + SELECT DISTINCT(traversal_ids[1]), NOW() + FROM cluster_projects + INNER JOIN projects ON cluster_projects.project_id = projects.id + INNER JOIN namespaces on projects.namespace_id = namespaces.id + WHERE cluster_projects.id BETWEEN #{min} AND #{max} + ON CONFLICT (namespace_id) DO NOTHING + SQL + + connection.execute(bulk_insert) + end + end + + def down + # no-op + end +end |