[PATCH 0/4] odb: eagerly load alternates
Patrick Steinhardt <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <20260810-pks-odb-eagerly-prepare-alternates-v1-0-f0fa4a4004e1@pks.im> |
Hi, when initializing the object database we only eagerly initialize the primary object database source. If the primary source has alternates, those alternates are only initialized the first time we really access the object database. When introduced in ace1534d6f (Introduce SHA1_FILE_DIRECTORIES to support multiple object databases., 2005-05-07), alternates were originally only loaded when a given object wasn't found in the primary object database. This was also reinforced by later optimization, for example in 693d2bc625 (Attempt to delay prepare_alt_odb during get_sha1, 2007-05-26), where we tried to avoid loading alternates in even more cases. But as Git has evolved, we eventually started to eagerly parse alternates all over the codebase, including on every single object lookup, and consequently deferring this operation does not really buy us much anymore. The result of this is that we have calls to `odb_prepare_alternates()` cluttered all over the code base. This is somewhat awkward, and as almost every Git command ends up reading objects at it doesn't even buy us anything. This patch series thus gets rid of the lazy-loading. Besides simplifying the codebase a bit, it also prepares us for moving alternates into the "files" backend as discussed in [1]. The series is built on top of 010afd3166 (The 12th batch, 2026-08-07) with ps/odb-make-creation-pluggable at e927cfeb21 (odb: make creation of on-disk structures pluggable, 2026-08-07) merged into it. Thanks! Patrick [1]: <[email protected]> --- Patrick Steinhardt (4): odb: decouple source path comparisons from `the_repository` odb: eagerly initialize alternates odb: drop `loaded_alternates` field odb: drop `alternates_db` field builtin/fsck.c | 3 -- builtin/pack-objects.c | 3 -- commit-graph.c | 4 -- loose.c | 1 - object-name.c | 1 - odb.c | 106 ++++++++++++++++++++++++------------------------- odb.h | 22 +++++----- odb/source.h | 7 ++++ odb/streaming.c | 1 - pack-bitmap.c | 2 - packfile.c | 1 - packfile.h | 2 - 12 files changed, 68 insertions(+), 85 deletions(-) --- base-commit: f6ad67a7977439ad8351d42e6ccfd11f714db765 change-id: 20260804-pks-odb-eagerly-prepare-alternates-3efb0a38e0dd