diff options
author | Jacob Vosmaer <jacob@gitlab.com> | 2016-09-30 12:27:43 +0200 |
---|---|---|
committer | Jacob Vosmaer <jacob@gitlab.com> | 2016-09-30 12:27:43 +0200 |
commit | 52ee85e7bf35d372285d70cc93016854774839b1 (patch) | |
tree | b18aa064138d2762834c267f20dd4d295660983f /lib | |
parent | 7d48778c4f35e61fd3e6e9bfbb476c27f9fb4602 (diff) | |
download | gitlab-ce-52ee85e7bf35d372285d70cc93016854774839b1.tar.gz |
Initialize Redis pool in single-threaded context
This side-steps the need for mutexes and whatnot.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/redis.rb | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/lib/gitlab/redis.rb b/lib/gitlab/redis.rb index 69c4ef721d5..3faab937726 100644 --- a/lib/gitlab/redis.rb +++ b/lib/gitlab/redis.rb @@ -11,13 +11,6 @@ module Gitlab DEFAULT_REDIS_URL = 'redis://localhost:6379' CONFIG_FILE = File.expand_path('../../config/resque.yml', __dir__) - # To be thread-safe we must be careful when writing the class instance - # variables @_raw_config and @pool. Because @pool depends on @_raw_config we need two - # mutexes to prevent deadlock. - RAW_CONFIG_MUTEX = Mutex.new - POOL_MUTEX = Mutex.new - private_constant :RAW_CONFIG_MUTEX, :POOL_MUTEX - class << self # Do NOT cache in an instance variable. Result may be mutated by caller. def params @@ -31,24 +24,19 @@ module Gitlab end def with - if @pool.nil? - POOL_MUTEX.synchronize do - @pool = ConnectionPool.new { ::Redis.new(params) } - end - end + @pool ||= ConnectionPool.new { ::Redis.new(params) } @pool.with { |redis| yield redis } end def _raw_config return @_raw_config if defined?(@_raw_config) - RAW_CONFIG_MUTEX.synchronize do - begin - @_raw_config = File.read(CONFIG_FILE).freeze - rescue Errno::ENOENT - @_raw_config = false - end + begin + @_raw_config = File.read(CONFIG_FILE).freeze + rescue Errno::ENOENT + @_raw_config = false end + @_raw_config end end |