summaryrefslogtreecommitdiff
path: root/lib/gitlab/redis
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-16 18:25:58 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-16 18:25:58 +0000
commita5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch)
treefb69158581673816a8cd895f9d352dcb3c678b1e /lib/gitlab/redis
parentd16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff)
downloadgitlab-ce-a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4.tar.gz
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.rb30
-rw-r--r--lib/gitlab/redis/queues.rb30
-rw-r--r--lib/gitlab/redis/shared_state.rb30
-rw-r--r--lib/gitlab/redis/trace_chunks.rb12
-rw-r--r--lib/gitlab/redis/wrapper.rb56
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