From: Junio C Hamano <gitster@pobox.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/5] setup: detangle loading of loose object maps
Date: Fri, 24 Jul 2026 11:41:41 -0700 [thread overview]
Message-ID: <xmqqh5lo6xi2.fsf@gitster.g> (raw)
In-Reply-To: <20260724-pks-odb-create-on-disk-v1-2-3b3d265d979b@pks.im> (Patrick Steinhardt's message of "Fri, 24 Jul 2026 05:48:41 +0200")
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?
> - We require the object database to already have been initialized when
> configuring the object database. This means that we must intermix
> configuration of the repository and initialization of its
> sub-structures in a weird way.
>
> Refactor the logic so that we instead load the loose object map via the
> "loose" backend, which fixes both of the above issues.
It does make sense to have loose_object_map_load() that is very much
specific to the loose object odb source to odb_source_loose_new().
That way set_compat_hash_algo() does not have to assume that files
backend is used as the object store.
> @@ -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?
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?
next prev parent reply other threads:[~2026-07-24 18:41 UTC|newest]
Thread overview: 9+ 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-24 3:48 ` [PATCH 2/5] setup: detangle loading of loose object maps Patrick Steinhardt
2026-07-24 18:41 ` Junio C Hamano [this message]
2026-07-24 3:48 ` [PATCH 3/5] setup: defer object database creation Patrick Steinhardt
2026-07-24 18:50 ` Junio C Hamano
2026-07-24 3:48 ` [PATCH 4/5] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-07-24 3:48 ` [PATCH 5/5] odb: make creation of on-disk structures pluggable 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=xmqqh5lo6xi2.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=ps@pks.im \
/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