From: Johannes Schindelin Date: Tue, 02 Aug 2022 15:35:02 GMT Subject: Re: [PATCH v5 3/6] pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests Message-ID: <6s4n3600-q5p7-92sr-4206-non3s8rr3n46@tzk.qr> In-Reply-To: Hi Abhradeep, On Tue, 2 Aug 2022, Abhradeep Chakraborty wrote: > On Fri, Jul 29, 2022 at 12:52 AM Johannes Schindelin > wrote: > > That's quite a large a change, and unfortunately I pinpointed a flake to > > this patch when running with GIT_TEST_DEFAULT_HASH=sha256. The symptom is > > this: > > Hi Dscho, sorry for this long delay in response. I was quite busy for > 3-4 days in hostel room shifting. So, I couldn't work properly during > this time. > > > -- snip -- > > [...] > > + diff -u expect.normalized actual.normalized > > + rm -f expect.normalized actual.normalized > > ok 317 - enumerate --objects (full bitmap, other) > > > > expecting success of 5326.318 'bitmap --objects handles non-commit objects (full bitmap, other)': > > git rev-list --objects --use-bitmap-index $branch tagged-blob >actual && > > grep $blob actual > > > > + git rev-list --objects --use-bitmap-index other tagged-blob > > + grep bff4ed5e839bd73e821f78b45a7fa34208aa85596535ec8e9ac5eab477ca6f81 actual > > bff4ed5e839bd73e821f78b45a7fa34208aa85596535ec8e9ac5eab477ca6f81 > > ok 318 - bitmap --objects handles non-commit objects (full bitmap, other) > > > > expecting success of 5326.319 'clone from bitmapped repository': > > rm -fr clone.git && > > git clone --no-local --bare . clone.git && > > git rev-parse HEAD >expect && > > git --git-dir=clone.git rev-parse HEAD >actual && > > test_cmp expect actual > > > > + rm -fr clone.git > > + git clone --no-local --bare . clone.git > > Cloning into bare repository 'clone.git'... > > remote: Enumerating objects: 756, done. > > remote: Counting objects: 100% (754/754), done. > > remote: Compressing objects: 100% (281/281), done. > > remote: Total 756 (delta 245), reused 740 (delta 234), pack-reused 2 > > Receiving objects: 100% (756/756), 77.50 KiB | 8.61 MiB/s, done. > > fatal: REF_DELTA at offset 221 already resolved (duplicate base 4d332072f161629ffe4652ecd3ce377ef88447bec73f05ab0f3515f98bd061cf?) > > fatal: fetch-pack: invalid index-pack output > > error: last command exited with $?=128 > > not ok 319 - clone from bitmapped repository > > # > > # rm -fr clone.git && > > # git clone --no-local --bare . clone.git && > > # git rev-parse HEAD >expect && > > # git --git-dir=clone.git rev-parse HEAD >actual && > > # test_cmp expect actual > > # > > 1..319 > > -- snap -- > > > > On a hunch, I ran this through valgrind (took a while) but it did not > > point out the problem. > > > > Again, this is only with SHA-256 (and somewhat flaky), it passes every > > time with SHA-1. Maybe you can reproduce on your side with that > > information? > > Yeah, I can reproduce it on my side. Good. > But I am sure it is not related to the lookup table implementation code. > Because when I swap the order of calling `test_midx_bitmap_cases > "pack.writeBitmapLookupTable"` and `test_midx_bitmap_cases` (in > t5326-multi-pack-bitmaps.sh), in that case, the error is being generated > in `test_midx_bitmap_cases` call. Generally speaking, the error is > always being generated in the second call. Indeed, it probably has something to do with the test tick (which gives rise to the author/committer date of the commits that are generated, and hence with the SHA order of said commits). With this patch: -- snip -- diff --git a/t/t5326-multi-pack-bitmaps.sh b/t/t5326-multi-pack-bitmaps.sh index 3b206adcee6..a340f005b89 100755 --- a/t/t5326-multi-pack-bitmaps.sh +++ b/t/t5326-multi-pack-bitmaps.sh @@ -347,7 +347,11 @@ test_midx_bitmap_cases () { ' } -test_midx_bitmap_cases +# test_midx_bitmap_cases + +GIT_COMMITTER_DATE='1112928553 -0700' +GIT_AUTHOR_DATE='1112928553 -0700' +test_tick='1112928553' test_midx_bitmap_cases "pack.writeBitmapLookupTable" -- snap -- I can reproduce it quicker via GIT_TEST_DEFAULT_HASH=sha256 sh t5326-*.sh --run=1,71,91,92,93,124,145 Without setting those variables, I cannot skip the first `test_midx_bitmap_cases` invocation _and_ reproduce the failure. For shiggles, I now also ran this command-line after deleting the `"pack.writeBitmapLookupTable"` argument, and it fails in the exact same way. So you're correct: this has nothing to do with the `writeBitmapLookupTable` code, it's just a failure that is triggered by those patches. > For now, my understanding says that there is something fishy in the > test script. I do not actually think so. I believe that this just points out a bug in the MIDX bitmap code. > I am still not able to figure out the problem here. But let me further > investigate. > > If anyone has some idea about what could be the culprit, I will be > very happy to know. So I noticed that the test will pass every 4th to 5th time over here, which means that it is a racy condition that is the culprit. I dug a bit deeper and reduced the reproducer even further, by running this command with a trash directory just after above test script invocation failed: bin-wrappers/git -C t/trash\ directory.t5326-multi-pack-bitmaps/ \ -c pack.threads=1 pack-objects --revs --thin --stdout \ --progress --delta-base-offset