module ElasticSearch::RetryingClient

Constants

RETRYING_DEFAULTS

Public Class Methods

new(servers, options={}) click to toggle source

use cluster status to get server list

Calls superclass method
# File lib/elasticsearch/client/retrying_client.rb, line 17
def initialize(servers, options={})
  super
  @options = RETRYING_DEFAULTS.merge(@options)
  @retries = options[:retries] || @server_list.size
  @request_count = 0
  @max_requests = @options[:server_max_requests]
  @retry_period = @options[:server_retry_period]
  rebuild_live_server_list!
end

Public Instance Methods

connect!() click to toggle source
Calls superclass method
# File lib/elasticsearch/client/retrying_client.rb, line 27
def connect!
  @current_server = next_server
  super
rescue ElasticSearch::RetryableError
  retry
end
disconnect!() click to toggle source
Calls superclass method
# File lib/elasticsearch/client/retrying_client.rb, line 34
def disconnect!
  # Keep live servers in the list if we have a retry period. Otherwise,
  # always eject, because we will always re-add them.
  if @retry_period && @current_server
    @live_server_list.unshift(@current_server)
  end

  super
  @request_count = 0
end
disconnect_on_max!() click to toggle source
# File lib/elasticsearch/client/retrying_client.rb, line 76
def disconnect_on_max!
  @live_server_list.push(@current_server)
  disconnect!
end
execute(method_name, *args) click to toggle source
Calls superclass method
# File lib/elasticsearch/client/retrying_client.rb, line 65
def execute(method_name, *args)
  disconnect_on_max! if @max_requests and @request_count >= @max_requests
  @request_count += 1
  begin
    super
  rescue ElasticSearch::RetryableError
    disconnect!
    retry
  end
end
next_server() click to toggle source

TODO this can spin indefinitely if timeout > retry_period

# File lib/elasticsearch/client/retrying_client.rb, line 46
def next_server
  if @retry_period
    rebuild_live_server_list! if Time.now > @last_rebuild + @retry_period
    raise NoServersAvailable, "No live servers in #{@server_list.inspect} since #{@last_rebuild.inspect}." if @live_server_list.empty?
  elsif @live_server_list.empty?
    rebuild_live_server_list!
  end
  @live_server_list.pop
end
rebuild_live_server_list!() click to toggle source
# File lib/elasticsearch/client/retrying_client.rb, line 56
def rebuild_live_server_list!
  @last_rebuild = Time.now
  if @options[:randomize_server_list]
    @live_server_list = @server_list.sort_by { rand }
  else
    @live_server_list = @server_list.dup
  end
end