From: Mike Hommey <email@example.com>
Subject: A couple issues with check-connectivity on fetch
Date: Mon, 3 May 2021 06:53:16 +0900 [thread overview]
Message-ID: <firstname.lastname@example.org> (raw)
In the context of a remote helper using the `import` capability, or one
using the `fetch` capability but the without `check-connectivity`
capability, a large amount of time may be spent in check_connected() on
fetch, on large repos with a large number of fetched refs that also
happen not to actually add commits.
[A little bit of background: in git-cinnabar, which allows to talk to
Mercurial repositories, tags are fetched from a different remote, so
when one wants to fetch tags, the transport system never calls `import`
because the `list` ended up giving a large list of refs with resolved
sha1s, all of which are already locally available]
The first thing I noticed is that check_connected() is called twice
during the fetch: once from check_exist_and_connected(), and once from
store_updated_refs(). When each call is slow, it makes things doubly so.
I'm not sure why check_connected() is called twice like this. It seems
it could be an oversight, but I could be missing something.
The second thing is that git-cinnabar uses the `import` capability,
and in that case, the transport layer never tried to use the
`check-connectivity` capability. I'm not sure whether the capability
should be exposed there, or if the checks should be skipped altogether
assuming `import` helpers use `fast-import` (although, technically,
git-cinnabar doesn't use the one provided by git).
But in any case, the `check-connectivity` capability doesn't actually
matter because no `fetch` or `import` even happens: fetch only does a
`list` and uses that result. In this case, it would seem
`check_connected` should be skipped entirely.
Here is a testcase that takes >20s to fetch on my machine (see
instructions at the beginning of the file)
(the equivalent takes > 1 minute with git-cinnabar because of the
extra refs for git-cinnabar's metadata ; note the testcase is using
the `fetch` capability)
A workaround is to create temporary refs for those tags. That makes
check_connected()'s git-rev-list work quickly, and the fetch takes < 1s.
I'm ready to send patches to improve the situation, but I wanted some
feedback first about the right things that would need to change.
reply other threads:[~2021-05-02 22:21 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).