feat(storage): add multistream support to MRD#13792
feat(storage): add multistream support to MRD#13792krishnamd-jkp merged 10 commits intogoogleapis:mainfrom
Conversation
Summary of ChangesHello @krishnamd-jkp, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly upgrades the MultiRangeDownloader (MRD) by integrating multistream capabilities. This enhancement allows the MRD to leverage multiple concurrent gRPC streams for downloading object ranges, which can lead to improved throughput and reduced latency, especially for large objects or high-concurrency scenarios. The changes include mechanisms for dynamic stream creation, intelligent load distribution of range requests across these streams, and new configuration options to fine-tune the multistream behavior based on application requirements. Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request introduces multistream support for the Multi-Range Downloader (MRD), refactoring the single-stream architecture to manage multiple concurrent download streams. However, it introduces a critical race condition that can lead to a nil pointer dereference and a medium-severity data race. This occurs because a new stream can send responses to the manager before it's fully tracked, and the gRPC read specification is shared and modified across multiple goroutines without proper synchronization. Additionally, there is a suggestion regarding the public API for configuring the new multistream options to improve consistency.
2d77a84 to
23cf756
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request adds support for multiple concurrent streams to the Multi-Range Downloader (MRD). However, a critical data race was identified in the addNewStream method, which needs to be addressed for reliability. Additionally, a significant resilience issue exists where a single stream failure can bring down the entire downloader, and clarifications to the documentation for new configuration options are suggested.
| totalRangeBytes int64 | ||
| // statsRanges and statsRangeBytes help in tests to track | ||
| // distribution of ranges on different streams | ||
| statsRanges uint |
There was a problem hiding this comment.
This is a good addition and makes tests more reliable but also adds operation consuming CPU in production with no real functionality, can we do something so that this stats tracking is disabled in actual production? On the other hand, I do believe these are good stats and we might be interested in it for advanced observability.
c0adefc to
7a3ed94
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request adds multistream support to the Multi-Range Downloader (MRD), which is a significant feature enhancement. The changes are extensive and well-structured, introducing concepts like stream pickers, dynamic connection scaling, and robust session management. The core logic appears sound. I've identified a critical issue regarding the usability of the new options and a minor bug in one of the new integration tests. Once these are addressed, this will be a great addition.
c6314b8 to
2de7740
Compare
PR created by the Librarian CLI to initialize a release. Merging this PR will auto trigger a release. Librarian Version: v0.8.3 Language Image: us-central1-docker.pkg.dev/cloud-sdk-librarian-prod/images-prod/librarian-go@sha256:19bb93e8f1f916c61b597db2bad65dc432f79baaabb210499d7d0e4ad1dffe29 <details><summary>storage: v1.61.0</summary> ## [v1.61.0](storage/v1.60.0...storage/v1.61.0) (2026-03-10) ### Features * add bucket encryption enforcement configuration (#13874) ([245c8d7](245c8d76)) * add multistream options to MRD (#13758) ([4557675](4557675e)) * add a DeleteFolderRecursive API definition (PiperOrigin-RevId: 866471251) ([6f31019](6f310199)) * add multistream support to MRD (#13792) ([ffa7268](ffa7268c)) ### Bug Fixes * Fix TM download dir corner case (#14142) ([87cdcc9](87cdcc9f)) * Omit auto checksum in final request when MD5 is given (#14024) ([d404777](d4047774)) * optimize gRPC writer with zero-copy and lazy allocation (#13481) ([df64147](df641476)) </details>
No description provided.