Commit e893f560 authored by Douwe Maan's avatar Douwe Maan

Remove unnecessary double caching (in hash and request store)

parent 7388a911
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment