diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-24 15:15:02 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-24 15:15:02 +0000 |
commit | c4b4a75c35cb2015c01ef0b60f8ad8baaaf889df (patch) | |
tree | 16eabfd63477e1904d7eb5d9f92f3e5a4e4d3e0f /app/models/namespace | |
parent | e40c68997d44209aed2baf3a8ec6be9ae99fb0b5 (diff) | |
download | gitlab-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.rb | 22 |
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 |