All of lore.kernel.org
 help / color / mirror / Atom feed
* Simultaneous gc and repack
@ 2017-04-13 17:31 David Turner
  2017-04-13 18:03 ` Jacob Keller
  0 siblings, 1 reply; 7+ messages in thread
From: David Turner @ 2017-04-13 17:31 UTC (permalink / raw)
  To: git; +Cc: Christian Couder

Git gc locks the repository (using a gc.pid file) so that other gcs
don't run concurrently. But git repack doesn't respect this lock, so
it's possible to have a repack running at the same time as a gc.  This
makes the gc sad when its packs are deleted out from under it with:
"fatal: ./objects/pack/pack-$sha.pack cannot be accessed".  Then it
dies, leaving a large temp file hanging around.

Does the following seem reasonable?

1. Make git repack, by default, check for a gc.pid file (using the same
logic as git gc itself does).
2. Provide a --force option to git repack to ignore said check.
3. Make git gc provide that --force option when it calls repack under
its own lock.

This came up because Gitlab runs a repack after every N pushes and a gc
after every M commits, where M >> N.  Sometimes, when pushes come in
rapidly, the repack catches the still-running gc and the above badness
happens.  At least, that's my understanding: I don't run our Gitlab
servers, but I talked to the person who does and that's what he said.

Of course, Gitlab could do its own locking, but the general approach
seems like it would help other folks too.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-04-13 19:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-13 17:31 Simultaneous gc and repack David Turner
2017-04-13 18:03 ` Jacob Keller
2017-04-13 18:08   ` Martin Fick
2017-04-13 18:28     ` David Turner
2017-04-13 18:35       ` Jacob Keller
2017-04-13 18:36       ` Martin Fick
2017-04-13 19:05         ` David Turner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.