diff options
author | Michael Kozono <mkozono@gmail.com> | 2018-09-25 10:12:51 -0700 |
---|---|---|
committer | Michael Kozono <mkozono@gmail.com> | 2018-09-27 18:22:37 -0700 |
commit | 3640292bf2ef822c8e2394fa2397b1b7d04e9891 (patch) | |
tree | e6083dca766e7acfb94b613329a43c98a8aa526b /lib/gitlab/repository_cache.rb | |
parent | d9c4ebc5a0b2e911f17865e482de1dfcc2189ac3 (diff) | |
download | gitlab-ce-3640292bf2ef822c8e2394fa2397b1b7d04e9891.tar.gz |
Cache `Repository#exists?` false in RequestStore
* Only truthy values are cached in Redis.
* All values are cached in RequestStore and in an instance variable.
Diffstat (limited to 'lib/gitlab/repository_cache.rb')
-rw-r--r-- | lib/gitlab/repository_cache.rb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/gitlab/repository_cache.rb b/lib/gitlab/repository_cache.rb index b1bf3ca4143..a03ce07b6a1 100644 --- a/lib/gitlab/repository_cache.rb +++ b/lib/gitlab/repository_cache.rb @@ -29,5 +29,21 @@ module Gitlab def read(key) backend.read(cache_key(key)) end + + def write(key, value) + backend.write(cache_key(key), value) + end + + def fetch_without_caching_false(key, &block) + value = read(key) + return value if value + + value = yield + + # Don't cache false values + write(key, value) if value + + value + end end end |