7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/circleci-tools/retryable.rb', line 7
def with_retries(max_retries: MAX_RETRIES)
retries = 0
begin
yield
rescue => e
if retries < max_retries
retries += 1
backoff_time = [BACKOFF_FACTOR * (2 ** retries), MAX_BACKOFF_TIME].min.floor
retry_logger.info "Retry ##{retries} after #{backoff_time} seconds"
retry_logger.debug "Thread #{Thread.current.object_id}: Error: #{e.message}"
sleep backoff_time
retry
else
retry_logger.warn "Thread #{Thread.current.object_id}: Error: #{e.message}"
end
end
end
|