Class: Algolia::Transport::RetryStrategy
- Inherits:
-
Object
- Object
- Algolia::Transport::RetryStrategy
- Includes:
- RetryOutcomeType
- Defined in:
- lib/algolia/transport/retry_strategy.rb
Constant Summary
Constants included from RetryOutcomeType
RetryOutcomeType::FAILURE, RetryOutcomeType::RETRY, RetryOutcomeType::SUCCESS
Instance Method Summary collapse
-
#decide(tryable_host, http_response_code: nil, is_timed_out: false, network_failure: false) ⇒ Binary
Decides on the outcome of the request.
-
#get_tryable_hosts(call_type) ⇒ Array
Retrieves the tryable hosts.
-
#initialize(hosts) ⇒ RetryStrategy
constructor
A new instance of RetryStrategy.
Constructor Details
#initialize(hosts) ⇒ RetryStrategy
Returns a new instance of RetryStrategy.
8 9 10 11 |
# File 'lib/algolia/transport/retry_strategy.rb', line 8 def initialize(hosts) @hosts = hosts @lock = Mutex.new end |
Instance Method Details
#decide(tryable_host, http_response_code: nil, is_timed_out: false, network_failure: false) ⇒ Binary
Decides on the outcome of the request
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/algolia/transport/retry_strategy.rb', line 43 def decide(tryable_host, http_response_code: nil, is_timed_out: false, network_failure: false) @lock.synchronize do if !is_timed_out && success?(http_response_code) tryable_host.up = true tryable_host.last_use = Time.now.utc SUCCESS elsif !is_timed_out && retryable?(http_response_code, network_failure) tryable_host.up = false tryable_host.last_use = Time.now.utc RETRY elsif is_timed_out tryable_host.up = true tryable_host.last_use = Time.now.utc tryable_host.retry_count += 1 RETRY else FAILURE end end end |
#get_tryable_hosts(call_type) ⇒ Array
Retrieves the tryable hosts
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/algolia/transport/retry_strategy.rb', line 19 def get_tryable_hosts(call_type) @lock.synchronize do reset_expired_hosts if @hosts.any? { |host| host.up && flag?(host.accept, call_type) } @hosts.select { |host| host.up && flag?(host.accept, call_type) } else @hosts.each do |host| reset(host) if flag?(host.accept, call_type) end @hosts end end end |