-
Type:
Spec Change
-
Resolution: Unresolved
-
Priority:
Unknown
-
None
-
Component/s: Retryability
As part of DRIVERS-3160 Client Backpressure, we plan to make retry loops use exponential backoff and jitter to reduce the load on the server and improve goodput. Retryable reads and writes only retry once by default but can perform multiple when CSOT is enabled. The convenient transaction api (DRIVERS-1934) will also retry multiple times. These retry loops should share a common backoff and jitter policy.
We also add an adaptive token bucket to limit load amplification during peak overload. Each time a client makes a successful request (ok:1 or a successful error like DuplicateKeyError) it deposits a fractional “token” into a bucket. Each time a request fails (ok:0 with SystemOverloaded error), the client performs retries as normal (with exponential backoff + jitter) as long as there are whole tokens available in the bucket. This approach establishes a limited memory for the operational conditions of the upstream service: if there are tokens available for retry, then the service has been healthy recently.
- is duplicated by
-
DRIVERS-3240 Adaptive token bucket retry policy
-
- Closed
-
- is related to
-
DRIVERS-3160 Client Backpressure Support
-
- In Progress
-
-
PYTHON-5505 Prototype system overload retry loop for all operations
-
- Closed
-
- related to
-
SERVER-108583 Add diagnostic metadata to identify retried commands
-
- Backlog
-
-
DRIVERS-3241 Add diagnostic metadata to retried commands
-
- Blocked
-
-
DRIVERS-1934 withTransaction API retries too frequently
-
- In Progress
-
- split to
-
CDRIVER-6092 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
CSHARP-5723 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
CXX-3342 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
GODRIVER-3658 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
JAVA-5956 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
NODE-7142 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
PHPLIB-1719 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
PYTHON-5528 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
RUBY-3706 Exponential backoff and jitter in retry loops
-
- Blocked
-
-
RUST-2273 Exponential backoff and jitter in retry loops
-
- Blocked
-