Sha256: c5bca8b20a4879060ff4c45a1f8b60ae62db88ab2009057b1708e62a1de53062

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

class ThinkingSphinx::Connection
  def self.pool
    @pool ||= Innertube::Pool.new(
      Proc.new { ThinkingSphinx::Connection.new },
      Proc.new { |connection| connection.close }
    )
  end

  def self.take
    retries  = 0
    original = nil
    begin
      pool.take do |connection|
        connection.reset
        begin
          yield connection
        rescue Riddle::ConnectionError, Riddle::ResponseError, SystemCallError => error
          original = error
          raise Innertube::Pool::BadResource
        end
      end
    rescue Innertube::Pool::BadResource
      retries += 1
      retry if retries < 3
      raise original
    end
  end

  def initialize
    client.open
  end

  def client
    @client ||= begin
      client = Riddle::Client.new shuffled_addresses, configuration.port,
        client_key
      client.max_matches = _max_matches
      client.timeout     = configuration.timeout || 0
      client
    end
  end

  private

  def client_key
    configuration.configuration.searchd.client_key
  end

  def configuration
    ThinkingSphinx::Configuration.instance
  end

  def _max_matches
    configuration.configuration.searchd.max_matches || 1000
  end

  def method_missing(method, *arguments, &block)
    client.send method, *arguments, &block
  end

  def shuffled_addresses
    return configuration.address unless configuration.shuffle

    addresses = Array(configuration.address)
    if addresses.respond_to?(:shuffle)
      addresses.shuffle
    else
      address.sort_by { rand }
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
thinking-sphinx-2.1.0 lib/thinking_sphinx/connection.rb
thinking-sphinx-1.5.0 lib/thinking_sphinx/connection.rb
friendlyfashion-thinking-sphinx-2.0.14.2 lib/thinking_sphinx/connection.rb