diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
commit | a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch) | |
tree | fb69158581673816a8cd895f9d352dcb3c678b1e /lib/gitlab/redis | |
parent | d16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff) |
Add latest changes from gitlab-org/gitlab@14-0-stable-eev14.0.0-rc42
Diffstat (limited to 'lib/gitlab/redis')
-rw-r--r-- | lib/gitlab/redis/cache.rb | 30 | ||||
-rw-r--r-- | lib/gitlab/redis/queues.rb | 30 | ||||
-rw-r--r-- | lib/gitlab/redis/shared_state.rb | 30 | ||||
-rw-r--r-- | lib/gitlab/redis/trace_chunks.rb | 12 | ||||
-rw-r--r-- | lib/gitlab/redis/wrapper.rb | 56 |
5 files changed, 64 insertions, 94 deletions
diff --git a/lib/gitlab/redis/cache.rb b/lib/gitlab/redis/cache.rb index a634f12345a..98b66080b42 100644 --- a/lib/gitlab/redis/cache.rb +++ b/lib/gitlab/redis/cache.rb @@ -1,36 +1,16 @@ # frozen_string_literal: true -# please require all dependencies below: -require_relative 'wrapper' unless defined?(::Rails) && ::Rails.root.present? - module Gitlab module Redis class Cache < ::Gitlab::Redis::Wrapper CACHE_NAMESPACE = 'cache:gitlab' - DEFAULT_REDIS_CACHE_URL = 'redis://localhost:6380' - REDIS_CACHE_CONFIG_ENV_VAR_NAME = 'GITLAB_REDIS_CACHE_CONFIG_FILE' - - class << self - def default_url - DEFAULT_REDIS_CACHE_URL - end - - def config_file_name - # if ENV set for this class, use it even if it points to a file does not exist - file_name = ENV[REDIS_CACHE_CONFIG_ENV_VAR_NAME] - return file_name unless file_name.nil? - - # otherwise, if config files exists for this class, use it - file_name = config_file_path('redis.cache.yml') - return file_name if File.file?(file_name) - # this will force use of DEFAULT_REDIS_QUEUES_URL when config file is absent - super - end + private - def instrumentation_class - ::Gitlab::Instrumentation::Redis::Cache - end + def raw_config_hash + config = super + config[:url] = 'redis://localhost:6380' if config[:url].blank? + config end end end diff --git a/lib/gitlab/redis/queues.rb b/lib/gitlab/redis/queues.rb index 42d5167beb3..9e291a73bb6 100644 --- a/lib/gitlab/redis/queues.rb +++ b/lib/gitlab/redis/queues.rb @@ -1,37 +1,21 @@ # frozen_string_literal: true -# please require all dependencies below: +# We need this require for MailRoom require_relative 'wrapper' unless defined?(::Gitlab::Redis::Wrapper) +require 'active_support/core_ext/object/blank' module Gitlab module Redis class Queues < ::Gitlab::Redis::Wrapper SIDEKIQ_NAMESPACE = 'resque:gitlab' MAILROOM_NAMESPACE = 'mail_room:gitlab' - DEFAULT_REDIS_QUEUES_URL = 'redis://localhost:6381' - REDIS_QUEUES_CONFIG_ENV_VAR_NAME = 'GITLAB_REDIS_QUEUES_CONFIG_FILE' - class << self - def default_url - DEFAULT_REDIS_QUEUES_URL - end + private - def config_file_name - # if ENV set for this class, use it even if it points to a file does not exist - file_name = ENV[REDIS_QUEUES_CONFIG_ENV_VAR_NAME] - return file_name if file_name - - # otherwise, if config files exists for this class, use it - file_name = config_file_path('redis.queues.yml') - return file_name if File.file?(file_name) - - # this will force use of DEFAULT_REDIS_QUEUES_URL when config file is absent - super - end - - def instrumentation_class - ::Gitlab::Instrumentation::Redis::Queues - end + def raw_config_hash + config = super + config[:url] = 'redis://localhost:6381' if config[:url].blank? + config end end end diff --git a/lib/gitlab/redis/shared_state.rb b/lib/gitlab/redis/shared_state.rb index 2848c9f0b59..d62516bd287 100644 --- a/lib/gitlab/redis/shared_state.rb +++ b/lib/gitlab/redis/shared_state.rb @@ -1,8 +1,5 @@ # frozen_string_literal: true -# please require all dependencies below: -require_relative 'wrapper' unless defined?(::Gitlab::Redis::Wrapper) - module Gitlab module Redis class SharedState < ::Gitlab::Redis::Wrapper @@ -10,30 +7,13 @@ module Gitlab USER_SESSIONS_NAMESPACE = 'session:user:gitlab' USER_SESSIONS_LOOKUP_NAMESPACE = 'session:lookup:user:gitlab' IP_SESSIONS_LOOKUP_NAMESPACE = 'session:lookup:ip:gitlab2' - DEFAULT_REDIS_SHARED_STATE_URL = 'redis://localhost:6382' - REDIS_SHARED_STATE_CONFIG_ENV_VAR_NAME = 'GITLAB_REDIS_SHARED_STATE_CONFIG_FILE' - - class << self - def default_url - DEFAULT_REDIS_SHARED_STATE_URL - end - - def config_file_name - # if ENV set for this class, use it even if it points to a file does not exist - file_name = ENV[REDIS_SHARED_STATE_CONFIG_ENV_VAR_NAME] - return file_name if file_name - - # otherwise, if config files exists for this class, use it - file_name = config_file_path('redis.shared_state.yml') - return file_name if File.file?(file_name) - # this will force use of DEFAULT_REDIS_SHARED_STATE_URL when config file is absent - super - end + private - def instrumentation_class - ::Gitlab::Instrumentation::Redis::SharedState - end + def raw_config_hash + config = super + config[:url] = 'redis://localhost:6382' if config[:url].blank? + config end end end diff --git a/lib/gitlab/redis/trace_chunks.rb b/lib/gitlab/redis/trace_chunks.rb new file mode 100644 index 00000000000..a2e77cb5df5 --- /dev/null +++ b/lib/gitlab/redis/trace_chunks.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Gitlab + module Redis + class TraceChunks < ::Gitlab::Redis::Wrapper + # The data we store on TraceChunks used to be stored on SharedState. + def self.config_fallback + SharedState + end + end + end +end diff --git a/lib/gitlab/redis/wrapper.rb b/lib/gitlab/redis/wrapper.rb index 94ab67ef08a..bbcc2732e89 100644 --- a/lib/gitlab/redis/wrapper.rb +++ b/lib/gitlab/redis/wrapper.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true # This file should only be used by sub-classes, not directly by any clients of the sub-classes -# please require all dependencies below: + +# Explicitly load parts of ActiveSupport because MailRoom does not load +# Rails. require 'active_support/core_ext/hash/keys' require 'active_support/core_ext/module/delegation' +require 'active_support/core_ext/string/inflections' module Gitlab module Redis class Wrapper - DEFAULT_REDIS_URL = 'redis://localhost:6379' - REDIS_CONFIG_ENV_VAR_NAME = 'GITLAB_REDIS_CONFIG_FILE' - class << self delegate :params, :url, to: :new @@ -51,33 +51,47 @@ module Gitlab end end - def default_url - DEFAULT_REDIS_URL + def config_file_path(filename) + path = File.join(rails_root, 'config', filename) + return path if File.file?(path) end - # Return the absolute path to a Rails configuration file - # - # We use this instead of `Rails.root` because for certain tasks - # utilizing these classes, `Rails` might not be available. - def config_file_path(filename) - File.expand_path("../../../config/#{filename}", __dir__) + # We need this local implementation of Rails.root because MailRoom + # doesn't load Rails. + def rails_root + File.expand_path('../../..', __dir__) end def config_file_name - # if ENV set for wrapper class, use it even if it points to a file does not exist - file_name = ENV[REDIS_CONFIG_ENV_VAR_NAME] - return file_name unless file_name.nil? + [ + # Instance specific config sources: + ENV["GITLAB_REDIS_#{store_name.underscore.upcase}_CONFIG_FILE"], + config_file_path("redis.#{store_name.underscore}.yml"), + + # The current Redis instance may have been split off from another one + # (e.g. TraceChunks was split off from SharedState). There are + # installations out there where the lowest priority config source + # (resque.yml) contains bogus values. In those cases, config_file_name + # should resolve to the instance we originated from (the + # "config_fallback") rather than resque.yml. + config_fallback&.config_file_name, + + # Global config sources: + ENV['GITLAB_REDIS_CONFIG_FILE'], + config_file_path('resque.yml') + ].compact.first + end - # otherwise, if config files exists for wrapper class, use it - file_name = config_file_path('resque.yml') - return file_name if File.file?(file_name) + def store_name + name.demodulize + end - # nil will force use of DEFAULT_REDIS_URL when config file is absent + def config_fallback nil end def instrumentation_class - raise NotImplementedError + "::Gitlab::Instrumentation::Redis::#{store_name}".constantize end end @@ -135,7 +149,7 @@ module Gitlab if config_data config_data.is_a?(String) ? { url: config_data } : config_data.deep_symbolize_keys else - { url: self.class.default_url } + { url: '' } end end |