tests/parallel/test_0855_mesh_smoothing_parallel.py and
tests/parallel/test_0873_adapt_collective_stop_mpi.py both fail at np=2 on
the Linux CI runner, and the second one takes the whole MPI job down with it —
76 minutes of silence until GitHub cancelled the job, with mpirun and
hydra_pmi_proxy still alive at cleanup.
Neither has ever run in CI. They are two of the three files #615 identified as
matching no glob in either test script (scripts/test.sh runs test_075* +
test_10*; scripts/test_levels.sh runs test_07*). This is the first time
they have been executed by CI, and they do not pass.
The sharp end of it: test_0873_adapt_collective_stop_mpi was added in #596
specifically to guard against a rank-divergent collective stop. It has been dead
weight since the day it landed, and now that it runs, it fails and then hangs —
which is the exact failure mode it exists to catch.
Evidence
From the test job of #615 (run 33690271100, np=2, batch of six files):
01:11:04.49 tests/parallel/test_0855_mesh_smoothing_parallel.py ......F
01:11:04.82 tests/parallel/test_0873_adapt_collective_stop_mpi.py F
02:27:58 ##[error]The operation was canceled.
Terminate orphan process: pid (45533) (mpirun)
Terminate orphan process: pid (45534) (hydra_pmi_proxy)
So: one of seven failures in 0855, then 0873 fails, then nothing for 76
minutes. A live mpirun with no output is a rank blocked in a collective while
another rank has already left it. No traceback was captured — the job was
cancelled before pytest could summarise, so the assertion messages are still
unknown.
What does NOT reproduce
Everything below is macOS (arm64, Open MPI 5.0.10, PETSc via the shared build),
amr-dev, at np=2:
| what was run |
result |
test_0855 alone |
4 passed per rank |
test_0873 alone |
4 passed per rank |
| the failing batch of six, alone |
14 passed, 1 skipped, 6.6 s |
| batches 1-4 in sequence, same working directory |
42 / 19 / 23 / 14 passed |
The last row rules out contamination from the batches CI runs first — that was
the obvious suspect and it is not the cause. So this is Linux-specific, or
specific to something else about the runner, and it needs a Linux reproduction
before anyone theorises further.
Why this is filed rather than fixed
I could not reproduce it on the only machine I have. Guessing at a collective
hang from a platform that does not exhibit it is how three wrong theories got
written last time (#638). What the next person needs first is the traceback: run
the batch on Linux without -x and with a per-mpirun timeout so pytest
gets to print its summary instead of being cancelled.
Consequence for #615
#615 is correct and is doing exactly what it was written to do — it made three
invisible files visible and two of them are broken. But it cannot merge until
this is resolved, because it would give every CI run a two-hour hang. Holding it.
tests/parallel/test_0855_mesh_smoothing_parallel.pyandtests/parallel/test_0873_adapt_collective_stop_mpi.pyboth fail at np=2 onthe Linux CI runner, and the second one takes the whole MPI job down with it —
76 minutes of silence until GitHub cancelled the job, with
mpirunandhydra_pmi_proxystill alive at cleanup.Neither has ever run in CI. They are two of the three files #615 identified as
matching no glob in either test script (
scripts/test.shrunstest_075*+test_10*;scripts/test_levels.shrunstest_07*). This is the first timethey have been executed by CI, and they do not pass.
The sharp end of it:
test_0873_adapt_collective_stop_mpiwas added in #596specifically to guard against a rank-divergent collective stop. It has been dead
weight since the day it landed, and now that it runs, it fails and then hangs —
which is the exact failure mode it exists to catch.
Evidence
From the
testjob of #615 (run 33690271100, np=2, batch of six files):So: one of seven failures in
0855, then0873fails, then nothing for 76minutes. A live
mpirunwith no output is a rank blocked in a collective whileanother rank has already left it. No traceback was captured — the job was
cancelled before pytest could summarise, so the assertion messages are still
unknown.
What does NOT reproduce
Everything below is macOS (arm64, Open MPI 5.0.10, PETSc via the shared build),
amr-dev, at np=2:test_0855alonetest_0873aloneThe last row rules out contamination from the batches CI runs first — that was
the obvious suspect and it is not the cause. So this is Linux-specific, or
specific to something else about the runner, and it needs a Linux reproduction
before anyone theorises further.
Why this is filed rather than fixed
I could not reproduce it on the only machine I have. Guessing at a collective
hang from a platform that does not exhibit it is how three wrong theories got
written last time (#638). What the next person needs first is the traceback: run
the batch on Linux without
-xand with a per-mpiruntimeout so pytestgets to print its summary instead of being cancelled.
Consequence for #615
#615 is correct and is doing exactly what it was written to do — it made three
invisible files visible and two of them are broken. But it cannot merge until
this is resolved, because it would give every CI run a two-hour hang. Holding it.