Eliminate N+1 queries in path lock 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.
Closes #6465 (closed)
CE backport: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19978
Note that there is still one more N+1 query: https://gitlab.com/gitlab-org/gitlab-ce/issues/48092
Edited by Stan Hu