summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormokha <mokha@cisco.com>2018-11-10 10:09:33 -0700
committermokha <mokha@cisco.com>2018-11-10 10:09:33 -0700
commitbd4e24325b76740c91a96080a3cee9d732c960db (patch)
tree9077558201b5460fbe92b84ab3fffa1e6f53921f /lib
parenta247acd75e953221cee80262eba278916bb73f8c (diff)
add retry.
Diffstat (limited to 'lib')
-rw-r--r--lib/net/hippie.rb8
-rw-r--r--lib/net/hippie/client.rb14
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/net/hippie.rb b/lib/net/hippie.rb
index 71e786d..6c39a50 100644
--- a/lib/net/hippie.rb
+++ b/lib/net/hippie.rb
@@ -14,6 +14,14 @@ require 'net/hippie/api'
module Net
# net/http for hippies.
module Hippie
+ CONNECTION_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 2760d74..9797697 100644
--- a/lib/net/hippie/client.rb
+++ b/lib/net/hippie/client.rb
@@ -12,6 +12,7 @@ module Net
attr_accessor :mapper
attr_accessor :read_timeout
+ attr_accessor :logger
def initialize(
certificate: nil,
@@ -27,6 +28,7 @@ module Net
@passphrase = passphrase
@read_timeout = 30
@verify_mode = verify_mode
+ @logger = Net::Hippie.logger
end
def execute(uri, request)
@@ -60,6 +62,16 @@ module Net
execute(uri, request, &block)
end
+ def with_retry(retries: 3)
+ retries.downto(0) do |n|
+ return yield self
+ rescue *::Net::Hippie::CONNECTION_ERRORS => error
+ logger.error("Retry Attempt: #{n}")
+ logger.error(error)
+ raise error if n.zero?
+ end
+ end
+
private
attr_reader :default_headers
@@ -71,7 +83,7 @@ module Net
http.read_timeout = read_timeout
http.use_ssl = uri.scheme == 'https'
http.verify_mode = verify_mode
- http.set_debug_output(Net::Hippie.logger)
+ http.set_debug_output(logger)
apply_client_tls_to(http)
http
end