From: Nick Hengeveld <nickh@reactrix.com>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/3] Support for partial HTTP transfers
Date: Mon, 26 Sep 2005 17:09:31 -0700 [thread overview]
Message-ID: <20050927000931.GA15615@reactrix.com> (raw)
In-Reply-To: <7vd5mvedcs.fsf@assigned-by-dhcp.cox.net>
On Mon, Sep 26, 2005 at 02:19:31PM -0700, Junio C Hamano wrote:
> If rename() succeeds then tmpfile is no more. If rename() fails
> because there were no tmpfile to begin with, it is not an error
> (i.e. you are not recovering) and that case there would not be
> tmpfile either. Otherwise, if tmpfile still remains to unlink()
> because rename() failed for any other reason, wouldn't you
> rather report it as an error and abort?
I didn't see that as a fatal condition since the transfer would still
take place, albeit a full transfer rather than a partial one. It does
seem worth at least reporting it as a warning though. If a previous
tmpfile exists and both the rename and unlink fail, the subsequent
tmpfile open will also fail - unlikely but probably also worth
detecting and reporting.
> I wonder what happens if by mistake or intentionally we run two
> http-fetch instances simultaneously. IIRC, the current code is
> safe -- the resulting object database will have the object file
> fetched by one of the instance, and the updating of ref is done
> via write_ref_sha1(), so it also is safe. But your change may
> introduce an interesting case where one creates a tmpfile, the
> other one moves it to prevfile and starts using its partial
> contents, and possibly gets confused -- it will probabaly fail
> at the end detecting inconsistent object so it is probably not a
> big loss.
How about using mkstemp on the prev file to keep multiple instances
from stepping on each other? Since O_CREAT | O_EXCL is used to
open the tmpfile, only one instance will be able to succeed and
continue.
> > + /* Reset inflate/SHA1 if there was an error reading the previous temp
> > + file; also rewind to the beginning of the local file. */
>
> Maybe not just rewind but truncate as well? It probably does
> not matter in practice much, but previous representation your
> fetch was interrupted in the middle could have been much larger
> than the representation you are slurping right now.
Good point, I'll update the patch.
> There was a discussion about an object file of the same SHA1 and
> the same contents can have different compressed representations
> (we hash then compress so the resulting filesize depends on the
> compression level without affecting the contents of the object).
> In a "doctor, it hurts when I do this -- don't do it, then" kind
> of corner case, a DNS rotated pair of webservers could be
> serving the same object in different representations and you may
> get interrupted while fetching from one, and restart the
> transfer from the other. The SHA1 check at the end hopefully
> would catch this kind of situation, and that round of http-fetch
> would fail -- the user needs to re-run the fetch so it is not a
> big loss, but it is something to keep in mind.
That's an annoying case, all right... Would it be worth including a
full retry if a partial failed the SHA1 check?
--
For a successful technology, reality must take precedence over public
relations, for nature cannot be fooled.
next prev parent reply other threads:[~2005-09-27 0:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-26 17:52 [PATCH 2/3] Support for partial HTTP transfers Nick Hengeveld
2005-09-26 21:19 ` Junio C Hamano
2005-09-27 0:09 ` Nick Hengeveld [this message]
2005-09-27 5:46 ` Junio C Hamano
2005-09-27 15:36 ` Nick Hengeveld
2005-09-27 17:09 ` Junio C Hamano
2005-09-27 17:19 ` Nick Hengeveld
2005-09-27 22:24 ` Junio C Hamano
2005-09-26 22:23 ` Daniel Barkalow
2005-09-27 10:35 ` sf
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=20050927000931.GA15615@reactrix.com \
--to=nickh@reactrix.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/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 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.