Thread (3 messages) flat view 3 messages, 2 authors, 2017-07-12

Re: git gc --auto aquires *.lock files that make a subsequent git-fetch error out

From: Jeff King <hidden>
Date: 2017-07-12 20:43:14

On Wed, Jul 12, 2017 at 10:30:25PM +0200, Ævar Arnfjörð Bjarmason wrote:
quoted
Is it really "in a row" that's a problem? The second fetch should not
begin until the first one is done, including until its auto-gc exits.
And even with background gc, we do the ref-locking operations first, due
to 62aad1849 (gc --auto: do not lock refs in the background,
2014-05-25).
quoted
I happen to run into this on a git.git which has a lot of remotes (most
people on-list whose remotes I know about) and fetch them in parallel:

    $ git config alias.pfetch
    !parallel 'git fetch {}' ::: $(git remote)
Ah, so it's not in a row. It's parallel. Then yes, you may run into
problems with the gc locks conflicting with real operations. This isn't
really unique to fetch. Any simultaneous operation can run into problems
(e.g., on a busy server repo you may see conflicts between pack-refs and
regular pushes).
This is what I thought at first, and I've only encountered the issue in
this parallel mode (mainly because it's tedious to reproduce). But I
think the traces below show that it would happen with "git fetch --all"
& "git remote update" as well, so the parallel invocations didn't
matter.

I.e. I'd just update my first remote, then git-gc would start in the
background and lock refs for my other remotes, which I'd then fail to
update.
No, it should be OK because of the commit I mentioned at the top of the
quoted section. Each one runs sequentially.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help