Class: Aws::Plugins::Retries::RetryQuota Private

Inherits:
Object
  • Object
show all
Defined in:
lib/aws-sdk-core/plugins/retries/retry_quota.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 in ‘standard’ and ‘adaptive’ retry modes.

Constant Summary collapse

INITIAL_RETRY_TOKENS =

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.

500
RETRY_COST =

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.

5
NO_RETRY_INCREMENT =

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
TIMEOUT_RETRY_COST =

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.

10

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ RetryQuota

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 RetryQuota.



15
16
17
18
19
# File 'lib/aws-sdk-core/plugins/retries/retry_quota.rb', line 15

def initialize(opts = {})
  @mutex              = Mutex.new
  @max_capacity       = opts.fetch(:max_capacity, INITIAL_RETRY_TOKENS)
  @available_capacity = @max_capacity
end

Instance Method Details

#checkout_capacity(error_inspector) ⇒ Integer

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.

check if there is sufficient capacity to retry and return it. If there is insufficient capacity return 0

Returns:

  • (Integer)

    The amount of capacity checked out



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/aws-sdk-core/plugins/retries/retry_quota.rb', line 25

def checkout_capacity(error_inspector)
  @mutex.synchronize do
    capacity_amount = if error_inspector.networking?
                        TIMEOUT_RETRY_COST
                      else
                        RETRY_COST
                      end

    # unable to acquire capacity
    return 0 if capacity_amount > @available_capacity

    @available_capacity -= capacity_amount
    capacity_amount
  end
end

#release(capacity_amount) ⇒ 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.

capacity_amount refers to the amount of capacity requested from the last retry. It can either be RETRY_COST, TIMEOUT_RETRY_COST, or unset.



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/aws-sdk-core/plugins/retries/retry_quota.rb', line 44

def release(capacity_amount)
  # Implementation note:  The release() method is called for
  # every API call.  In the common case where the request is
  # successful and we're at full capacity, we can avoid locking.
  # We can't exceed max capacity so there's no work we have to do.
  return if @available_capacity == @max_capacity

  @mutex.synchronize do
    @available_capacity += capacity_amount || NO_RETRY_INCREMENT
    @available_capacity = [@available_capacity, @max_capacity].min
  end
end