diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2016-07-25 13:16:19 +0000 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2016-07-25 13:16:19 +0000 |
commit | 8987257498c785e1ecf90c6cb85b9d1db06d9797 (patch) | |
tree | 7424e5dc919ef6766691194f33665bcd54f4d472 | |
parent | 540ed8135bd559fc7aaaefa7c14d6b883663973b (diff) | |
parent | 3618796e15d542293aaa721045ff943d360d963a (diff) | |
download | gitlab-ce-8987257498c785e1ecf90c6cb85b9d1db06d9797.tar.gz |
Merge branch 'use-project-id-in-repo-cache' into 'master'
Use project ID in repository cache to prevent stale data from persisting across projects
See merge request !5460
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | app/models/repository.rb | 2 | ||||
-rw-r--r-- | lib/repository_cache.rb | 7 | ||||
-rw-r--r-- | spec/lib/repository_cache_spec.rb | 13 |
4 files changed, 15 insertions, 10 deletions
diff --git a/CHANGELOG b/CHANGELOG index 0e887ce2119..2f9b6e0da24 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,9 @@ v 8.11.0 (unreleased) - Load project invited groups and members eagerly in ProjectTeam#fetch_members - Add GitLab Workhorse version to admin dashboard (Katarzyna Kobierska Ula Budziszewska) +v 8.10.2 (unreleased) + - Use project ID in repository cache to prevent stale data from persisting across projects + v 8.10.1 (unreleased) - Fix Error 500 when creating Wiki pages with hyphens or spaces - Ignore invalid trusted proxies in X-Forwarded-For header diff --git a/app/models/repository.rb b/app/models/repository.rb index 69d71b7f96f..e9d5f4c91f8 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -1033,7 +1033,7 @@ class Repository private def cache - @cache ||= RepositoryCache.new(path_with_namespace) + @cache ||= RepositoryCache.new(path_with_namespace, @project.id) end def head_exists? diff --git a/lib/repository_cache.rb b/lib/repository_cache.rb index 8ddc3511293..068a95790c0 100644 --- a/lib/repository_cache.rb +++ b/lib/repository_cache.rb @@ -1,14 +1,15 @@ # Interface to the Redis-backed cache store used by the Repository model class RepositoryCache - attr_reader :namespace, :backend + attr_reader :namespace, :backend, :project_id - def initialize(namespace, backend = Rails.cache) + def initialize(namespace, project_id, backend = Rails.cache) @namespace = namespace @backend = backend + @project_id = project_id end def cache_key(type) - "#{type}:#{namespace}" + "#{type}:#{namespace}:#{project_id}" end def expire(key) diff --git a/spec/lib/repository_cache_spec.rb b/spec/lib/repository_cache_spec.rb index 63b5292b098..f227926f39c 100644 --- a/spec/lib/repository_cache_spec.rb +++ b/spec/lib/repository_cache_spec.rb @@ -1,33 +1,34 @@ -require_relative '../../lib/repository_cache' +require 'spec_helper' describe RepositoryCache, lib: true do + let(:project) { create(:project) } let(:backend) { double('backend').as_null_object } - let(:cache) { RepositoryCache.new('example', backend) } + let(:cache) { RepositoryCache.new('example', project.id, backend) } describe '#cache_key' do it 'includes the namespace' do - expect(cache.cache_key(:foo)).to eq 'foo:example' + expect(cache.cache_key(:foo)).to eq "foo:example:#{project.id}" end end describe '#expire' do it 'expires the given key from the cache' do cache.expire(:foo) - expect(backend).to have_received(:delete).with('foo:example') + expect(backend).to have_received(:delete).with("foo:example:#{project.id}") end end describe '#fetch' do it 'fetches the given key from the cache' do cache.fetch(:bar) - expect(backend).to have_received(:fetch).with('bar:example') + expect(backend).to have_received(:fetch).with("bar:example:#{project.id}") end it 'accepts a block' do p = -> {} cache.fetch(:baz, &p) - expect(backend).to have_received(:fetch).with('baz:example', &p) + expect(backend).to have_received(:fetch).with("baz:example:#{project.id}", &p) end end end |