diff options
author | Rémy Coutable <remy@rymai.me> | 2018-05-29 18:39:03 +0200 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2018-06-01 14:01:27 +0200 |
commit | 4eda09e3fbfe82fd1467e97cbc5bd085b91f257d (patch) | |
tree | db0e8fbd141ff3252df450f60b9f1f5636c68489 | |
parent | a886532cc04bfa7ec6885ea883889f6d138961bd (diff) | |
download | gitlab-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.rb | 6 | ||||
-rw-r--r-- | spec/models/concerns/cacheable_attributes_spec.rb | 9 |
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 |