gitlab-org--gitlab-foss/lib/gitlab/repository_cache.rb
Gabriel Mazetto 19440e6722 Change project cache key to depend on ID instead of full path
Previously, project cache used as part of the namespace the `full_path`,
which included namespace and project slug.

That meant that anytime a project was renamed or transfered to a
different namespace, we would lose the existing cache. This is not
necessary, nor desired.

I've prefixed cache key with `project:` to make it easy to find in redis
if necessary as well as make it possible to purge all project related
cache.

I've also switched the cache key type to go after the initial namespace
and not before.
2018-11-16 16:22:53 +01:00

51 lines
1 KiB
Ruby

# frozen_string_literal: true
# Interface to the Redis-backed cache store
module Gitlab
class RepositoryCache
attr_reader :repository, :namespace, :backend
def initialize(repository, extra_namespace: nil, backend: Rails.cache)
@repository = repository
@namespace = "project:#{repository.project.id}"
@namespace = "#{@namespace}:#{extra_namespace}" if extra_namespace
@backend = backend
end
def cache_key(type)
"#{namespace}:#{type}"
end
def expire(key)
backend.delete(cache_key(key))
end
def fetch(key, &block)
backend.fetch(cache_key(key), &block)
end
def exist?(key)
backend.exist?(cache_key(key))
end
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