All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: David Lin <davidzylin@gmail.com>
Cc: git@vger.kernel.org, gitster@pobox.com, davidlin@stripe.com,
	stolee@gmail.com
Subject: Re: [PATCH v2] cache-tree: fix inverted object existence check in cache_tree_fully_valid
Date: Tue, 7 Apr 2026 07:15:12 +0200	[thread overview]
Message-ID: <adSS4GJyBoB2rY4s@pks.im> (raw)
In-Reply-To: <20260406192711.68870-1-davidlin@stripe.com>

On Mon, Apr 06, 2026 at 03:27:11PM -0400, David Lin wrote:
> The negation in front of the object existence check in
> cache_tree_fully_valid() was lost in 062b914c84 (treewide: convert
> users of `repo_has_object_file()` to `has_object()`, 2025-04-29),
> turning `!repo_has_object_file(...)` into `has_object(...)` instead
> of `!has_object(...)`.
> 
> This makes cache_tree_fully_valid() always report the cache tree as
> invalid when objects exist (the common case), forcing callers like
> write_index_as_tree() to call cache_tree_update() on every
> invocation.  An odb_has_object() check inside update_one() avoids a
> full tree rebuild, but the unnecessary call still pays the cost of
> opening an ODB transaction and, in partial clones, a promisor remote
> check.
> 
> Restore the missing negation and add a test that verifies write-tree
> takes the cache-tree shortcut when the cache tree is valid.

Oh, indeed, thanks for the fix.

I also checked whether there's any other such case in the commit in
question, but didn't spot any.

> diff --git a/cache-tree.c b/cache-tree.c
> index 60bcc07c3b..9fe057355c 100644
> --- a/cache-tree.c
> +++ b/cache-tree.c
> @@ -238,7 +238,7 @@ int cache_tree_fully_valid(struct cache_tree *it)
>  	if (!it)
>  		return 0;
>  	if (it->entry_count < 0 ||
> -	    odb_has_object(the_repository->objects, &it->oid,
> +	    !odb_has_object(the_repository->objects, &it->oid,
>  			   HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
>  		return 0;
>  	for (i = 0; i < it->subtree_nr; i++) {

Yup, this looks obviously good to me.

Patrick

      reply	other threads:[~2026-04-07  5:15 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-06 15:14 [PATCH] cache-tree: fix inverted object existence check in cache_tree_fully_valid David Lin
2026-04-06 18:10 ` Derrick Stolee
2026-04-06 18:49   ` Junio C Hamano
2026-04-06 19:27     ` [PATCH v2] " David Lin
2026-04-07  5:15       ` Patrick Steinhardt [this message]

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=adSS4GJyBoB2rY4s@pks.im \
    --to=ps@pks.im \
    --cc=davidlin@stripe.com \
    --cc=davidzylin@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=stolee@gmail.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 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.