Class: Gitlab::RepositoryCache::Preloader

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/repository_cache/preloader.rb

Instance Method Summary collapse

Constructor Details

#initialize(repositories) ⇒ Preloader

Returns a new instance of Preloader.



6
7
8
# File 'lib/gitlab/repository_cache/preloader.rb', line 6

def initialize(repositories)
  @repositories = repositories
end

Instance Method Details

#preload(methods) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/gitlab/repository_cache/preloader.rb', line 10

def preload(methods)
  return if @repositories.empty?

  cache_keys = []

  sources_by_cache_key = @repositories.each_with_object({}) do |repository, hash|
    methods.each do |method|
      cache_key = repository.cache.cache_key(method)

      hash[cache_key] = { repository: repository, method: method }
      cache_keys << cache_key
    end
  end

  Gitlab::Instrumentation::RedisClusterValidator.allow_cross_slot_commands do
    backend.read_multi(*cache_keys).each do |cache_key, value|
      source = sources_by_cache_key[cache_key]

      source[:repository].memoize_method_cache_value(source[:method], value)
    end
  end
end