summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormo <mo@mokhan.ca>2018-11-10 21:34:05 -0700
committermo <mo@mokhan.ca>2018-11-10 21:34:05 -0700
commitaa895cfe05a82195671d7290d78b6480652363ab (patch)
tree68741f58c358d1f2a1ce3f67b1ed5934d57bba01 /lib
parent7d5ff8c026e0a666bd474796fac25fbe68f31153 (diff)
extract attemp method.
Diffstat (limited to 'lib')
-rw-r--r--lib/net/hippie.rb5
-rw-r--r--lib/net/hippie/client.rb22
2 files changed, 19 insertions, 8 deletions
diff --git a/lib/net/hippie.rb b/lib/net/hippie.rb
index 71e786d..9a7ea72 100644
--- a/lib/net/hippie.rb
+++ b/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
diff --git a/lib/net/hippie/client.rb b/lib/net/hippie/client.rb
index e28633d..a140653 100644
--- a/lib/net/hippie/client.rb
+++ b/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