Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.rb46
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