Git development
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/5] setup: detangle loading of loose object maps
Date: Tue, 4 Aug 2026 09:21:28 +0200	[thread overview]
Message-ID: <anGS-IOKHMo5VUJm@pks.im> (raw)
In-Reply-To: <xmqqh5lo6xi2.fsf@gitster.g>

On Fri, Jul 24, 2026 at 11:41:41AM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> 
> > When a repository is configured to use a compatibility hash function
> > then we load the loose object map when we initialize the repository.
> > This object map provides the mappings between the canonical object hash
> > and the compatibility object hash.
> >
> > Loading the object map happens in `repo_set_compat_hash_algo()`, which
> > calls `repo_read_loose_object_map()` in case the compatibility object
> > hash is non-zero. This setup sequence has two major downsides:
> >
> >   - We assume that the primary object database is the "files" object
> >     database so that we can extract its "loose" backend. This stops
> >     working with pluggable object databases.
> 
> I am not sure if I understand this sentence, especially "we can
> extract its loose backend" part.  Do you mean 'extract the object
> map from the loose backend'?  Or something else?

Yeah, this is a bit awkward. Rewritten like this:

  - We assume that the primary object database is the "files" object
    database and unconditionally downcast it. This will BUG in case a
    different object database type was used together with a compat hash
    algorithm.

> > @@ -112,14 +115,10 @@ int repo_read_loose_object_map(struct repository *repo)
> >  {
> >  	struct odb_source *source;
> >  
> > -	if (!should_use_loose_object_map(repo))
> > -		return 0;
> > -
> >  	odb_prepare_alternates(repo->objects);
> > -
> >  	for (source = repo->objects->sources; source; source = source->next) {
> >  		struct odb_source_files *files = odb_source_files_downcast(source);
> > -		if (load_one_loose_object_map(files->loose) < 0)
> > +		if (loose_object_map_load(files->loose) < 0)
> >  			return -1;
> 
> If this particular source in the list of sources is not backed by
> the files backend, would downcast signal the fact (e.g., by
> returning NULL) so that we can skip the next call instead?

No, the downcast will BUG in case it's not the "files" backend.

> Or would the next step in refactoring be to define "load object map"
> method that is generic to odb_source so that this part does not have
> to do any of these and instead simply do
> 
> 	for (source = ...) {
> 		if (odb_source_object_map_load(source))
>                 	return -1;
>         }
> 
> or something?

This patch series is rather moving into the direction of making the
object map an internal implementation detail. Ideally, callers shouldn't
even have to be aware that such an object map exists. And by making the
loose object source load it automatically we get closer to that state.

There's only one more caller that calls `repo_read_loose_object_map()`
directly, in "object-file-convert.c", and that caller only calls it to
reload the map in case a concurrent process may have rewritten it. If we
make the backends handle this via `odb_source_prepare(FLUSH_CACHES)`
then we could also get rid of that caller.

Patrick

  reply	other threads:[~2026-08-04  7:21 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-24  3:48 [PATCH 0/5] odb: make creation of object database pluggable Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 1/5] loose: load loose object map for the correct source Patrick Steinhardt
2026-07-24 17:26   ` Junio C Hamano
2026-07-28 20:14   ` Justin Tobler
2026-07-30 12:47     ` Toon Claes
2026-08-04  7:21       ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 2/5] setup: detangle loading of loose object maps Patrick Steinhardt
2026-07-24 18:41   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt [this message]
2026-07-28 20:32   ` Justin Tobler
2026-07-30 14:27     ` Toon Claes
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 3/5] setup: defer object database creation Patrick Steinhardt
2026-07-24 18:50   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-28 21:13   ` Justin Tobler
2026-08-04  7:21     ` Patrick Steinhardt
2026-08-04  7:28       ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 4/5] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-07-26 20:34   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 5/5] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-07-26 20:42   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-28 21:23   ` Justin Tobler
2026-08-04  8:29 ` [PATCH v2 0/5] odb: make creation of object database pluggable Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 1/5] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 2/5] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 3/5] setup: defer object database creation Patrick Steinhardt
2026-08-04 18:48     ` Toon Claes
2026-08-05  7:27       ` Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 4/5] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 5/5] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-04 16:36   ` [PATCH v2 0/5] odb: make creation of object database pluggable Justin Tobler
2026-08-05  9:28 ` [PATCH v3 0/6] " Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 1/6] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 2/6] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 3/6] setup: handle ODB-related environment variables in `odb_new()` Patrick Steinhardt
2026-08-05 13:29     ` Toon Claes
2026-08-06  6:04       ` Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 4/6] setup: defer object database creation Patrick Steinhardt
2026-08-05 14:21     ` Toon Claes
2026-08-06  6:02       ` Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 5/6] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 6/6] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-05 15:57     ` Toon Claes
2026-08-06  7:50 ` [PATCH v4 0/6] odb: make creation of object database pluggable Patrick Steinhardt
2026-08-06  7:50   ` [PATCH v4 1/6] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 2/6] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 3/6] setup: handle ODB-related environment variables in `odb_new()` Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 4/6] setup: defer object database creation Patrick Steinhardt
2026-08-06 14:23     ` Toon Claes
2026-08-06 14:54       ` Patrick Steinhardt
2026-08-06 17:39         ` Junio C Hamano
2026-08-06  7:51   ` [PATCH v4 5/6] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 6/6] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-06 14:26   ` [PATCH v4 0/6] odb: make creation of object database pluggable Toon Claes
2026-08-07  3:34 ` [PATCH v5 " Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 1/6] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 2/6] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 3/6] setup: handle ODB-related environment variables in `odb_new()` Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 4/6] setup: defer object database creation Patrick Steinhardt
2026-08-07  4:28     ` Junio C Hamano
2026-08-07  7:16       ` Toon Claes
2026-08-07  3:34   ` [PATCH v5 5/6] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 6/6] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-07  7:17   ` [PATCH v5 0/6] odb: make creation of object database pluggable Toon Claes
2026-08-07  9:10     ` Patrick Steinhardt

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=anGS-IOKHMo5VUJm@pks.im \
    --to=ps@pks.im \
    --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