class HTTP::Retriable::Performer
def perform(client, req, &block)
- Api: - private
Other tags:
- See: #initialize -
def perform(client, req, &block) 1.upto(Float::INFINITY) do |attempt| # infinite loop with index err, res = try_request(&block) if retry_request?(req, err, res, attempt) begin wait_for_retry_or_raise(req, err, res, attempt) ensure # Some servers support Keep-Alive on any response. Thus we should # flush response before retry, to avoid state error (when socket # has pending response data and we try to write new request). # Alternatively, as we don't need response body here at all, we # are going to close client, effectivle closing underlying socket # and resetting client's state. client.close end elsif err client.close raise err elsif res return res end end end