fetch-pack: trace packfile URI downloads
When a protocol v2 fetch includes packfile URIs, the client downloads each advertised pack in a separate http-fetch process. Existing Trace2 regions cover negotiation, but not the time spent downloading these packs or the number of advertised URIs. Add a Trace2 region around the packfile URI download loop and record the number of URIs. This makes the cost of downloading external packs visible without emitting an event for each pack. Extend the existing packfile URI test to verify the region and count. Signed-off-by: Ted Nyman <tnyman@openai.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>main
parent
9a0c4701dc
commit
7129d77f1c
12
fetch-pack.c
12
fetch-pack.c
|
|
@ -1886,6 +1886,13 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
|
|||
}
|
||||
}
|
||||
|
||||
if (packfile_uris.nr) {
|
||||
trace2_region_enter("fetch-pack", "packfile-uris",
|
||||
the_repository);
|
||||
trace2_data_intmax("fetch-pack", the_repository,
|
||||
"packfile-uris/count", packfile_uris.nr);
|
||||
}
|
||||
|
||||
for (i = 0; i < packfile_uris.nr; i++) {
|
||||
int j;
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
|
|
@ -1936,6 +1943,11 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
|
|||
repo_get_object_directory(the_repository),
|
||||
packname));
|
||||
}
|
||||
|
||||
if (packfile_uris.nr)
|
||||
trace2_region_leave("fetch-pack", "packfile-uris",
|
||||
the_repository);
|
||||
|
||||
string_list_clear(&packfile_uris, 0);
|
||||
strvec_clear(&index_pack_args);
|
||||
|
||||
|
|
|
|||
|
|
@ -1223,7 +1223,7 @@ configure_exclusion () {
|
|||
|
||||
test_expect_success 'part of packfile response provided as URI' '
|
||||
P="$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
|
||||
rm -rf "$P" http_child log &&
|
||||
rm -rf "$P" http_child log trace2 &&
|
||||
|
||||
git init "$P" &&
|
||||
git -C "$P" config "uploadpack.allowsidebandall" "true" &&
|
||||
|
|
@ -1238,10 +1238,15 @@ test_expect_success 'part of packfile response provided as URI' '
|
|||
configure_exclusion "$P" other-blob >h2 &&
|
||||
|
||||
GIT_TRACE=1 GIT_TRACE_PACKET="$(pwd)/log" GIT_TEST_SIDEBAND_ALL=1 \
|
||||
GIT_TRACE2_EVENT="$(pwd)/trace2" \
|
||||
git -c protocol.version=2 \
|
||||
-c fetch.uriprotocols=http,https \
|
||||
clone "$HTTPD_URL/smart/http_parent" http_child &&
|
||||
|
||||
test_grep \"event\":\"region_enter\".*\"label\":\"packfile-uris\" trace2 &&
|
||||
test_grep \"key\":\"packfile-uris/count\",\"value\":\"2\" trace2 &&
|
||||
test_grep \"event\":\"region_leave\".*\"label\":\"packfile-uris\" trace2 &&
|
||||
|
||||
# Ensure that my-blob and other-blob are in separate packfiles.
|
||||
for idx in http_child/.git/objects/pack/*.idx
|
||||
do
|
||||
|
|
|
|||
Loading…
Reference in New Issue