diff options
author | Nick Thomas <nick@gitlab.com> | 2019-07-08 17:11:59 +0100 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2019-08-16 15:41:29 +0100 |
commit | 0eff75fa2b6691b6fba31fcc2842f51debd249a9 (patch) | |
tree | 8c7885f136c617621948a5c24654f94dfb9c264f /app | |
parent | 648e5a942d4a8c66631354e05aa3f59206576dea (diff) | |
download | gitlab-ce-0eff75fa2b6691b6fba31fcc2842f51debd249a9.tar.gz |
Cache branch and tag names as Redis sets
This allows us to check inclusion for the *_exists? methods without
downloading the full list of branch names, which is over 100KiB in size
for gitlab-ce at the moment.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/repository.rb | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb index 9d45a12fa6e..561c6579086 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -239,13 +239,13 @@ class Repository def branch_exists?(branch_name) return false unless raw_repository - branch_names.include?(branch_name) + branch_names_include?(branch_name) end def tag_exists?(tag_name) return false unless raw_repository - tag_names.include?(tag_name) + tag_names_include?(tag_name) end def ref_exists?(ref) @@ -561,10 +561,10 @@ class Repository end delegate :branch_names, to: :raw_repository - cache_method :branch_names, fallback: [] + cache_method_as_redis_set :branch_names, fallback: [] delegate :tag_names, to: :raw_repository - cache_method :tag_names, fallback: [] + cache_method_as_redis_set :tag_names, fallback: [] delegate :branch_count, :tag_count, :has_visible_content?, to: :raw_repository cache_method :branch_count, fallback: 0 @@ -1126,6 +1126,10 @@ class Repository @cache ||= Gitlab::RepositoryCache.new(self) end + def redis_set_cache + @redis_set_cache ||= Gitlab::RepositorySetCache.new(self) + end + def request_store_cache @request_store_cache ||= Gitlab::RepositoryCache.new(self, backend: Gitlab::SafeRequestStore) end |