Skip to content

Commit 7355574

Browse files
pks-tgitster
authored andcommitted
t0610: work around flaky test with concurrent writers
In 6241ce2 (refs/reftable: reload locked stack when preparing transaction, 2024-09-24) we have introduced a new test that exercises how the reftable backend behaves with many concurrent writers all racing with each other. This test was introduced after a couple of fixes in this context that should make concurrent writes behave gracefully. As it turns out though, Windows systems do not yet handle concurrent writes properly, as we've got two reports for Cygwin and MinGW failing in this newly added test. The root cause of this is how we update the "tables.list" file: when writing a new stack of tables we first write the data into a lockfile and then rename that file into place. But Windows forbids us from doing that rename when the target path is open for reading by another process. And as the test races both readers and writers with each other we are quite likely to hit this edge case. This is not a regression: the logic didn't work before the mentioned commit, and after the commit it performs well on Linux and macOS, and the situation on Windows should have at least improved a bit. But the test shows that we need to put more thought into how to make this work properly there. Work around the issue by disabling the test on Windows for now. While at it, increase the locking timeout to address reported timeouts when using either the address or memory sanitizer, which also tend to significantly extend the runtime of this test. This should be revisited after Git v2.47 is out. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 6241ce2 commit 7355574

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

t/t0610-reftable-basics.sh

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -450,15 +450,22 @@ test_expect_success 'ref transaction: retry acquiring tables.list lock' '
450450
)
451451
'
452452

453-
test_expect_success 'ref transaction: many concurrent writers' '
453+
# This test fails most of the time on Windows systems. The root cause is
454+
# that Windows does not allow us to rename the "tables.list.lock" file into
455+
# place when "tables.list" is open for reading by a concurrent process.
456+
test_expect_success !WINDOWS 'ref transaction: many concurrent writers' '
454457
test_when_finished "rm -rf repo" &&
455458
git init repo &&
456459
(
457460
cd repo &&
458-
# Set a high timeout such that a busy CI machine will not abort
459-
# early. 10 seconds should hopefully be ample of time to make
460-
# this non-flaky.
461-
git config set reftable.lockTimeout 10000 &&
461+
# Set a high timeout. While a couple of seconds should be
462+
# plenty, using the address sanitizer will significantly slow
463+
# us down here. So we are aiming way higher than you would ever
464+
# think is necessary just to keep us from flaking. We could
465+
# also lock indefinitely by passing -1, but that could
466+
# potentially block CI jobs indefinitely if there was a bug
467+
# here.
468+
git config set reftable.lockTimeout 300000 &&
462469
test_commit --no-tag initial &&
463470
464471
head=$(git rev-parse HEAD) &&

0 commit comments

Comments
 (0)