On Mon, Mar 06, 2023 at 02:54:00PM -0800, Junio C Hamano wrote: > "Derrick Stolee via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > > > @@ -1008,6 +1008,7 @@ void reprepare_packed_git(struct repository *r) > > struct object_directory *odb; > > > > obj_read_lock(); > > + reprepare_alt_odb(r); > > for (odb = r->objects->odb; odb; odb = odb->next) > > odb_clear_loose_cache(odb); > > Hmph, if there was an old alternate ODB from which we took some > loose object from and cached, and if that ODB no longer is on the > updated alternate list, would we now fail to clear the loose objects > cache for the ODB? Or are we only prepared for seeing "more" > alternates and assume no existing alternates go away? Based on my understanding of the patch, we are only prepared to see "more" alternates, rather than some existing alternate going away. That being said, I am not certain that is how it works. Perhaps an alternate "goes away", but does not actually get removed from the list of alternate ODBs. If that's the case, any object lookup in that now-missing ODB would fail, but any subsequent ODBs which were added after calling reprepare_alt_odb() would succeed on that object lookup. So, I don't know. I don't have the implementation details of the alternates ODB mechanism paged in enough to say for sure. Hopefully Stolee can point us in the right direction. > Other than that, looking quite well reasoned. Agreed. Thanks, Taylor