googleapis / googleapis/google-cloud-rust
Default RPC retry policy for BigQuery query client is unbounded
- Dominant language
- Rust
- Stars
- 955
- Forks
- 144
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 279
Description
Unconfirmed. This is the result of a search with Claude, may be a false positive.
In `src/bigquery/src/query/retry_policy.rs`, `default_retry_policy()` returns raw `Arc::new(RetryableErrors)`:
https://github.com/googleapis/google-cloud-rust/blob/f02b42c2ac5720334cd2b5335824bd4166264527/src/bigquery/src/query/retry_policy.rs#L34-L62
`RetryableErrors::on_error` returns only `RetryResult::Continue(error)` or `RetryResult::Permanent(error)`. It never returns `RetryResult::Exhausted`, and `remaining_time()` defaults to `None`.
Because `default_retry_policy()` does not decorate `RetryableErrors` with `.with_time_limit(...)` or `.with_attempt_limit(...)`, persistent transient errors (such as 429 or 503) cause BigQuery query RPCs to retry infinitely.
Contributor guide
Research direction
Start in src/bigquery/src/query/retry_policy.rs at default_retry_policy() and RetryableErrors::on_error, then inspect the retry policy APIs used by the client. Verify how persistent transient errors behave; done means the default BigQuery query RPC policy has a finite retry bound and tests demonstrate exhaustion rather than infinite retries.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- google-cloud, rust
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100