googleapis / googleapis/google-cloud-rust

Status-less transport errors classified permanent in exactly-once subscriber retry

Open
#6,719 0 comments 0 reactions 0 assignees View on GitHub
api: pubsub 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/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

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.