upload-pack: send keepalive while feeding pack-objects#2160
Open
spkrka wants to merge 1 commit into
Open
Conversation
When upload-pack feeds revision OIDs to pack-objects via pipe, there is a gap where no data is sent to the HTTP client. With many wants (e.g. 50k+ refs), this pipe feeding can take seconds as write() blocks on the pipe when the kernel buffer fills up. Meanwhile, an HTTP server sitting in front of git (e.g. Apache) may time out waiting for CGI output and kill the process. The existing keepalive mechanism in create_pack_file's poll loop handles keepalive after pack-objects starts producing output, but does not cover the earlier pipe feeding phase. Extend keepalive coverage by sending empty sideband packets during the pipe feeding loops, using the same "0005\1" format that the poll loop already uses. This reuses the existing uploadpack.keepalive config with no new options required. Signed-off-by: Kristofer Karlsson <krka@spotify.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.
When upload-pack feeds revision OIDs to pack-objects via pipe, there is a gap where no data is sent to the HTTP client. With many wants (e.g. 50k+ refs), this pipe feeding can take seconds as write() blocks on the pipe when the kernel buffer fills up. Meanwhile, an HTTP server sitting in front of git (e.g. Apache) may time out waiting for CGI output and kill the process.
The existing keepalive mechanism in create_pack_file's poll loop handles keepalive after pack-objects starts producing output, but does not cover the earlier pipe feeding phase.
This extends keepalive coverage by sending empty sideband packets during the pipe feeding loops, using the same
0005\1format that the poll loop already uses. This reuses the existinguploadpack.keepaliveconfig with no new options required.cc: Jeff King peff@peff.net
cc: Patrick Steinhardt ps@pks.im