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 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).