From: Shawn Pearce <spearce@spearce.org>
To: Eran Tromer <git2eran@tromer.org>
Cc: Nicolas Pitre <nico@cam.org>, Junio C Hamano <junkio@cox.net>,
git@vger.kernel.org
Subject: Re: fetching packs and storing them as packs
Date: Thu, 26 Oct 2006 23:00:54 -0400 [thread overview]
Message-ID: <20061027030054.GB28407@spearce.org> (raw)
In-Reply-To: <45417205.6020805@tromer.org>
Eran Tromer <git2eran@tromer.org> wrote:
> > Unfortunately I don't have a solution. I tried to come up with
> > one but didn't. :-)
>
> Here's one way to do it.
> Change git-repack to follow references under $GIT_DIR/tmp/refs/ too.
> To receive or fetch a pack:
> 1. Add references to the new heads in
> `mktemp $GIT_DIR/tmp/refs/XXXXXX`.
> 2. Put the new .pack under $GIT_DIR/objects/pack/.
> 3. Put the new .idx under $GIT_DIR/objects/pack/.
> 4. Update the relevant heads under $GIT_DIR/refs/.
> 5. Delete the references from step 1.
>
> This is repack-safe and never corrupts the repo. The worst-case failure
> mode is if you die before cleaning the refs from $GIT_DIR/tmp/refs. That
> may mean some packed objects will never be removed by "repack -a -d"
> even if they lose all references from $GIT_DIR/refs, so do "tmpwatch -m
> 240 $GIT_DIR/tmp/refs" to take care of that.
That was actually my (and also Sean's) solution. Except I would
put the temporary refs as "$GIT_DIR/refs/ref_XXXXXX" as this is
less code to change and its consistent with how temporary loose
objects are created.
Unfortunately it does not completely work.
What happens when the incoming pack (steps #2 and #3) takes 15
minutes to upload (slow ADSL modem, lots of objects) and the
background repack process sees those temporary refs and starts
trying to include those objects? It can't walk the DAG that those
refs point at because the objects aren't in the current repository.
From what I know of that code the pack-objects process will fail to
find the object pointed at by the ref, rescan the packs directory,
find no new packs, look for the object again, and abort over the
"corruption".
OK so the repository won't get corrupted but the repack would be
forced to abort.
Another issue I just thought about tonight is we may need a
count-packs utility that like count-objects lists the number
of active packs and their total size. If we start hanging onto
every pack we receive over the wire the pack directory is going to
grow pretty fast and we'll need a way to tell us when its time to
`repack -a -d`.
--
next prev parent reply other threads:[~2006-10-27 3:01 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-26 3:44 fetching packs and storing them as packs Nicolas Pitre
2006-10-26 14:45 ` Eran Tromer
[not found] ` <Pine.LNX.4.64.0610261105200.12418@xanadu.home>
2006-10-26 22:09 ` Eran Tromer
2006-10-27 0:50 ` Nicolas Pitre
2006-10-27 1:42 ` Shawn Pearce
2006-10-27 2:38 ` Sean
2006-10-27 6:57 ` Junio C Hamano
2006-10-27 17:23 ` Nicolas Pitre
2006-10-27 2:41 ` Nicolas Pitre
2006-10-27 2:42 ` Eran Tromer
2006-10-27 3:00 ` Shawn Pearce [this message]
2006-10-27 3:13 ` Sean
2006-10-27 3:20 ` Jakub Narebski
2006-10-27 3:27 ` Sean
2006-10-27 4:03 ` Eran Tromer
2006-10-27 4:42 ` Shawn Pearce
2006-10-27 7:42 ` Alex Riesen
2006-10-27 7:52 ` Shawn Pearce
2006-10-27 8:08 ` Alex Riesen
2006-10-27 8:13 ` Shawn Pearce
2006-10-27 14:27 ` Nicolas Pitre
2006-10-27 14:38 ` Petr Baudis
2006-10-27 14:48 ` J. Bruce Fields
2006-10-27 15:03 ` Petr Baudis
2006-10-27 16:04 ` J. Bruce Fields
2006-10-27 16:05 ` J. Bruce Fields
2006-10-27 18:56 ` Junio C Hamano
2006-10-27 20:22 ` Linus Torvalds
2006-10-27 21:53 ` Junio C Hamano
2006-10-28 3:42 ` Shawn Pearce
2006-10-28 4:09 ` Junio C Hamano
2006-10-28 4:18 ` Linus Torvalds
2006-10-28 5:42 ` Junio C Hamano
2006-10-28 7:21 ` Shawn Pearce
2006-10-28 8:40 ` Shawn Pearce
2006-10-28 19:15 ` Junio C Hamano
2006-10-29 3:50 ` Shawn Pearce
2006-10-29 4:29 ` Junio C Hamano
2006-10-29 4:38 ` Shawn Pearce
2006-10-29 5:16 ` Junio C Hamano
2006-10-29 5:21 ` Shawn Pearce
2006-10-28 17:59 ` Linus Torvalds
2006-10-28 18:34 ` Junio C Hamano
2006-10-28 22:31 ` Eran Tromer
2006-10-29 3:38 ` Shawn Pearce
2006-10-29 3:48 ` Jakub Narebski
2006-10-29 3:52 ` Shawn Pearce
2006-10-29 7:47 ` [PATCH] send-pack --keep: do not explode into loose objects on the receiving end Junio C Hamano
2006-10-29 7:56 ` Shawn Pearce
2006-10-29 8:05 ` Junio C Hamano
2006-10-30 1:44 ` Nicolas Pitre
Reply instructions:
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:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061027030054.GB28407@spearce.org \
--to=spearce@spearce.org \
--cc=git2eran@tromer.org \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=nico@cam.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* 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.
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 NNTP newsgroup(s).