File: redis_version_check.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (46 lines) | stat: -rw-r--r-- 1,518 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# frozen_string_literal: true

require 'redis'

module SystemCheck
  module App
    class RedisVersionCheck < SystemCheck::BaseCheck
      MIN_REDIS_VERSION = '6.0.0'
      RECOMMENDED_REDIS_VERSION = "6.2.14"
      set_name "Redis version >= #{RECOMMENDED_REDIS_VERSION}?"

      @custom_error_message = ''

      def check?
        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 = "Your Redis version #{redis_version} has reached end-of-life (EOL). Update your Redis server to a version >= #{RECOMMENDED_REDIS_VERSION}"
          status = false
        end

        status
      end

      def show_error
        try_fixing_it(
          @custom_error_message
        )
        for_more_information(
          'doc/administration/redis/index.html#redis-replication-and-failover-using-the-non-bundled-redis'
        )
        fix_and_rerun
      end
    end
  end
end