Implement streaming for ISO file reads to reduce memory usage#101
Merged
Implement streaming for ISO file reads to reduce memory usage#101
Conversation
Previously, files read from ISOs were loaded entirely into memory, causing 500MB+ peak memory usage for large files like initrd. Changes: - Add stream_from_iso() method that reads in 32MB chunks via mpsc channel - Add stream_initrd_with_firmware() for streaming initrd + firmware concatenation - Update route handlers to use ReceiverStream for streaming responses - Use spawn_blocking for synchronous ISO reads (fixes async runtime blocking) - Remove old read_from_iso() and read_initrd_with_firmware() methods Benefits: - Peak memory reduced from file size to ~64MB (2 chunks in flight) - Better time-to-first-byte (streaming starts after first chunk) - Improved concurrency (doesn't block async runtime) - Content-Length header still provided for all responses Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Restore debug logging for file-not-found errors in ISO reads - Add comments explaining why ISO is opened twice (FileBlockIo is not Send) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The "Marked MAC ... as completed" message was logged in both the route handler and the service layer. Removed the route handler copy since the service layer is the appropriate location for this log. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
stream_from_iso()andstream_initrd_with_firmware()methodsspawn_blocking+ mpsc channel for async-safe streamingread_from_iso()methodsProblem
Files read from ISOs were loaded entirely into memory, causing 500MB+ peak memory usage for large files like initrd.
Solution
Stream files in 32MB chunks via bounded mpsc channel (2 chunks max in flight).
Benefits
Test plan
cargo buildpassescargo testpasses (62 tests)cargo clippyclean🤖 Generated with Claude Code