Use Rails.cache instead of Redis directly

Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
Rémy Coutable 2017-07-06 17:11:20 +02:00
parent e5a7d1da8c
commit de9eca0af6
No known key found for this signature in database
GPG key ID: 46DF07E5CD9E96AB
2 changed files with 8 additions and 31 deletions

View file

@ -3,7 +3,7 @@ module Gitlab
ALLOWED_USER_IDS_KEY = 'performance_bar_allowed_user_ids'.freeze
# The time (in seconds) after which a set of allowed user IDs is expired
# automatically.
ALLOWED_USER_IDS_TIME_TO_LIVE = 10.minutes.to_i
ALLOWED_USER_IDS_TIME_TO_LIVE = 10.minutes
def self.enabled?(current_user = nil)
Feature.enabled?(:gitlab_performance_bar, current_user)
@ -20,28 +20,13 @@ module Gitlab
end
def self.allowed_user_ids
Gitlab::Redis.with do |redis|
if redis.exists(cache_key)
redis.smembers(cache_key).map(&:to_i)
Rails.cache.fetch(cache_key, expires_in: ALLOWED_USER_IDS_TIME_TO_LIVE) do
group = Group.find_by_full_path(allowed_group_name)
if group
GroupMembersFinder.new(group).execute.pluck(:user_id)
else
group = Group.find_by_full_path(allowed_group_name)
# Redis#sadd doesn't accept an empty array, but we still want to use
# Redis to let us know that no users are allowed, so we set the
# array to [-1] in this case.
user_ids =
if group
GroupMembersFinder.new(group).execute
.pluck(:user_id).presence || [-1]
else
[-1]
end
redis.multi do
redis.sadd(cache_key, user_ids)
redis.expire(cache_key, ALLOWED_USER_IDS_TIME_TO_LIVE)
end
user_ids
[]
end
end
end

View file

@ -31,19 +31,11 @@ describe Gitlab::PerformanceBar do
described_class.allowed_user?(user)
end
it 'caches the allowed user IDs in Redis', :redis do
it 'caches the allowed user IDs in cache', :caching do
expect do
expect(described_class.allowed_user?(user)).to be_truthy
end.not_to exceed_query_limit(0)
end
it 'caches the allowed user IDs for 10 minutes', :redis do
ttl_cached_user_ids = Gitlab::Redis.with do |redis|
redis.ttl(described_class.cache_key)
end
expect(ttl_cached_user_ids).to be <= 10.minutes
end
end
describe '.allowed_user?' do