Merge branch 'tb/midx-bitmap-selection-fix'
A bugfix with tracing support in midx codepath * tb/midx-bitmap-selection-fix: pack-bitmap-write.c: instrument number of reused bitmaps midx.c: instrument MIDX and bitmap generation with trace2 regions midx.c: consider annotated tags during bitmap selection midx.c: fix whitespace typo
This commit is contained in:
commit
99bb1a0bea
34
midx.c
34
midx.c
@ -278,7 +278,7 @@ uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos)
|
|||||||
(off_t)pos * MIDX_CHUNK_OFFSET_WIDTH);
|
(off_t)pos * MIDX_CHUNK_OFFSET_WIDTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
int fill_midx_entry(struct repository * r,
|
int fill_midx_entry(struct repository *r,
|
||||||
const struct object_id *oid,
|
const struct object_id *oid,
|
||||||
struct pack_entry *e,
|
struct pack_entry *e,
|
||||||
struct multi_pack_index *m)
|
struct multi_pack_index *m)
|
||||||
@ -913,6 +913,8 @@ static uint32_t *midx_pack_order(struct write_midx_context *ctx)
|
|||||||
uint32_t *pack_order;
|
uint32_t *pack_order;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
trace2_region_enter("midx", "midx_pack_order", the_repository);
|
||||||
|
|
||||||
ALLOC_ARRAY(data, ctx->entries_nr);
|
ALLOC_ARRAY(data, ctx->entries_nr);
|
||||||
for (i = 0; i < ctx->entries_nr; i++) {
|
for (i = 0; i < ctx->entries_nr; i++) {
|
||||||
struct pack_midx_entry *e = &ctx->entries[i];
|
struct pack_midx_entry *e = &ctx->entries[i];
|
||||||
@ -930,6 +932,8 @@ static uint32_t *midx_pack_order(struct write_midx_context *ctx)
|
|||||||
pack_order[i] = data[i].nr;
|
pack_order[i] = data[i].nr;
|
||||||
free(data);
|
free(data);
|
||||||
|
|
||||||
|
trace2_region_leave("midx", "midx_pack_order", the_repository);
|
||||||
|
|
||||||
return pack_order;
|
return pack_order;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -939,6 +943,8 @@ static void write_midx_reverse_index(char *midx_name, unsigned char *midx_hash,
|
|||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
const char *tmp_file;
|
const char *tmp_file;
|
||||||
|
|
||||||
|
trace2_region_enter("midx", "write_midx_reverse_index", the_repository);
|
||||||
|
|
||||||
strbuf_addf(&buf, "%s-%s.rev", midx_name, hash_to_hex(midx_hash));
|
strbuf_addf(&buf, "%s-%s.rev", midx_name, hash_to_hex(midx_hash));
|
||||||
|
|
||||||
tmp_file = write_rev_file_order(NULL, ctx->pack_order, ctx->entries_nr,
|
tmp_file = write_rev_file_order(NULL, ctx->pack_order, ctx->entries_nr,
|
||||||
@ -948,6 +954,8 @@ static void write_midx_reverse_index(char *midx_name, unsigned char *midx_hash,
|
|||||||
die(_("cannot store reverse index file"));
|
die(_("cannot store reverse index file"));
|
||||||
|
|
||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
|
|
||||||
|
trace2_region_leave("midx", "write_midx_reverse_index", the_repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clear_midx_files_ext(const char *object_dir, const char *ext,
|
static void clear_midx_files_ext(const char *object_dir, const char *ext,
|
||||||
@ -963,6 +971,8 @@ static void prepare_midx_packing_data(struct packing_data *pdata,
|
|||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
trace2_region_enter("midx", "prepare_midx_packing_data", the_repository);
|
||||||
|
|
||||||
memset(pdata, 0, sizeof(struct packing_data));
|
memset(pdata, 0, sizeof(struct packing_data));
|
||||||
prepare_packing_data(the_repository, pdata);
|
prepare_packing_data(the_repository, pdata);
|
||||||
|
|
||||||
@ -973,6 +983,8 @@ static void prepare_midx_packing_data(struct packing_data *pdata,
|
|||||||
oe_set_in_pack(pdata, to,
|
oe_set_in_pack(pdata, to,
|
||||||
ctx->info[ctx->pack_perm[from->pack_int_id]].p);
|
ctx->info[ctx->pack_perm[from->pack_int_id]].p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace2_region_leave("midx", "prepare_midx_packing_data", the_repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_ref_to_pending(const char *refname,
|
static int add_ref_to_pending(const char *refname,
|
||||||
@ -980,6 +992,7 @@ static int add_ref_to_pending(const char *refname,
|
|||||||
int flag, void *cb_data)
|
int flag, void *cb_data)
|
||||||
{
|
{
|
||||||
struct rev_info *revs = (struct rev_info*)cb_data;
|
struct rev_info *revs = (struct rev_info*)cb_data;
|
||||||
|
struct object_id peeled;
|
||||||
struct object *object;
|
struct object *object;
|
||||||
|
|
||||||
if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
|
if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
|
||||||
@ -987,6 +1000,9 @@ static int add_ref_to_pending(const char *refname,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!peel_iterated_oid(oid, &peeled))
|
||||||
|
oid = &peeled;
|
||||||
|
|
||||||
object = parse_object_or_die(oid, refname);
|
object = parse_object_or_die(oid, refname);
|
||||||
if (object->type != OBJ_COMMIT)
|
if (object->type != OBJ_COMMIT)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1066,6 +1082,9 @@ static struct commit **find_commits_for_midx_bitmap(uint32_t *indexed_commits_nr
|
|||||||
struct rev_info revs;
|
struct rev_info revs;
|
||||||
struct bitmap_commit_cb cb = {0};
|
struct bitmap_commit_cb cb = {0};
|
||||||
|
|
||||||
|
trace2_region_enter("midx", "find_commits_for_midx_bitmap",
|
||||||
|
the_repository);
|
||||||
|
|
||||||
cb.ctx = ctx;
|
cb.ctx = ctx;
|
||||||
|
|
||||||
repo_init_revisions(the_repository, &revs, NULL);
|
repo_init_revisions(the_repository, &revs, NULL);
|
||||||
@ -1099,6 +1118,10 @@ static struct commit **find_commits_for_midx_bitmap(uint32_t *indexed_commits_nr
|
|||||||
*indexed_commits_nr_p = cb.commits_nr;
|
*indexed_commits_nr_p = cb.commits_nr;
|
||||||
|
|
||||||
release_revisions(&revs);
|
release_revisions(&revs);
|
||||||
|
|
||||||
|
trace2_region_leave("midx", "find_commits_for_midx_bitmap",
|
||||||
|
the_repository);
|
||||||
|
|
||||||
return cb.commits;
|
return cb.commits;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1116,6 +1139,8 @@ static int write_midx_bitmap(const char *midx_name,
|
|||||||
char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name,
|
char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name,
|
||||||
hash_to_hex(midx_hash));
|
hash_to_hex(midx_hash));
|
||||||
|
|
||||||
|
trace2_region_enter("midx", "write_midx_bitmap", the_repository);
|
||||||
|
|
||||||
if (flags & MIDX_WRITE_BITMAP_HASH_CACHE)
|
if (flags & MIDX_WRITE_BITMAP_HASH_CACHE)
|
||||||
options |= BITMAP_OPT_HASH_CACHE;
|
options |= BITMAP_OPT_HASH_CACHE;
|
||||||
|
|
||||||
@ -1161,6 +1186,9 @@ static int write_midx_bitmap(const char *midx_name,
|
|||||||
cleanup:
|
cleanup:
|
||||||
free(index);
|
free(index);
|
||||||
free(bitmap_name);
|
free(bitmap_name);
|
||||||
|
|
||||||
|
trace2_region_leave("midx", "write_midx_bitmap", the_repository);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1207,6 +1235,8 @@ static int write_midx_internal(const char *object_dir,
|
|||||||
int result = 0;
|
int result = 0;
|
||||||
struct chunkfile *cf;
|
struct chunkfile *cf;
|
||||||
|
|
||||||
|
trace2_region_enter("midx", "write_midx_internal", the_repository);
|
||||||
|
|
||||||
get_midx_filename(&midx_name, object_dir);
|
get_midx_filename(&midx_name, object_dir);
|
||||||
if (safe_create_leading_directories(midx_name.buf))
|
if (safe_create_leading_directories(midx_name.buf))
|
||||||
die_errno(_("unable to create leading directories of %s"),
|
die_errno(_("unable to create leading directories of %s"),
|
||||||
@ -1548,6 +1578,8 @@ cleanup:
|
|||||||
free(ctx.pack_order);
|
free(ctx.pack_order);
|
||||||
strbuf_release(&midx_name);
|
strbuf_release(&midx_name);
|
||||||
|
|
||||||
|
trace2_region_leave("midx", "write_midx_internal", the_repository);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,6 +384,8 @@ static int fill_bitmap_tree(struct bitmap *bitmap,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int reused_bitmaps_nr;
|
||||||
|
|
||||||
static int fill_bitmap_commit(struct bb_commit *ent,
|
static int fill_bitmap_commit(struct bb_commit *ent,
|
||||||
struct commit *commit,
|
struct commit *commit,
|
||||||
struct prio_queue *queue,
|
struct prio_queue *queue,
|
||||||
@ -409,8 +411,10 @@ static int fill_bitmap_commit(struct bb_commit *ent,
|
|||||||
* bitmap and add its bits to this one. No need to walk
|
* bitmap and add its bits to this one. No need to walk
|
||||||
* parents or the tree for this commit.
|
* parents or the tree for this commit.
|
||||||
*/
|
*/
|
||||||
if (old && !rebuild_bitmap(mapping, old, ent->bitmap))
|
if (old && !rebuild_bitmap(mapping, old, ent->bitmap)) {
|
||||||
|
reused_bitmaps_nr++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -526,6 +530,8 @@ int bitmap_writer_build(struct packing_data *to_pack)
|
|||||||
|
|
||||||
trace2_region_leave("pack-bitmap-write", "building_bitmaps_total",
|
trace2_region_leave("pack-bitmap-write", "building_bitmaps_total",
|
||||||
the_repository);
|
the_repository);
|
||||||
|
trace2_data_intmax("pack-bitmap-write", the_repository,
|
||||||
|
"building_bitmaps_reused", reused_bitmaps_nr);
|
||||||
|
|
||||||
stop_progress(&writer.progress);
|
stop_progress(&writer.progress);
|
||||||
|
|
||||||
|
@ -410,4 +410,28 @@ test_expect_success 'preferred pack change with existing MIDX bitmap' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'tagged commits are selected for bitmapping' '
|
||||||
|
rm -fr repo &&
|
||||||
|
git init repo &&
|
||||||
|
test_when_finished "rm -fr repo" &&
|
||||||
|
(
|
||||||
|
cd repo &&
|
||||||
|
|
||||||
|
test_commit --annotate base &&
|
||||||
|
git repack -d &&
|
||||||
|
|
||||||
|
# Remove refs/heads/main which points at the commit directly,
|
||||||
|
# leaving only a reference to the annotated tag.
|
||||||
|
git branch -M main &&
|
||||||
|
git checkout base &&
|
||||||
|
git branch -d main &&
|
||||||
|
|
||||||
|
git multi-pack-index write --bitmap &&
|
||||||
|
|
||||||
|
git rev-parse HEAD >want &&
|
||||||
|
test-tool bitmap list-commits >actual &&
|
||||||
|
grep $(cat want) actual
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user