Class: OCI::Retry::RetryConfig
- Inherits:
- 
      Object
      
        - Object
- OCI::Retry::RetryConfig
 
- Defined in:
- lib/oci/retry/retry_config.rb
Overview
The configuration for a retry strategy
Instance Attribute Summary collapse
- 
  
    
      #base_sleep_time_millis  ⇒ Integer 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    For exponential backoff and retry calculations, the base time (in milliseconds) which we multiply by some exponential value. 
- 
  
    
      #exponential_growth_factor  ⇒ Integer 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    For exponential backoff and retry calculations, the exponent we'll raise to the number of attempts. 
- 
  
    
      #max_attempts  ⇒ Integer 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    The maximum number of attempts before we stop trying to make calls. 
- 
  
    
      #max_elapsed_time_millis  ⇒ Integer 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    The maximum amount of time (in milliseconds) that can elapse for all attempts before we stop trying to make calls. 
- 
  
    
      #max_sleep_between_attempts_millis  ⇒ Integer 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    For exponential backoff and retry calclulation, the maximum amount of time (in milliseconds) to sleep between attempts. 
- 
  
    
      #should_retry_exception_proc  ⇒ Proc 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    A proc which can be called to determine whether a particular exception can be retried. 
- 
  
    
      #sleep_calc_millis_proc  ⇒ Proc 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    A proc which can be called to determine the next sleep time (in milliseconds) when retrying. 
Instance Method Summary collapse
- 
  
    
      #do_sleep(retry_state)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Sleeps for some amount of time based on the current state of making a retriable call. 
- 
  
    
      #initialize(base_sleep_time_millis:, exponential_growth_factor:, should_retry_exception_proc:, sleep_calc_millis_proc:, max_attempts: nil, max_elapsed_time_millis: nil, max_sleep_between_attempts_millis: nil)  ⇒ RetryConfig 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of RetryConfig. 
- 
  
    
      #should_retry?(retry_state)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Determines whether we should retry a call based on the current state of making a retriable call and the values defined in this configuration. 
Constructor Details
#initialize(base_sleep_time_millis:, exponential_growth_factor:, should_retry_exception_proc:, sleep_calc_millis_proc:, max_attempts: nil, max_elapsed_time_millis: nil, max_sleep_between_attempts_millis: nil) ⇒ RetryConfig
Returns a new instance of RetryConfig.
| 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | # File 'lib/oci/retry/retry_config.rb', line 57 def initialize( base_sleep_time_millis:, exponential_growth_factor:, should_retry_exception_proc:, sleep_calc_millis_proc:, max_attempts: nil, max_elapsed_time_millis: nil, max_sleep_between_attempts_millis: nil ) raise 'base_sleep_time_millis must be greater than or equal to 1' \ if base_sleep_time_millis.nil? || base_sleep_time_millis < 1 raise 'exponential_growth_factor must be greater than or equal to 1' \ if exponential_growth_factor.nil? || exponential_growth_factor < 1 raise 'should_retry_exception_proc must be provided' if should_retry_exception_proc.nil? raise 'sleep_calc_millis_proc must be provided' if sleep_calc_millis_proc.nil? @base_sleep_time_millis = base_sleep_time_millis @exponential_growth_factor = exponential_growth_factor @should_retry_exception_proc = should_retry_exception_proc @sleep_calc_millis_proc = sleep_calc_millis_proc unless max_attempts.nil? raise 'max_attempts must be greater than or equal to 1' if max_attempts < 1 @max_attempts = max_attempts end unless max_elapsed_time_millis.nil? raise 'max_elapsed_time_millis must be greater than or equal to 0' if max_elapsed_time_millis < 0 @max_elapsed_time_millis = max_elapsed_time_millis end raise 'max_sleep_between_attempts_millis must be greater than or equal to 0' \ if max_sleep_between_attempts_millis && max_sleep_between_attempts_millis < 0 @max_sleep_between_attempts_millis = max_sleep_between_attempts_millis if max_sleep_between_attempts_millis end | 
Instance Attribute Details
#base_sleep_time_millis ⇒ Integer (readonly)
For exponential backoff and retry calculations, the base time (in milliseconds) which we multiply by some exponential value
| 40 41 42 | # File 'lib/oci/retry/retry_config.rb', line 40 def base_sleep_time_millis @base_sleep_time_millis end | 
#exponential_growth_factor ⇒ Integer (readonly)
For exponential backoff and retry calculations, the exponent we'll raise to the number of attempts. The result would then be multiplied by the value in #base_sleep_time_millis
| 46 47 48 | # File 'lib/oci/retry/retry_config.rb', line 46 def exponential_growth_factor @exponential_growth_factor end | 
#max_attempts ⇒ Integer (readonly)
The maximum number of attempts before we stop trying to make calls. This is one-based (i.e. the first attempt is 1, the second is 2 etc.) and nil indicates that there is no maximum.
| 14 15 16 | # File 'lib/oci/retry/retry_config.rb', line 14 def max_attempts @max_attempts end | 
#max_elapsed_time_millis ⇒ Integer (readonly)
The maximum amount of time (in milliseconds) that can elapse for all attempts before we stop trying to make calls. A nil value indicates that there is no maximum
| 20 21 22 | # File 'lib/oci/retry/retry_config.rb', line 20 def max_elapsed_time_millis @max_elapsed_time_millis end | 
#max_sleep_between_attempts_millis ⇒ Integer (readonly)
For exponential backoff and retry calclulation, the maximum amount of time (in milliseconds) to sleep between attempts. A nil value indicates that there is no maximum
| 52 53 54 | # File 'lib/oci/retry/retry_config.rb', line 52 def max_sleep_between_attempts_millis @max_sleep_between_attempts_millis end | 
#should_retry_exception_proc ⇒ Proc (readonly)
A proc which can be called to determine whether a particular exception can be retried. This proc should take a single argument of type Internal::RetryState. The exception can be accessed via Intenral::RetryState#last_exception
| 27 28 29 | # File 'lib/oci/retry/retry_config.rb', line 27 def should_retry_exception_proc @should_retry_exception_proc end | 
#sleep_calc_millis_proc ⇒ Proc (readonly)
A proc which can be called to determine the next sleep time (in milliseconds) when retrying. This proc should take two arguments, the first argument of type OCI::Retry::RetryConfig and the second of type Internal::RetryState
| 34 35 36 | # File 'lib/oci/retry/retry_config.rb', line 34 def sleep_calc_millis_proc @sleep_calc_millis_proc end | 
Instance Method Details
#do_sleep(retry_state) ⇒ Object
Sleeps for some amount of time based on the current state of making a retriable call
| 119 120 121 122 | # File 'lib/oci/retry/retry_config.rb', line 119 def do_sleep(retry_state) sleep_time_millis = sleep_calc_millis_proc.call(self, retry_state) sleep(sleep_time_millis / 1000.0) end | 
#should_retry?(retry_state) ⇒ Boolean
Determines whether we should retry a call based on the current state of making a retriable call and the values defined in this configuration.
| 106 107 108 109 110 111 112 113 114 | # File 'lib/oci/retry/retry_config.rb', line 106 def should_retry?(retry_state) current_time = (Time.now.to_f * 1000).to_i time_difference_millis = current_time - retry_state.start_time_epoch_millis return false if @max_attempts && retry_state.current_attempt_number >= @max_attempts return false if @max_elapsed_time_millis && time_difference_millis > @max_elapsed_time_millis should_retry_exception_proc.call(retry_state) end |