]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-bitmap.c: remove unnecessary "open_pack_index()" calls
authorTeng Long <dyroneteng@gmail.com>
Thu, 10 Nov 2022 07:10:11 +0000 (15:10 +0800)
committerTaylor Blau <me@ttaylorr.com>
Mon, 14 Nov 2022 22:21:16 +0000 (17:21 -0500)
When trying to open a pack bitmap, we call open_pack_bitmap_1() in a
loop, during which it tries to open up the pack index corresponding
with each available pack.

It's likely that we'll end up relying on objects in that pack later
in the process (in which case we're doing the work of opening the
pack index optimistically), but not guaranteed.

For instance, consider a repository with a large number of small
packs, and one large pack with a bitmap. If we see that bitmap pack
last in our loop which calls open_pack_bitmap_1(), the current code
will have opened *all* pack index files in the repository. If the
request can be served out of the bitmapped pack alone, then the time
spent opening these idx files was wasted.S

Since open_pack_bitmap_1() calls is_pack_valid() later on (which in
turns calls open_pack_index() itself), we can just drop the earlier
call altogether.

Signed-off-by: Teng Long <dyroneteng@gmail.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
pack-bitmap.c

index 440407f1be742c7e2a19a62f5adb968d409bcc29..982e286bacebe73598629e4ae98e4aecd08a0b17 100644 (file)
@@ -411,9 +411,6 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
        struct stat st;
        char *bitmap_name;
 
-       if (open_pack_index(packfile))
-               return -1;
-
        bitmap_name = pack_bitmap_filename(packfile);
        fd = git_open(bitmap_name);