diff options
Diffstat (limited to 'lib/system_check/app')
-rw-r--r-- | lib/system_check/app/redis_version_check.rb | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/lib/system_check/app/redis_version_check.rb b/lib/system_check/app/redis_version_check.rb index da695cc9272..aca2972f287 100644 --- a/lib/system_check/app/redis_version_check.rb +++ b/lib/system_check/app/redis_version_check.rb @@ -1,24 +1,43 @@ # frozen_string_literal: true +require 'redis' + module SystemCheck module App class RedisVersionCheck < SystemCheck::BaseCheck - MIN_REDIS_VERSION = '2.8.0' - set_name "Redis version >= #{MIN_REDIS_VERSION}?" + MIN_REDIS_VERSION = '3.2.0' + RECOMMENDED_REDIS_VERSION = '4.0.0' + set_name "Redis version >= #{RECOMMENDED_REDIS_VERSION}?" + + @custom_error_message = '' def check? - redis_version = run_command(%w(redis-cli --version)) - redis_version = redis_version.try(:match, /redis-cli (\d+\.\d+\.\d+)/) + redis_version = Gitlab::Redis::Queues.with do |redis| + redis.info['redis_version'] + end + + status = true + + if !redis_version + @custom_error_message = "Could not retrieve the Redis version. Please check if your settings are correct" + status = false + elsif Gem::Version.new(redis_version) < Gem::Version.new(MIN_REDIS_VERSION) + @custom_error_message = "Your Redis version #{redis_version} is not supported anymore. Update your Redis server to a version >= #{RECOMMENDED_REDIS_VERSION}" + status = false + elsif Gem::Version.new(redis_version) < Gem::Version.new(RECOMMENDED_REDIS_VERSION) + @custom_error_message = "Support for your Redis version #{redis_version} has been deprecated and will be removed soon. Update your Redis server to a version >= #{RECOMMENDED_REDIS_VERSION}" + status = false + end - redis_version && (Gem::Version.new(redis_version[1]) > Gem::Version.new(MIN_REDIS_VERSION)) + status end def show_error try_fixing_it( - "Update your redis server to a version >= #{MIN_REDIS_VERSION}" + @custom_error_message ) for_more_information( - 'gitlab-public-wiki/wiki/Trouble-Shooting-Guide in section sidekiq' + 'doc/administration/high_availability/redis.md#provide-your-own-redis-instance-core-only' ) fix_and_rerun end |