Class: ActiveRecord::ConnectionAdapters::RetryBudget
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | activerecord/lib/active_record/connection_adapters/retry_budget.rb |
Overview
Tracks the remaining automatic-retry allowance for one unit of work against the database: a bounded number of attempts, an optional wall clock deadline, and whether a reconnect (permitted at most once, because reconnect! has its own internal retry loop) is still available.
Raw connection access and QueryIntent delivery share this bookkeeping,
so one query draws on a single allowance wherever its retries occur.
Class Method Summary
Instance Attribute Summary
- #available? ⇒ Boolean readonly
- #expired? ⇒ Boolean readonly
- #reconnectable? ⇒ Boolean readonly
- #retries_remaining readonly
Instance Method Summary
Constructor Details
.new(retries:, deadline:, reconnectable:) ⇒ RetryBudget
# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 16
def initialize(retries:, deadline:, reconnectable:) @retries_total = retries @retries_remaining = retries @deadline = deadline @reconnectable = reconnectable end
Instance Attribute Details
#available? ⇒ Boolean (readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 35
def available? @retries_remaining > 0 && !expired? end
#expired? ⇒ Boolean (readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 31
def expired? @deadline ? @deadline < Process.clock_gettime(Process::CLOCK_MONOTONIC) : false end
#reconnectable? ⇒ Boolean (readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 23
def reconnectable? @reconnectable end
#retries_remaining (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 14
attr_reader :retries_remaining
Instance Method Details
#attempts_used
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 46
def attempts_used @retries_total - @retries_remaining end
#consume
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 39
def consume return false unless available? @retries_remaining -= 1 true end
#reconnect_consumed!
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/retry_budget.rb', line 27
def reconnect_consumed! @reconnectable = false end