From bb09157a49e513218271a8d1910bda0385793ef0 Mon Sep 17 00:00:00 2001 From: mokha Date: Sat, 10 Nov 2018 10:42:56 -0700 Subject: retry with exponential delay --- lib/net/hippie/client.rb | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'lib') 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 -- cgit v1.2.3