diff options
-rw-r--r-- | app/models/project.rb | 16 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 7 | ||||
-rw-r--r-- | spec/serializers/pipeline_serializer_spec.rb | 2 |
3 files changed, 4 insertions, 21 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index 162222f2131..a1a8ae7fc54 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -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? diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index f195f7ce48e..fa0f3620806 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -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') } diff --git a/spec/serializers/pipeline_serializer_spec.rb b/spec/serializers/pipeline_serializer_spec.rb index cf57776346a..79aa32b29bb 100644 --- a/spec/serializers/pipeline_serializer_spec.rb +++ b/spec/serializers/pipeline_serializer_spec.rb @@ -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 |