storage: `Recommended` read-resume policy does not resume on `ABORTED`, the status the service uses to close an idle `BidiReadObject` stream
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
src/storage/src/read_resume_policy.rs の is_transient_code(154行目付近)から読み始め、Recommended が結果を ResumeResult にどう対応づけているかを確認してください。この issue では、Code::Aborted を一時的エラーのリストに追加するか、アイドル切断のステータスを個別に照合するかのどちらかが求められています。編集する前に、メンテナーがどちらを望んでいるか確認してください。完了条件は、Recommended のもとで Aborted ステータスが再開可能な結果を返すテストがあり、既存のポリシーテストがすべて通ることです。
索引モデルが issue の本文から書いたものです。
説明
What happens
read_resume_policy::is_transient_code (src/storage/src/read_resume_policy.rs line 154 on
main and in 1.21.0) treats Unavailable, ResourceExhausted, Internal and
DeadlineExceeded as resumable. Aborted is not in the list, so Recommended returns
ResumeResult::Permanent for it and the bidi worker stops.
Why it matters
Cloud Storage engineering told us, through our support case, that an idle BidiReadObject
stream is pruned after roughly six minutes and that the intended signal is gRPC ABORTED with a
message like "Idle stream closed...". What the client receives today is an HTTP/2
RST_STREAM(INTERNAL_ERROR) with no trailers, which surfaces as a transport error and is
resumed. The day the service sends the documented status, every client on the default policy
stops resuming idle-pruned streams: the worker parks in its permanent-error arm and every later
read on that descriptor fails (with #6688 unfixed, by a panic on the next read_range).
An idle-prune ABORTED on a descriptor with a valid read_handle is resumable by construction:
the resume is the same RPC carrying the handle, and the object has not changed.
Reproduction
Fake google.storage.v2.Storage (tonic) implementing BidiReadObject. Open a descriptor, read
one range, leave it idle, have the fake end the stream with Status::aborted("Idle stream closed"). Observed on 1.21.0: zero reconnect attempts reach the fake; the descriptor is dead.
With the fake ending the same idle stream with Unavailable instead, the client reconnects and
the next read succeeds.
Expected
Add Code::Aborted to is_transient_code, or match the idle-close status specifically if its
message or error details are stable. Either way Recommended should resume it.
Workaround
open_object(...).with_read_resume_policy(...) with a policy that continues on Aborted. We
recover at the pool level instead (evict the descriptor on a failed read and retry once on a
fresh stream), so the cost today is one failed read.
Environment
google-cloud-storage 1.21.0, gRPC transport, BidiReadObject via open_object; main has the
same code as of 2 Nov 2026.
- 主要言語
- Rust
- スター
- 972
- フォーク
- 163
- 平均マージ
- 1日 13時間
- マージ済み PR(30日)
- 202
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
googleapis/google-cloud-rust のほかの issue
-
BytesValue in Any rejects unpadded and URL-safe base64対応中かも @akasakariko が 15 日前に担当しました。 オープンpriority: p2 type: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
googleapis/google-cloud-rust#6714 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
type: bug
難易度 2/5 半日 初心者へのやさしさ 75/100
googleapis/google-cloud-rust#6710 ·
メンテナーはふだん 1 日以内に返信
-
type: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
googleapis/google-cloud-rust#6709 ·
メンテナーはふだん 1 日以内に返信
-
type: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
googleapis/google-cloud-rust#6707 ·
メンテナーはふだん 1 日以内に返信
-
type: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
googleapis/google-cloud-rust#6706 ·
メンテナーはふだん 1 日以内に返信
googleapis/google-cloud-rust の issue をすべて見る
似ている issue
-
bug UI
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
wardian-app/Wardian#1746 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
jlcodes99/cockpit-tools#3125 ·
メンテナーはふだん 2 日以内に返信
-
bug user-sprint
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Vondor/KassenSturz#967 ·
メンテナーはふだん 1 日以内に返信
-
area/ci
難易度 1/5 1時間未満 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
[BUG] Incremental sync warns "no stored highest_uid" on every round for folders with no new mailオープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
rustmailer/bichon#411 ·