summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2018-05-29 18:39:03 +0200
committerRémy Coutable <remy@rymai.me>2018-06-01 14:01:27 +0200
commit4eda09e3fbfe82fd1467e97cbc5bd085b91f257d (patch)
treedb0e8fbd141ff3252df450f60b9f1f5636c68489
parenta886532cc04bfa7ec6885ea883889f6d138961bd (diff)
downloadgitlab-ce-4eda09e3fbfe82fd1467e97cbc5bd085b91f257d.tar.gz
Use RequestStore in CacheableAttributes.cached for greater performance
Signed-off-by: Rémy Coutable <remy@rymai.me>
-rw-r--r--app/models/concerns/cacheable_attributes.rb6
-rw-r--r--spec/models/concerns/cacheable_attributes_spec.rb9
2 files changed, 14 insertions, 1 deletions
diff --git a/app/models/concerns/cacheable_attributes.rb b/app/models/concerns/cacheable_attributes.rb
index dd4fccc811d..d58d7165969 100644
--- a/app/models/concerns/cacheable_attributes.rb
+++ b/app/models/concerns/cacheable_attributes.rb
@@ -25,7 +25,11 @@ module CacheableAttributes
end
def cached
- retrieve_from_cache
+ if RequestStore.active?
+ RequestStore[:"#{name}_cached_attributes"] ||= retrieve_from_cache
+ else
+ retrieve_from_cache
+ end
end
def retrieve_from_cache
diff --git a/spec/models/concerns/cacheable_attributes_spec.rb b/spec/models/concerns/cacheable_attributes_spec.rb
index 77f46518d47..c6331c5ec15 100644
--- a/spec/models/concerns/cacheable_attributes_spec.rb
+++ b/spec/models/concerns/cacheable_attributes_spec.rb
@@ -177,6 +177,15 @@ describe CacheableAttributes do
end
end
end
+
+ it 'uses RequestStore in addition to Rails.cache', :request_store do
+ # Warm up the cache
+ create(:application_setting).cache!
+
+ expect(Rails.cache).to receive(:read).with(ApplicationSetting.cache_key).once.and_call_original
+
+ 2.times { ApplicationSetting.current }
+ end
end
describe '.cached', :use_clean_rails_memory_store_caching do