diff options
author | Stan Hu <stanhu@gmail.com> | 2018-06-19 02:38:34 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-06-19 02:42:20 +0300 |
commit | 4f9068dfc06269ca7e2247fb0be2796452546de1 (patch) | |
tree | b8a4f61fb70187d1085d7ad0dacf08babf5c3b86 /app/models/project.rb | |
parent | 02c007bda52ac4cbcc8df98e2faf9273745bf951 (diff) |
Eliminate N+1 queries in LFS file locks checks during a push
This significantly improves performance when a user pushes many references.
project.path_locks.any? doesn't cache the output and runs `SELECT 1 AS one
FROM "path_locks" WHERE project_id = N` each time. When there are thousands
of refs being pushed, this can time out the unicorn worker.
CE port for https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/6159.
Diffstat (limited to 'app/models/project.rb')
-rw-r--r-- | app/models/project.rb | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index e5fa1c4db7b..0d777515536 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -25,6 +25,7 @@ class Project < ActiveRecord::Base include FastDestroyAll::Helpers include WithUploads include BatchDestroyDependentAssociations + extend Gitlab::Cache::RequestCache extend Gitlab::ConfigHelper @@ -2013,6 +2014,11 @@ class Project < ActiveRecord::Base @gitlab_deploy_token ||= deploy_tokens.gitlab_deploy_token end + def any_lfs_file_locks? + lfs_file_locks.any? + end + request_cache(:any_lfs_file_locks?) { self.id } + private def storage |