summaryrefslogtreecommitdiff
path: root/lib/gitlab/repository_cache.rb
diff options
context:
space:
mode:
authorMichael Kozono <mkozono@gmail.com>2018-09-25 10:12:51 -0700
committerMichael Kozono <mkozono@gmail.com>2018-09-27 18:22:37 -0700
commit3640292bf2ef822c8e2394fa2397b1b7d04e9891 (patch)
treee6083dca766e7acfb94b613329a43c98a8aa526b /lib/gitlab/repository_cache.rb
parentd9c4ebc5a0b2e911f17865e482de1dfcc2189ac3 (diff)
downloadgitlab-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.rb16
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