Repository navigation
Preserve streamed cover upload trailers across HTTP transports - #53
Merged
Merged
Conversation
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
Preserve initially declared, safe request trailers for nonempty streamed cover uploads. Both cloning boundaries now publish into their owned trailer maps before successful body EOF, including HTTP/3 replacement maps, without buffering the complete upload.
Validation
Scope
This is website upload/checksum compatibility, not a traffic-identification result or a claim that dropping HTTP trailers is universally invalid. Only initially declared safe fields are covered; empty-content exchanges, late unannounced values, and custom transports that deep-clone requests again are outside this guarantee. Custom bodies must finalize trailers before Read returns EOF, not mutate them concurrently from Close.
No dependency pins, default protocol selection, tunnel authentication, published version, release, registry, remote deployment or canceled formal capture campaign changed.
CI observation
The first PR attempt passed 12 jobs, but macOS job 111109993429 failed in the existing HTTP/3 metadata final-response leaf with a 2.00-second QUIC idle timeout. No upload-trailer assertion or cleanup failure was reported; the actual cause remains unattributed. The original failure log is retained. No timeout was relaxed and no test was skipped.
On unchanged source, the same shuffle seed (1790995285104986000) passed the whole metadata top 20 times with race detection and then the full tunnel package without race detection (37.085 seconds). These local observations do not reproduce the CI host/load or prove why it failed. A single bounded re-run of only the failed macOS job on the same PR head passed (job 111111165743, full tunnel package 35.572 seconds); CI attempt 2 completed successfully. The other ten CI jobs carry their attempt-1 execution timestamps rather than representing ten new executions; CodeQL and netem passed independently on attempt 1. This retry does not identify the cause of the original timeout.