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