Module: Mongo::Retryable::Backpressure Private
| Relationships & Source Files | |
| Defined in: | lib/mongo/retryable/backpressure.rb |
Overview
Constants and helpers for client backpressure (exponential backoff and jitter in retry loops).
Constant Summary
-
BASE_BACKOFF =
# File 'lib/mongo/retryable/backpressure.rb', line 11
Base backoff delay in seconds.
0.1 -
DEFAULT_MAX_RETRIES =
# File 'lib/mongo/retryable/backpressure.rb', line 17
Default maximum number of retries for overload errors.
2 -
MAX_BACKOFF =
# File 'lib/mongo/retryable/backpressure.rb', line 14
Maximum backoff delay in seconds.
10
Class Method Summary
-
.backoff_delay(attempt, jitter: rand, err: nil) ⇒ Float
Internal use only
Calculate the backoff delay for a given retry attempt.
- .base_backoff(err) private Internal use only
Class Method Details
.backoff_delay(attempt, jitter: rand, err: nil) ⇒ Float
Calculate the backoff delay for a given retry attempt.
# File 'lib/mongo/retryable/backpressure.rb', line 26
def self.backoff_delay(attempt, jitter: rand, err: nil) jitter * [ MAX_BACKOFF, base_backoff(err) * (2**attempt) ].min end
.base_backoff(err) (private)
# File 'lib/mongo/retryable/backpressure.rb', line 30
def self.base_backoff(err) return BASE_BACKOFF if err.nil? return BASE_BACKOFF unless err.respond_to?(:result) && err.result.respond_to?(:base_backoff_ms) base_backoff_ms = err.result.base_backoff_ms if base_backoff_ms && base_backoff_ms > 0 err.result.base_backoff_ms / 1000.0 else BASE_BACKOFF end end