Remove unnecessary double caching (in hash and request store)
This commit is contained in:
parent
7388a911aa
commit
e893f560e0
|
@ -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?
|
||||
|
||||
|
|
|
@ -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') }
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue