From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] pack-objects: do not reuse packfiles without --delta-base-offset
Date: Fri, 4 Apr 2014 17:48:49 -0400 [thread overview]
Message-ID: <20140404214848.GA23666@sigill.intra.peff.net> (raw)
In-Reply-To: <xmqqfvlvvdfi.fsf@gitster.dls.corp.google.com>
On Wed, Apr 02, 2014 at 10:39:13AM -0700, Junio C Hamano wrote:
> > However, it's possible that the other side cannot read our
> > packfile verbatim. For example, we may have objects stored
> > as OFS_DELTA, but the client is an antique version of git
> > that only understands REF_DELTA. We negotiate this
> > capability over the fetch protocol. A normal pack-objects
> > run will convert OFS_DELTA into REF_DELTA on the fly, but
> > the "reuse pack" code path never even looks at the objects.
>
> The above makes it sound like "reuse pack" codepath is broken.
It is broken (without this patch), though in practice only for ancient
(pre-1.4.x) clients.
> Is it too much hassle to peek at the initial bytes of each object to
> see how they are encoded? Would it be possible to convert OFS_DELTA to
> REF_DELTA on the fly on that codepath as well, instead of disabling
> the reuse altogether?
It's a mistake to peek ahead of time. Part of the point of the
pack-reuse optimization is to start sending out bytes as soon as
possible, since the network is quite often the bottleneck. So we would
not want to look through all of the to-be-sent data before sending out
the first byte.
We could convert OFS_DELTA to REF_DELTA on the fly. That _may_ have a
performance impact. Right now, we are basically doing the equivalent of
sendfile(), and conversion would involve iterating through each object
and examining the header. I think that's probably not too bad, though.
The most expensive part of that, stepping to the next object, requires
scanning through the zlib packets, but we should be able to use the
revidx to avoid that.
I'm not sure it's even worth the code complexity, though. The non-reuse
codepath is not that much slower, and it should be extremely rare for a
client not to support OFS_DELTA these days.
-Peff
next prev parent reply other threads:[~2014-04-04 21:49 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-02 6:39 [PATCH] pack-objects: do not reuse packfiles without --delta-base-offset Jeff King
2014-04-02 17:39 ` Junio C Hamano
2014-04-04 21:48 ` Jeff King [this message]
2014-04-04 22:28 ` Junio C Hamano
2014-04-04 23:13 ` Jeff King
2014-04-07 17:15 ` Junio C Hamano
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=20140404214848.GA23666@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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).