Class: Azure::Core::Http::RetryPolicy
- Inherits:
-
HttpFilter
- Object
- HttpFilter
- Azure::Core::Http::RetryPolicy
- Defined in:
- lib/azure/core/http/retry_policy.rb
Overview
A HttpFilter implementation that handles retrying based on a specific policy when HTTP layer errors occur
Direct Known Subclasses
Instance Attribute Summary collapse
-
#retry_data ⇒ Object
Returns the value of attribute retry_data.
Instance Method Summary collapse
-
#call(req, _next) ⇒ Object
Overrides the base class implementation of call to implement a retry loop that uses should_retry? to determine when to break the loop.
-
#initialize(&block) ⇒ RetryPolicy
constructor
A new instance of RetryPolicy.
-
#should_retry?(response, retry_data) ⇒ Boolean
Determines if the HTTP request should continue retrying.
Constructor Details
#initialize(&block) ⇒ RetryPolicy
Returns a new instance of RetryPolicy.
25 26 27 28 |
# File 'lib/azure/core/http/retry_policy.rb', line 25 def initialize(&block) @block = block @retry_data = {} end |
Instance Attribute Details
#retry_data ⇒ Object
Returns the value of attribute retry_data.
30 31 32 |
# File 'lib/azure/core/http/retry_policy.rb', line 30 def retry_data @retry_data end |
Instance Method Details
#call(req, _next) ⇒ Object
Overrides the base class implementation of call to implement a retry loop that uses should_retry? to determine when to break the loop
req - HttpRequest. The HTTP request _next - HttpFilter. The next filter in the pipeline
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/azure/core/http/retry_policy.rb', line 38 def call(req, _next) response = nil retry_data = @retry_data.dup begin # URI could change in the retry, e.g. secondary endpoint unless retry_data[:uri].nil? req.uri = retry_data[:uri] end retry_data[:error] = nil response = _next.call rescue retry_data[:error] = $! end while should_retry?(response, retry_data) # Assign the error when HTTP error is not thrown from the previous filter retry_data[:error] = response.error if response && !response.success? if retry_data[:error].nil? response else raise retry_data[:error] end end |
#should_retry?(response, retry_data) ⇒ Boolean
Determines if the HTTP request should continue retrying
response - HttpResponse. The response from the active request retry_data - Hash. Stores stateful retry data
The retry_data is a Hash which can be used to store stateful data about the request execution context (such as an incrementing counter, timestamp, etc). The retry_data object will be the same instance throughout the lifetime of the request.
If an inline block was passed to the constructor, that block will be used here and should return true to retry the job, or false to stop exit. If an inline block was not passed to the constructor the method returns false.
Alternatively, a subclass could override this method.
78 79 80 |
# File 'lib/azure/core/http/retry_policy.rb', line 78 def should_retry?(response, retry_data) @block ? @block.call(response, retry_data) : false end |