git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Simultaneous gc and repack

From
David Turner <novalis@novalis.org>
Date
Apr 13, 2017, 17:31 UTC
Message-ID
<1492104698.1527.79.camel@novalis.org>

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.

Next: Jacob Keller
Message 1 of 7 in “Simultaneous gc and repack”
  1. David TurnerApr 13, 2017
  2. Jacob KellerApr 13, 2017
  3. Martin FickApr 13, 2017
  4. David TurnerApr 13, 2017
  5. Jacob KellerApr 13, 2017
  6. Martin FickApr 13, 2017
  7. David TurnerApr 13, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.