Remove unnecessary double caching (in hash and request store)

This commit is contained in:
Douwe Maan 2018-12-28 12:19:55 +01:00
parent 7388a911aa
commit e893f560e0
No known key found for this signature in database
GPG Key ID: 5976703F65143D36
3 changed files with 4 additions and 21 deletions

View File

@ -1932,23 +1932,11 @@ class Project < ActiveRecord::Base
end
def any_branch_allows_collaboration?(user)
return false unless user
fetch_branch_allows_collaboration(user)
end
def branch_allows_collaboration?(user, branch_name)
return false unless user
cache_key = "user:#{user.id}:#{branch_name}:branch_allows_push"
memoized_results = strong_memoize(:branch_allows_collaboration) do
Hash.new do |result, cache_key|
result[cache_key] = fetch_branch_allows_collaboration(user, branch_name)
end
end
memoized_results[cache_key]
fetch_branch_allows_collaboration(user, branch_name)
end
def licensed_features
@ -2153,6 +2141,8 @@ class Project < ActiveRecord::Base
end
def fetch_branch_allows_collaboration(user, branch_name = nil)
return false unless user
Gitlab::SafeRequestStore.fetch("project-#{id}:branch-#{branch_name}:user-#{user.id}:branch_allows_collaboration") do
next false if empty_repo?

View File

@ -3932,13 +3932,6 @@ describe Project do
.to be_falsy
end
it 'caches the result' do
control = ActiveRecord::QueryRecorder.new { project.branch_allows_collaboration?(user, 'awesome-feature-1') }
expect { 3.times { project.branch_allows_collaboration?(user, 'awesome-feature-1') } }
.not_to exceed_query_limit(control)
end
context 'when the requeststore is active', :request_store do
it 'only queries per project across instances' do
control = ActiveRecord::QueryRecorder.new { project.branch_allows_collaboration?(user, 'awesome-feature-1') }

View File

@ -144,7 +144,7 @@ describe PipelineSerializer do
# pipeline. With the same ref this check is cached but if refs are
# different then there is an extra query per ref
# https://gitlab.com/gitlab-org/gitlab-ce/issues/46368
expect(recorded.count).to be_within(2).of(34)
expect(recorded.count).to be_within(2).of(38)
expect(recorded.cached_count).to eq(0)
end
end