Class: Aws::Plugins::Retries::ClientRateLimiter Private
- Inherits:
- 
      Object
      
        - Object
- Aws::Plugins::Retries::ClientRateLimiter
 
- Defined in:
- lib/aws-sdk-core/plugins/retries/client_rate_limiter.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Used only in ‘adaptive’ retry mode
Constant Summary collapse
- MIN_CAPACITY =
          This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future. 
- 1
- MIN_FILL_RATE =
          This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future. 
- 0.5
- SMOOTH =
          This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future. 
- 0.8
- BETA =
          This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future. How much to scale back after a throttling response 
- 0.7
- SCALE_CONSTANT =
          This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future. Controls how aggressively we scale up after being throttled 
- 0.4
Instance Method Summary collapse
- 
  
    
      #initialize  ⇒ ClientRateLimiter 
    
    
  
  
  
    constructor
  
  
  
  
  
  private
  
    A new instance of ClientRateLimiter. 
- #token_bucket_acquire(amount, wait_to_fill = true) ⇒ Object private
- #update_sending_rate(is_throttling_error) ⇒ Object private
Constructor Details
#initialize ⇒ ClientRateLimiter
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of ClientRateLimiter.
| 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # File 'lib/aws-sdk-core/plugins/retries/client_rate_limiter.rb', line 17 def initialize @mutex = Mutex.new @fill_rate = nil @max_capacity = nil @current_capacity = 0 @last_timestamp = nil @enabled = false @measured_tx_rate = 0 @last_tx_rate_bucket = Aws::Util.monotonic_seconds @request_count = 0 @last_max_rate = 0 @last_throttle_time = Aws::Util.monotonic_seconds @calculated_rate = nil end | 
Instance Method Details
#token_bucket_acquire(amount, wait_to_fill = true) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
| 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # File 'lib/aws-sdk-core/plugins/retries/client_rate_limiter.rb', line 32 def token_bucket_acquire(amount, wait_to_fill = true) # Client side throttling is not enabled until we see a # throttling error return unless @enabled @mutex.synchronize do token_bucket_refill # Next see if we have enough capacity for the requested amount while @current_capacity < amount raise Aws::Errors::RetryCapacityNotAvailableError unless wait_to_fill @mutex.sleep((amount - @current_capacity) / @fill_rate) token_bucket_refill end @current_capacity -= amount end end | 
#update_sending_rate(is_throttling_error) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
| 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | # File 'lib/aws-sdk-core/plugins/retries/client_rate_limiter.rb', line 50 def update_sending_rate(is_throttling_error) @mutex.synchronize do update_measured_rate if is_throttling_error rate_to_use = if @enabled [@measured_tx_rate, @fill_rate].min else @measured_tx_rate end # The fill_rate is from the token bucket @last_max_rate = rate_to_use calculate_time_window @last_throttle_time = Aws::Util.monotonic_seconds @calculated_rate = cubic_throttle(rate_to_use) enable_token_bucket else calculate_time_window @calculated_rate = cubic_success(Aws::Util.monotonic_seconds) end new_rate = [@calculated_rate, 2 * @measured_tx_rate].min token_bucket_update_rate(new_rate) end end |