class Cql::Client::ClusterConnector

@private

Public Class Methods

new(sequence, logger) click to toggle source
# File lib/cql/client/connector.rb, line 7
def initialize(sequence, logger)
  @sequence = sequence
  @logger = logger
end

Public Instance Methods

connect_all(hosts, connections_per_node) click to toggle source
# File lib/cql/client/connector.rb, line 12
def connect_all(hosts, connections_per_node)
  connections = hosts.flat_map do |host|
    Array.new(connections_per_node) do
      f = @sequence.connect(host)
      f.on_value { |connection| register_logging(connection) }
      f.recover do |error|
        @logger.warn('Failed connecting to node at %s: %s' % [host, error.message])
        FailedConnection.new(error, host)
      end
    end
  end
  Future.all(*connections).map do |connections|
    connected_connections = connections.select(&:connected?)
    if connected_connections.empty?
      e = connections.first.error
      if e.is_a?(QueryError) && e.code == QueryError::BAD_CREDENTIALS
        e = AuthenticationError.new(e.message)
      end
      raise e
    end
    connected_connections
  end
end

Private Instance Methods

register_logging(connection) click to toggle source
# File lib/cql/client/connector.rb, line 38
def register_logging(connection)
  args = [connection[:host_id], connection.host, connection.port, connection[:data_center]]
  @logger.info('Connected to node %s at %s:%d in data center %s' % args)
  connection.on_closed do |cause|
    message = 'Connection to node %s at %s:%d in data center %s closed' % args
    if cause
      message << (' unexpectedly: %s' % cause.message)
      @logger.warn(message)
    else
      @logger.info(message)
    end
  end
end