refactor(overlays): consolidate test patches

This commit is contained in:
2026-09-19 21:13:23 -04:00
parent a78b74ac92
commit 4156748da1
6 changed files with 56 additions and 45 deletions
+24 -12
View File
@@ -1,4 +1,4 @@
# pytest-xdist concurrent worker crashes
# pytest-xdist test fixes
With two workers and a restart limit of three, the fourth worker crash
requests shutdown while another test can still be running. That test may
@@ -13,6 +13,10 @@ even though five failures can occur without exceeding the replacement limit.
five failed tests, the failed-tests exit status, the limit message, and no
internal error. It retains the two-worker workload and ten queued tests.
`worker-startup-timeout.patch` changes the remote-test helper's event timeout
from 10 to 60 seconds so loaded builders have time to start workers. The
helper returns immediately when an event arrives and still has a bounded wait.
The existing nixpkgs pytest-9 compatibility patches remain in place.
Production scheduling and worker-restart behavior are unchanged.
@@ -23,9 +27,11 @@ the nixpkgs pytest-9 compatibility patches where required. From this directory:
```sh
patch --fuzz=0 -d /path/to/pytest-xdist -p1 < concurrent-worker-crashes.patch
patch --fuzz=0 -d /path/to/pytest-xdist -p1 < worker-startup-timeout.patch
cd /path/to/pytest-xdist
python -m pytest testing/acceptance_test.py \
-k test_max_worker_restart_tests_queued -q
python -m pytest testing/test_remote.py -q
```
Twenty unmodified runs passed during the review. To force the failing
@@ -36,22 +42,23 @@ tests when shutdown starts. Bound the marker wait so a reproduction failure
cannot hang the suite. The original assertion fails on five reported
failures; the patched test passes.
## Remaining resource settings
## Worker startup and outer concurrency
[`../../test-exclusions.nix`](../../test-exclusions.nix) runs the outer suite
with one worker and sets the inner-worker wait to 60 seconds. These settings
limit nested process pools and allow worker startup on loaded builders.
[`default.nix`](default.nix) runs the outer suite with one worker to limit
nested process pools. This is a Nix test-runner setting; the source timeout
change lives in [`worker-startup-timeout.patch`](worker-startup-timeout.patch).
A separate reproduction inserts an 11-second `pytest_sessionstart` delay
into the child created by `test_basic_collect_and_runtests` in
`testing/test_remote.py`. The original 10-second channel wait fails; the
60-second wait passes. This is a worker-startup bound, not a product deadline.
60-second wait passes. This bounds waits for test worker events, including
startup, rather than changing a product deadline.
## Upstream status
This is a standalone test patch for pytest-xdist 3.8.0. No upstream submission
was made during this work. Recheck the allowed in-flight failures and
replacement count when updating the scheduler or shutdown behavior.
These are standalone test patches for pytest-xdist 3.8.0. No upstream submission
was made during this work. Recheck the allowed in-flight failures, replacement
count, and remote-test wait when updating the scheduler or worker behavior.
## Local NixOS integration and build results
@@ -62,6 +69,11 @@ replacement count when updating the scheduler or shutdown behavior.
nix build --no-link -L .#nixosConfigurations.jeeves.pkgs.python314Packages.pytest-xdist
```
The patched x86-64-v3 package passed 185 tests, with 6 existing skips and
10 expected failures. The forced concurrent-crash reproduction passed after
the fix, and the focused test passed again after formatting the assertion.
After consolidating the settings in this directory, the full x86-64-v3 package
build passed 185 tests, with 6 existing skips and 10 expected failures. Nix
evaluation confirmed the same outer-worker limit and preserved existing
patches, with the timeout now applied as a source patch.
The earlier forced concurrent-crash and delayed-startup reproductions passed
after their fixes; the focused crash test also passed after formatting its
assertion.