summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2018-12-28 12:19:55 +0100
committerDouwe Maan <douwe@selenight.nl>2019-01-02 15:31:35 +0100
commite893f560e01c0039a4fc4c6c93be8e82b5888b3b (patch)
tree03d8014fb8b3ad9906ccd90b25507bca629e7e58
parent7388a911aa61ad3a9fb061517e22e74427155b5e (diff)
downloadgitlab-ce-dm-git-access-any-ce.tar.gz
Remove unnecessary double caching (in hash and request store)dm-git-access-any-ce
-rw-r--r--app/models/project.rb16
-rw-r--r--spec/models/project_spec.rb7
-rw-r--r--spec/serializers/pipeline_serializer_spec.rb2
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