Use Rails.cache instead of Redis directly
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
e5a7d1da8c
commit
de9eca0af6
2 changed files with 8 additions and 31 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue