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 | |
| parent | 75b658de7a773321e4f5f77b458caa7d5c488aad (diff) | |
retry with exponential delay
| -rwxr-xr-x | bin/cibuild | 1 | ||||
| -rw-r--r-- | lib/net/hippie/client.rb | 20 | ||||
| -rw-r--r-- | test/net/client_test.rb | 2 |
3 files changed, 18 insertions, 5 deletions
diff --git a/bin/cibuild b/bin/cibuild index c373497..499fce9 100755 --- a/bin/cibuild +++ b/bin/cibuild @@ -15,6 +15,7 @@ export RUBY_GC_HEAP_INIT_SLOTS=800000 export RUBY_HEAP_FREE_MIN=100000 export RUBY_HEAP_SLOTS_INCREMENT=400000 export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 +export CIBUILD=1 ruby -v gem install bundler --no-ri --no-rdoc --conservative 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 diff --git a/test/net/client_test.rb b/test/net/client_test.rb index f665d9d..d44a336 100644 --- a/test/net/client_test.rb +++ b/test/net/client_test.rb @@ -6,7 +6,7 @@ class ClientTest < Minitest::Test def initialize(*args) super @subject = Net::Hippie::Client.new - @subject.logger = Logger.new('/dev/null') + @subject.logger = ENV['CIBUILD'] ? Logger.new('/dev/null') : Logger.new(STDOUT) end def test_get |
