googleapis / googleapis/google-cloud-rust
Status-less transport errors classified permanent in exactly-once subscriber retry
- 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/pubsub/src/subscriber/exactly_once_retry.rs`, error classification for exactly-once ack/nack/modack retries inspects `shared_err.status()`:
https://github.com/googleapis/google-cloud-rust/blob/f02b42c2ac5720334cd2b5335824bd4166264527/src/pubsub/src/subscriber/exactly_once_retry.rs#L37-L63
When a connection reset, broken pipe, or connection timeout occurs, `shared_err.status()` is `None`.
Because `shared_err.status()` is `None`, the match is bypassed and lines 52–63 convert all ack IDs into permanent `Err(AckError::Rpc)`. This contradicts `retry_policy.rs:105-114` where transport errors are intended to be retried.
Contributor guide
Research direction
Start in src/pubsub/src/subscriber/exactly_once_retry.rs at the error-classification logic, then compare it with retry_policy.rs:105-114. Verify how status-less connection resets, broken pipes, and timeouts are classified; done means these transport errors follow the retry policy instead of becoming permanent AckError::Rpc results.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- distributed-systems
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 72/100