Commit aa895cf
lib/net/hippie/client.rb
@@ -72,15 +72,11 @@ module Net
# attempt 8 -> delay 12.8 second
def with_retry(retries: 3)
retries = 0 if retries.nil? || retries.negative?
+
0.upto(retries) do |n|
- return yield self
- rescue EOFError, Errno::ECONNRESET, Errno::EINVAL,
- Net::ProtocolError, Timeout::Error => error
- raise error if n == retries
-
- delay = ((2**n) * 0.1) + Random.rand(0.05) # delay + jitter
- warn("`#{error.message}` Retry: #{n + 1}/#{retries} Delay: #{delay}s")
- sleep delay
+ attempt(n, retries) do
+ return yield self
+ end
end
end
@@ -90,6 +86,16 @@ module Net
attr_reader :verify_mode
attr_reader :certificate, :key, :passphrase
+ def attempt(attempt, max)
+ yield
+ rescue *TIMEOUT_ERRORS => error
+ raise error if attempt == max
+
+ delay = ((2**attempt) * 0.1) + Random.rand(0.05) # delay + jitter
+ warn("`#{error.message}` Retry: #{attempt + 1}/#{max} Delay: #{delay}s")
+ sleep delay
+ end
+
def http_for(uri)
http = Net::HTTP.new(uri.host, uri.port)
http.read_timeout = read_timeout
lib/net/hippie.rb
@@ -14,6 +14,11 @@ require 'net/hippie/api'
module Net
# net/http for hippies.
module Hippie
+ TIMEOUT_ERRORS = [
+ EOFError, Errno::ECONNRESET, Errno::EINVAL,
+ Net::ProtocolError, Timeout::Error
+ ].freeze
+
def self.logger
@logger ||= Logger.new(STDOUT)
end