summaryrefslogtreecommitdiff
path: root/app/models/namespace
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-02-24 15:15:02 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-02-24 15:15:02 +0000
commitc4b4a75c35cb2015c01ef0b60f8ad8baaaf889df (patch)
tree16eabfd63477e1904d7eb5d9f92f3e5a4e4d3e0f /app/models/namespace
parente40c68997d44209aed2baf3a8ec6be9ae99fb0b5 (diff)
downloadgitlab-ce-c4b4a75c35cb2015c01ef0b60f8ad8baaaf889df.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models/namespace')
-rw-r--r--app/models/namespace/traversal_hierarchy.rb22
1 files changed, 14 insertions, 8 deletions
diff --git a/app/models/namespace/traversal_hierarchy.rb b/app/models/namespace/traversal_hierarchy.rb
index 34086a8af5d..93193cc2022 100644
--- a/app/models/namespace/traversal_hierarchy.rb
+++ b/app/models/namespace/traversal_hierarchy.rb
@@ -31,15 +31,21 @@ class Namespace
# ActiveRecord. https://github.com/rails/rails/issues/13496
# Ideally it would be:
# `incorrect_traversal_ids.update_all('traversal_ids = cte.traversal_ids')`
- sql = """
- UPDATE namespaces
- SET traversal_ids = cte.traversal_ids
- FROM (#{recursive_traversal_ids}) as cte
- WHERE namespaces.id = cte.id
- AND namespaces.traversal_ids::bigint[] <> cte.traversal_ids
- """
+ sql = <<-SQL
+ UPDATE namespaces
+ SET traversal_ids = cte.traversal_ids
+ FROM (#{recursive_traversal_ids}) as cte
+ WHERE namespaces.id = cte.id
+ AND namespaces.traversal_ids::bigint[] <> cte.traversal_ids
+ SQL
+
Namespace.transaction do
- @root.lock!
+ if Feature.enabled?(:for_no_key_update_lock, default_enabled: :yaml)
+ @root.lock!("FOR NO KEY UPDATE")
+ else
+ @root.lock!
+ end
+
Namespace.connection.exec_query(sql)
end
rescue ActiveRecord::Deadlocked