From: Taylor Blau <me@ttaylorr.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, Johannes.Schindelin@gmx.de,
chakrabortyabhradeep79@gmail.com, derrickstolee@github.com,
jonathantanmy@google.com, kaartic.sivaraam@gmail.com
Subject: [PATCH 0/6] midx: permit changing the preferred pack when reusing the MIDX
Date: Fri, 19 Aug 2022 17:30:02 -0400 [thread overview]
Message-ID: <cover.1660944574.git.me@ttaylorr.com> (raw)
This series resolves a bug that was reported[1] by Johannes, and
investigated by him, Abhradeep, and Stolee in that same sub-thread.
The crux of the issue is that a MIDX bitmap can enter a corrupt state
when changing the preferred pack from its value in an existing MIDX in
certain circumstances as described in the first and final patches.
This series is structured as follows:
- The first patch of this series adds a test which demonstrates the
problem. (This is an improvement from the debugging in [1], where we
only noticed the problem racily in an existing test, and only in
SHA-256 mode).
- The next small handful of patches refactor midx.c's
`get_sorted_entries()` function to make fixing this bug more
straightforward.
- The final patch resolves the bug and updates the test to no longer
expect failure.
A couple of meta-notes:
- This bug has existed since the introduction of MIDX bitmaps, but
probably wasn't noticed until now since it is only triggerable when
the `--stdin-packs` mode *isn't* passed, so it never occurs when
invoked via `git repack`.
- We could likely change the behavior of 56d863e979 (midx: expose
`write_midx_file_only()` publicly, 2021-09-28), which explicitly
disables reusing the existing MIDX (by avoiding loading it
altogether) when `--stdin-packs` is given.
The rationale in the comment added by 56d863e979 is somewhat unclear,
but I have a vague recollection of running into a bug that was
squashed by avoiding reusing an existing MIDX to write one with
bitmaps. This was likely that bug.
Thanks in advance for your review, and thanks to Johannes, Abhradeep,
and Stolee for investigating this bug while I was on vacation.
[1]: https://lore.kernel.org/git/p3r70610-8n52-s8q0-n641-onp4ps01330n@tzk.qr/
Taylor Blau (6):
t5326: demonstrate potential bitmap corruption
t/lib-bitmap.sh: avoid silencing stderr
midx.c: extract `struct midx_fanout`
midx.c: extract `midx_fanout_add_midx_fanout()`
midx.c: extract `midx_fanout_add_pack_fanout()`
midx.c: include preferred pack correctly with existing MIDX
midx.c | 128 ++++++++++++++++++++++------------
t/lib-bitmap.sh | 2 +-
t/t5326-multi-pack-bitmaps.sh | 43 ++++++++++++
3 files changed, 127 insertions(+), 46 deletions(-)
--
2.37.0.1.g1379af2e9d
next reply other threads:[~2022-08-19 21:30 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-19 21:30 Taylor Blau [this message]
2022-08-19 21:30 ` [PATCH 1/6] t5326: demonstrate potential bitmap corruption Taylor Blau
2022-08-22 16:09 ` Derrick Stolee
2022-08-22 17:57 ` Taylor Blau
2022-08-22 19:31 ` Junio C Hamano
2022-08-22 19:41 ` Taylor Blau
2022-08-19 21:30 ` [PATCH 2/6] t/lib-bitmap.sh: avoid silencing stderr Taylor Blau
2022-08-20 16:44 ` Abhradeep Chakraborty
2022-08-22 17:58 ` Taylor Blau
2022-08-19 21:30 ` [PATCH 3/6] midx.c: extract `struct midx_fanout` Taylor Blau
2022-08-19 21:30 ` [PATCH 4/6] midx.c: extract `midx_fanout_add_midx_fanout()` Taylor Blau
2022-08-19 21:30 ` [PATCH 5/6] midx.c: extract `midx_fanout_add_pack_fanout()` Taylor Blau
2022-08-19 21:30 ` [PATCH 6/6] midx.c: include preferred pack correctly with existing MIDX Taylor Blau
2022-08-20 18:40 ` Abhradeep Chakraborty
2022-08-22 18:08 ` Taylor Blau
2022-08-22 17:03 ` Derrick Stolee
2022-08-22 18:14 ` Taylor Blau
2022-08-22 17:04 ` [PATCH 0/6] midx: permit changing the preferred pack when reusing the MIDX Derrick Stolee
2022-08-22 19:44 ` Taylor Blau
2022-08-22 19:50 ` [PATCH v2 0/7] " Taylor Blau
2022-08-22 19:50 ` [PATCH v2 1/7] t5326: demonstrate potential bitmap corruption Taylor Blau
2022-08-22 19:50 ` [PATCH v2 2/7] t/lib-bitmap.sh: avoid silencing stderr Taylor Blau
2022-08-22 19:50 ` [PATCH v2 3/7] midx.c: extract `struct midx_fanout` Taylor Blau
2022-08-22 19:50 ` [PATCH v2 4/7] midx.c: extract `midx_fanout_add_midx_fanout()` Taylor Blau
2022-08-22 19:50 ` [PATCH v2 5/7] midx.c: extract `midx_fanout_add_pack_fanout()` Taylor Blau
2022-08-22 19:50 ` [PATCH v2 6/7] midx.c: include preferred pack correctly with existing MIDX Taylor Blau
2022-08-22 19:50 ` [PATCH v2 7/7] midx.c: avoid adding preferred objects twice Taylor Blau
2022-08-23 16:22 ` Derrick Stolee
2022-08-23 16:23 ` [PATCH v2 0/7] midx: permit changing the preferred pack when reusing the MIDX Derrick Stolee
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=cover.1660944574.git.me@ttaylorr.com \
--to=me@ttaylorr.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=chakrabortyabhradeep79@gmail.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=kaartic.sivaraam@gmail.com \
/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;
as well as URLs for NNTP newsgroup(s).