googleapis / googleapis/google-cloud-rust

Default RPC retry policy for BigQuery query client is unbounded

Open
#6,716 0 comments 0 reactions 0 assignees View on GitHub
api: bigquery type: bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.