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

Re: git receive-pack deletes refs one at a time?

From
Nasser Grainawi <nasser@codeaurora.org>
Date
Jun 13, 2019, 19:46 UTC
Message-ID
<34FD9B2B-D53A-4CD2-AEF0-3AFAF1586EB7@codeaurora.org>
In-Reply-To
<20190613174331.GA19795@sigill.intra.peff.net>
Show 26 quoted lines
> On Jun 13, 2019, at 11:43 AM, Jeff King <peff@peff.net> wrote:
> 
> On Thu, Jun 13, 2019 at 11:33:40AM -0600, Nasser Grainawi wrote:
> 
>> I have a situation where I need to delete 100k+ refs on 15+ separate
>> hosts/disks. This setup is using Gerrit replication, so I can trigger
>> it all on one host and it will push the deletes to the rest (all
>> running git-daemon v2.18.0 with receive-pack enabled). All the refs
>> being deleted on the receiving ends are packed.
>> 
>> What I see is the packed-refs file getting locked/updated over and
>> over for each ref. I had assumed it would do something more like
>> 'update-ref --stdin' and do a bulk removal of refs. Am I seeing the
>> correct behavior? If yes, is there a specific reason it works this way
>> or is "bulk delete through push" just a feature that hasn't been
>> implemented yet?
> 
> The underlying ref code is smart enough to coalesce all of the deletions
> in a single transaction into a single write of the packed-refs file.
> 
> But historically, pushes do not do a single ref transaction because we
> would allow the push for one ref to succeed while others failed. Later,
> we added an "atomic" mode that does it all in a single transaction.
> 
> Try with "git push --atomic", which should be able to do it in a single
> write.
Thanks!
Is there a way to get the bulk behavior without the all-or-nothing behavior?
-- 
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, 
a Linux Foundation Collaborative Project
Previous: Jeff KingNext: Jeff King
Message 3 of 4 in “git receive-pack deletes refs one at a time?”
  1. Nasser GrainawiJun 13, 2019
  2. Jeff KingJun 13, 2019
  3. Nasser GrainawiJun 13, 2019
  4. Jeff KingJun 13, 2019

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.