Sha256: 38d2df3ff2dd36312b5825e98ea926af2a6fc3564155d66e9767806c1db00e17

Contents?: true

Size: 924 Bytes

Versions: 17

Compression:

Stored size: 924 Bytes

Contents

# frozen_string_literal: true

require_relative '../errors'

class Redis
  class Cluster
    # Load and hashify node info for Redis Cluster Client
    module NodeLoader
      module_function

      def load_flags(nodes)
        info = {}

        nodes.each do |node|
          info = fetch_node_info(node)
          info.empty? ? next : break
        end

        return info unless info.empty?

        raise CannotConnectError, 'Redis client could not connect to any cluster nodes'
      end

      def fetch_node_info(node)
        node.call(%i[cluster nodes])
            .split("\n")
            .map { |str| str.split(' ') }
            .map { |arr| [arr[1].split('@').first, (arr[2].split(',') & %w[master slave]).first] }
            .to_h
      rescue CannotConnectError, ConnectionError, CommandError
        {} # can retry on another node
      end

      private_class_method :fetch_node_info
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
redis-4.6.0 lib/redis/cluster/node_loader.rb
redis-4.5.1 lib/redis/cluster/node_loader.rb
redis-4.5.0 lib/redis/cluster/node_loader.rb
redis-4.4.0 lib/redis/cluster/node_loader.rb
redis-4.3.1 lib/redis/cluster/node_loader.rb
redis-4.3.0 lib/redis/cluster/node_loader.rb
redis-4.2.5 lib/redis/cluster/node_loader.rb
redis-4.2.4 lib/redis/cluster/node_loader.rb
redis-4.2.3 lib/redis/cluster/node_loader.rb
redis-4.2.2 lib/redis/cluster/node_loader.rb
redis-4.2.1 lib/redis/cluster/node_loader.rb
redis-4.2.0 lib/redis/cluster/node_loader.rb
redis-4.1.4 lib/redis/cluster/node_loader.rb
redis-4.1.3 lib/redis/cluster/node_loader.rb
redis-4.1.2 lib/redis/cluster/node_loader.rb
redis-4.1.1 lib/redis/cluster/node_loader.rb
redis-4.1.0 lib/redis/cluster/node_loader.rb