feat(experimental): add bidi stream retry manager.#1632
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces a _BidiStreamRetryManager for handling retries in bidi streaming operations, along with comprehensive unit tests. The overall implementation is solid and well-tested. I have a few suggestions to improve type safety and maintainability in bidi_stream_retry_manager.py, such as adding a missing type hint, making another one more specific, and pointing out the use of an internal attribute from google-api-core which could be a future maintenance risk. Please see my detailed comments.
a3795a3 to
4f1aa96
Compare
8295ed3 to
5027ed4
Compare
5027ed4 to
96ac8ce
Compare
c8da9ac to
bea02a5
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces a robust retry manager for bidi streams, which is a significant enhancement for experimental async downloads. The implementation is well-structured, using a strategy pattern to separate the generic retry loop from the read-specific resumption logic. The addition of conformance tests to validate the retry behavior under various fault-injection scenarios is excellent. My review includes a few suggestions to improve maintainability and logging practices, such as replacing print statements with the logging module and addressing code duplication in error handling.
32d7d6a to
efe9c1c
Compare
chandra-siri
left a comment
There was a problem hiding this comment.
- General comments
- convert print into log statements.
- reduce code duplicates
- add comments where ever there's non-trivial logic
- In the internal bug attach screenshots of perf results with and without this change.
PR created by the Librarian CLI to initialize a release. Merging this PR will auto trigger a release. Librarian Version: v0.7.0 Language Image: us-central1-docker.pkg.dev/cloud-sdk-librarian-prod/images-prod/python-librarian-generator@sha256:8e2c32496077054105bd06c54a59d6a6694287bc053588e24debe6da6920ad91 <details><summary>google-cloud-storage: 3.8.0</summary> ## [3.8.0](v3.7.0...v3.8.0) (2026-01-13) ### Features * expose persisted size in mrd (#1671) ([0e2961b](0e2961be)) * implement "append_from_file" (#1686) ([1333c95](1333c956)) * compute chunk wise checksum for bidi_writes (#1675) ([139390c](139390cb)) * flush the last chunk in append method (#1699) ([89bfe7a](89bfe7a5)) * add write resumption strategy (#1663) ([a57ea0e](a57ea0ec)) * add bidi stream retry manager. (#1632) ([d90f0ee](d90f0ee0)) * make flush size configurable (#1677) ([f7095fa](f7095faf)) ### Bug Fixes * no state lookup while opening bidi-write stream ([2d5a7b1](2d5a7b16)) * no state lookup while opening bidi-write stream (#1636) ([2d5a7b1](2d5a7b16)) * close write object stream always (#1661) ([4a609a4](4a609a4b)) * add system test for opening with read_handle (#1672) ([6dc711d](6dc711da)) </details> --------- Co-authored-by: Victor Chudnovsky <vchudnov@google.com>

download_ranges()method, which will now use retry manager'sexecute()method to send the requestsBidiReadObjectRedirectedError.