Commit de9eca0a authored by Rémy Coutable's avatar Rémy Coutable

Use Rails.cache instead of Redis directly

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent e5a7d1da
...@@ -3,7 +3,7 @@ module Gitlab ...@@ -3,7 +3,7 @@ module Gitlab
ALLOWED_USER_IDS_KEY = 'performance_bar_allowed_user_ids'.freeze ALLOWED_USER_IDS_KEY = 'performance_bar_allowed_user_ids'.freeze
# The time (in seconds) after which a set of allowed user IDs is expired # The time (in seconds) after which a set of allowed user IDs is expired
# automatically. # 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) def self.enabled?(current_user = nil)
Feature.enabled?(:gitlab_performance_bar, current_user) Feature.enabled?(:gitlab_performance_bar, current_user)
...@@ -20,28 +20,13 @@ module Gitlab ...@@ -20,28 +20,13 @@ module Gitlab
end end
def self.allowed_user_ids def self.allowed_user_ids
Gitlab::Redis.with do |redis| Rails.cache.fetch(cache_key, expires_in: ALLOWED_USER_IDS_TIME_TO_LIVE) do
if redis.exists(cache_key) group = Group.find_by_full_path(allowed_group_name)
redis.smembers(cache_key).map(&:to_i)
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 if group
GroupMembersFinder.new(group).execute.pluck(:user_id)
else
[]
end end
end end
end end
......
...@@ -31,19 +31,11 @@ describe Gitlab::PerformanceBar do ...@@ -31,19 +31,11 @@ describe Gitlab::PerformanceBar do
described_class.allowed_user?(user) described_class.allowed_user?(user)
end end
it 'caches the allowed user IDs in Redis', :redis do it 'caches the allowed user IDs in cache', :caching do
expect do expect do
expect(described_class.allowed_user?(user)).to be_truthy expect(described_class.allowed_user?(user)).to be_truthy
end.not_to exceed_query_limit(0) end.not_to exceed_query_limit(0)
end 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 end
describe '.allowed_user?' do describe '.allowed_user?' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment