Run the whole parallel directory, and at four ranks as well as two - #615
Run the whole parallel directory, and at four ranks as well as two#615lmoresi wants to merge 1 commit into
Conversation
… two Two scripts, two different holes. scripts/test.sh (what CI runs) used tests/parallel/test_075*py and test_10*py; scripts/test_levels.sh (what ./uw test runs) used tests/parallel/test_07*py. Of the 32 collectible files in that directory, test.sh named 14 and missed test_0005, test_0700, test_0760..test_0790, test_0855 and test_0873; test_levels.sh missed test_0005, test_0855, test_0873 and the whole test_10* solver set. Three files therefore ran at NO rank count in either script: test_0005, test_0855, and test_0873 — the last added two days ago in #596 to guard against a parallel hang. Both now name the directory. A glob that names ranges grows holes as files are added between them, which is the #570 class and is how #611 survived unnoticed. Both scripts also run the set at four ranks. Two ranks is a special case: the defect this suite exists to catch is a collective entered by some ranks and not others, and with two the mismatched pair often still meets. Every instance found recently passed at np=2 and hung at np=4 — the conditional collective in #609, and #611 itself. test_levels.sh already had --full-parallel for this and was pointing it at the narrower glob. Measured on this directory, machine otherwise idle: np=2 128 passed, 11 skipped 156 s np=4 135 passed, 3 skipped 170 s (1 deselected) end to end, scripts/test.sh --p 2: 135 passed, 3 skipped, 1 deselected, 198 s for the parallel section, rc=0. The skip counts differ because some tests require four ranks and skip at two, which is a second reason to run both. The single deselection is #611: test_global_evaluate_after_migration passes at np=2 and hangs at np=4 on development. Its node id carries no `tests/` prefix because tests/pytest.ini puts rootdir at `tests/`; a deselect that does not match is ignored in silence, which cost two wrong diagnoses while measuring this. Underworld development team with AI support from Claude Code
Adversarial reviewReviewed at 1. The deselection is a silent-failure mechanism guarding a silent failure. 2. Turning on 18 previously-unrun files rests on one machine. They pass here 3. The np=4 pass is hard-coded to 4. 4. Checked. Underworld development team with AI support from Claude Code |
Addresses part of #570, and is how #611 was found.
Two scripts, two different holes
scripts/test.sh(CI runs this)test_075*py+test_10*pyscripts/test_levels.sh(./uw test)test_07*pytest_10*Three files ran at no rank count in either script:
test_0005_xdmf_viz_topology_mpi,test_0855_mesh_smoothing_parallel, andtest_0873_adapt_collective_stop_mpi—the last added two days ago in #596 specifically to guard against a parallel
hang, and never once run in parallel by our own tooling.
Both scripts now name the directory. A glob that names ranges grows holes as
files are added between them;
test_075*stops at 0759 andtest_10*starts at1000, so everything added in between fell through. That is the #570 class, and it
is why #611 sat undetected.
Four ranks as well as two
Two ranks is a special case. The defect this suite exists to catch is a
collective entered by some ranks and not others, and with two ranks the
mismatched pair often still meets — the skipped branch does not arise on a
two-way partition, or one rank's internal barrier is satisfied by the other's
next collective. Every instance found recently passed at np=2 and hung at np=4:
the conditional collective in #609, and #611.
test_levels.shalready had a--full-parallelflag for exactly this and waspointing it at the narrower glob.
Measured
Machine otherwise idle, since contention distorts these badly:
tests/parallel/at np=2tests/parallel/at np=4, 1 deselectedscripts/test.sh --p 2The skip counts differ between rank counts because some tests require four ranks
and skip at two — a second reason to run both, independent of the collective
argument.
Cost to CI: roughly three minutes for the added np=4 pass, against the 120-minute
cap. #573 is open on the total.
The one deselection
parallel/test_0760_swarm_cache_migration.py::test_global_evaluate_after_migrationpasses at np=2 and hangs at np=4 on
development— that is #611, filedseparately, not introduced here.
Note the node id has no
tests/prefix:tests/pytest.iniputs rootdir attests/. A deselect that does not match any test is ignored in silence, so amistyped node id leaves the test running and the pass hanging, with nothing said
about it. Confirm
1 deselectedin the output when changing it.Underworld development team with AI support from Claude Code