From: Patrick Steinhardt <ps@pks.im>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Karthik Nayak <karthik.188@gmail.com>,
Taylor Blau <me@ttaylorr.com>
Subject: Re: [PATCH] commit: detect commits that exist in commit-graph but not in the ODB
Date: Thu, 19 Oct 2023 08:45:33 +0200 [thread overview]
Message-ID: <ZTDQjangLsQ1cSJl@tanuki> (raw)
In-Reply-To: <xmqqjzrlhzci.fsf@gitster.g>
[-- Attachment #1: Type: text/plain, Size: 2627 bytes --]
On Tue, Oct 17, 2023 at 11:34:53AM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
>
> > Fair point indeed. The following is a worst-case scenario benchmark of
> > of the change where we do a full topological walk of all reachable
> > commits in the graph, executed in linux.git. We parse commit parents via
> > `repo_parse_commit_gently()`, so the new code path now basically has to
> > check for object existence of every reachable commit:
> > ...
> > The added check does lead to a performance regression indeed, which is
> > not all that unexpected. That being said, the commit-graph still results
> > in a significant speedup compared to the case where we don't have it.
>
> Yeah, I agree that both points are expected. An extra check that is
> much cheaper than the full parsing is paying a small price to be a
> bit more careful than before. The question is if the price is small
> enough. I am still not sure if the extra carefulness is warranted
> for all normal cases to spend 30% extra cycles.
>
> Thanks.
Well, seen in contexts like the thread that spawned this discussion I
think it's preferable to take a relatively smaller price compared to
disabling the commit graph entirely in some situations. With that in
mind, personally I'd be happy with either of two outcomes here:
- We take the patch I proposed as a hardening measure, which allows
us to use the commit graph in basically any situation where we
could parse objects from the ODB without any downside except for a
performance hit.
- We say that corrupt repositories do not need to be accounted for
when using metadata caches like the commit-graph. That would mean
in consequence that for the `--missing` flag we would not have to
disable commit graphs.
The test failure that was exposed in Karthik's test only stems from the
fact that we manually corrupt the repository and is not specific to the
`--missing` flag. This is further stressed by the new test aded in my
own patch, as we can trigger a similar bug when not using `--missing`.
For end users, object pruning would happen either via git-gc(1) or via
git-maintenance(1), and both of them do know to update commit graphs
already. This should significantly decrease the chance that such stale
commit graphs would be found out there in the wild, but it's still not
impossible of course. Especially in cases where you use lower-level
commands like git-repack(1) with cruft packs or git-prune(1), which is
often the case for Git hosters, the risk is higher though.
Patrick
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-10-19 6:45 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-09 10:55 [PATCH 0/3] rev-list: add support for commits in `--missing` Karthik Nayak
2023-10-09 10:55 ` [PATCH 1/3] revision: rename bit to `do_not_die_on_missing_objects` Karthik Nayak
2023-10-09 10:55 ` [PATCH 2/3] rev-list: move `show_commit()` to the bottom Karthik Nayak
2023-10-09 10:55 ` [PATCH 3/3] rev-list: add commit object support in `--missing` option Karthik Nayak
2023-10-09 22:02 ` [PATCH 0/3] rev-list: add support for commits in `--missing` Junio C Hamano
2023-10-10 6:19 ` Patrick Steinhardt
2023-10-10 17:09 ` Junio C Hamano
2023-10-11 10:37 ` Karthik Nayak
2023-10-11 16:54 ` Junio C Hamano
2023-10-12 10:44 ` Karthik Nayak
2023-10-12 11:04 ` Patrick Steinhardt
2023-10-12 13:23 ` Karthik Nayak
2023-10-12 16:17 ` Junio C Hamano
2023-10-13 5:53 ` Patrick Steinhardt
2023-10-13 8:38 ` Patrick Steinhardt
2023-10-13 12:37 ` [PATCH] commit: detect commits that exist in commit-graph but not in the ODB Patrick Steinhardt
2023-10-13 18:21 ` Junio C Hamano
2023-10-17 6:37 ` Patrick Steinhardt
2023-10-17 18:34 ` Junio C Hamano
2023-10-19 6:45 ` Patrick Steinhardt [this message]
2023-10-19 8:25 ` Patrick Steinhardt
2023-10-19 17:16 ` Junio C Hamano
2023-10-20 10:00 ` Jeff King
2023-10-20 17:35 ` Junio C Hamano
2023-10-23 10:15 ` Patrick Steinhardt
2023-10-13 17:07 ` [PATCH 0/3] rev-list: add support for commits in `--missing` Junio C Hamano
2023-10-12 16:26 ` Junio C Hamano
2023-10-16 10:38 ` [PATCH v2 " Karthik Nayak
2023-10-16 10:38 ` [PATCH v2 1/3] revision: rename bit to `do_not_die_on_missing_objects` Karthik Nayak
2023-10-16 10:38 ` [PATCH v2 2/3] rev-list: move `show_commit()` to the bottom Karthik Nayak
2023-10-16 10:38 ` [PATCH v2 3/3] rev-list: add commit object support in `--missing` option Karthik Nayak
2023-10-16 16:24 ` [PATCH v2 0/3] rev-list: add support for commits in `--missing` Junio C Hamano
2023-10-16 19:01 ` Karthik Nayak
2023-10-16 20:33 ` Junio C Hamano
2023-10-19 12:10 ` [PATCH v3 " Karthik Nayak
2023-10-19 12:10 ` [PATCH v3 1/3] revision: rename bit to `do_not_die_on_missing_objects` Karthik Nayak
2023-10-19 12:10 ` [PATCH v3 2/3] rev-list: move `show_commit()` to the bottom Karthik Nayak
2023-10-19 12:10 ` [PATCH v3 3/3] rev-list: add commit object support in `--missing` option Karthik Nayak
2023-10-19 22:05 ` Junio C Hamano
2023-10-19 23:35 ` Junio C Hamano
2023-10-20 11:14 ` Karthik Nayak
2023-10-20 14:47 ` Karthik Nayak
2023-10-20 17:45 ` Junio C Hamano
2023-10-20 16:41 ` Junio C Hamano
2023-10-24 11:34 ` Karthik Nayak
2023-10-24 12:26 ` [PATCH v4 0/3] rev-list: add support for commits in `--missing` Karthik Nayak
2023-10-24 12:26 ` [PATCH v4 1/3] revision: rename bit to `do_not_die_on_missing_objects` Karthik Nayak
2023-10-24 12:26 ` [PATCH v4 2/3] rev-list: move `show_commit()` to the bottom Karthik Nayak
2023-10-24 12:26 ` [PATCH v4 3/3] rev-list: add commit object support in `--missing` option Karthik Nayak
2023-10-24 17:45 ` Junio C Hamano
2023-10-25 0:35 ` Junio C Hamano
2023-10-25 9:34 ` Karthik Nayak
2023-10-25 6:40 ` Patrick Steinhardt
2023-10-26 12:37 ` Junio C Hamano
2023-10-26 10:11 ` [PATCH v5 0/3] rev-list: add support for commits in `--missing` Karthik Nayak
2023-10-26 10:11 ` [PATCH v5 1/3] revision: rename bit to `do_not_die_on_missing_objects` Karthik Nayak
2023-10-26 10:11 ` [PATCH v5 2/3] rev-list: move `show_commit()` to the bottom Karthik Nayak
2023-10-26 10:11 ` [PATCH v5 3/3] rev-list: add commit object support in `--missing` option Karthik Nayak
2023-10-27 6:25 ` Patrick Steinhardt
2023-10-27 7:54 ` Karthik Nayak
2023-10-27 7:59 ` Karthik Nayak
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=ZTDQjangLsQ1cSJl@tanuki \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=karthik.188@gmail.com \
--cc=me@ttaylorr.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).