diff options
| author | mokha <mokha@cisco.com> | 2018-11-10 10:42:56 -0700 |
|---|---|---|
| committer | mokha <mokha@cisco.com> | 2018-11-10 10:42:56 -0700 |
| commit | bb09157a49e513218271a8d1910bda0385793ef0 (patch) | |
| tree | 17cdddea87a3e950797f88a7b8d82bd763985841 /lib | |
| parent | 75b658de7a773321e4f5f77b458caa7d5c488aad (diff) | |
retry with exponential delay
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/net/hippie/client.rb | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/net/hippie/client.rb b/lib/net/hippie/client.rb index 9797697..7a153b8 100644 --- a/lib/net/hippie/client.rb +++ b/lib/net/hippie/client.rb @@ -62,13 +62,25 @@ module Net execute(uri, request, &block) end + # attempt 1 -> delay 1 second + # attempt 2 -> delay 2 second + # attempt 3 -> delay 4 second + # attempt 4 -> delay 8 second + # attempt 5 -> delay 16 second + # attempt 6 -> delay 32 second + # attempt 7 -> delay 64 second + # attempt 8 -> delay 128 second def with_retry(retries: 3) - retries.downto(0) do |n| + retries = 3 if retries <= 0 + 0.upto(retries) do |n| return yield self rescue *::Net::Hippie::CONNECTION_ERRORS => error - logger.error("Retry Attempt: #{n}") - logger.error(error) - raise error if n.zero? + raise error if n >= retries + + delay = 2**n + logger.warn("Retry: #{n + 1}/#{retries}. Delay: #{delay} second(s)") + logger.warn(error.message) + sleep delay end end |
