Source: pytest-mpi
Version: 0.6-9
Severity: serious
User: [email protected]
Usertags: flaky
Dear maintainer(s),
I looked at the results of the autopkgtest of your package because it
was marked as regression for setuptools. I noticed that it regularly
fails. I scheduled 5 tests on i386 and it failed 4 times [1]. It seems
the test has an internal timeout (great), but it seems to short for our
infrastructure [2].
Because the unstable-to-testing migration software now blocks on
regressions in testing, flaky tests, i.e. tests that flip between
passing and failing without changes to the list of installed packages,
are causing people unrelated to your package to spend time on these
tests.
Don't hesitate to reach out if you need help and some more information
from our infrastructure.
Paul
[1] https://ci.debian.net/packages/p/pytest-mpi/testing/i386/
[2] https://ci.debian.net/packages/p/pytest-mpi/testing/i386/77422587/
734s =================================== FAILURES
===================================
734s _______________________________ test_mpi_tmpdir
________________________________
734s
734s self = <Popen: returncode: -9 args: ('mpirun', '-n', '2',
'/usr/bin/python3.14', '-...>
734s timeout = 60
734s
734s def wait(self, timeout=None):
734s """Wait for child process to terminate; returns
self.returncode."""
734s if timeout is not None:
734s endtime = _time() + timeout
734s try:
734s > return self._wait(timeout=timeout)
734s ^^^^^^^^^^^^^^^^^^^^^^^^^^^
734s
734s /usr/lib/python3.14/subprocess.py:1279:
734s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _
734s
734s self = <Popen: returncode: -9 args: ('mpirun', '-n', '2',
'/usr/bin/python3.14', '-...>
734s timeout = 60
734s
734s def _wait(self, timeout):
734s """Internal implementation of wait() on POSIX."""
734s if self.returncode is not None:
734s return self.returncode
734s
734s if timeout is not None:
734s endtime = _time() + timeout
734s # Enter a busy loop if we have a timeout. This busy
loop was
734s # cribbed from Lib/threading.py in Thread.wait() at r71065.
734s delay = 0.0005 # 500 us -> initial delay of 1 ms
734s while True:
734s if self._waitpid_lock.acquire(False):
734s try:
734s if self.returncode is not None:
734s break # Another thread waited.
734s (pid, sts) = self._try_wait(os.WNOHANG)
734s assert pid == self.pid or pid == 0
734s if pid == self.pid:
734s self._handle_exitstatus(sts)
734s break
734s finally:
734s self._waitpid_lock.release()
734s remaining = self._remaining_time(endtime)
734s if remaining <= 0:
734s > raise TimeoutExpired(self.args, timeout)
734s E subprocess.TimeoutExpired: Command '('mpirun',
'-n', '2', '/usr/bin/python3.14', '-mpytest',
'--basetemp=/tmp/pytest-of-test/pytest-0/test_mpi_tmpdir0/runpytest-0',
'--with-mpi')' timed out after 60 seconds
734s
734s /usr/lib/python3.14/subprocess.py:2076: TimeoutExpired
734s
734s During handling of the above exception, another exception occurred:
734s
734s mpi_testdir = <conftest.MPITestdir object at 0xf6110a80>,
has_mpi4py = True
734s
734s def test_mpi_tmpdir(mpi_testdir, has_mpi4py):
734s mpi_testdir.makepyfile(MPI_TMPDIR_TEST_CODE)
734s
734s > result = mpi_testdir.runpytest("--with-mpi", timeout=None)
734s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
734s
734s /tmp/autopkgtest.jIYgeP/autopkgtest_tmp/tests/test_fixtures.py:67:
734s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _
734s /tmp/autopkgtest.jIYgeP/autopkgtest_tmp/tests/conftest.py:72: in
runpytest
734s return self._run_pytester(*args, **kwargs)
734s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
734s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _
734s
734s self = <conftest.MPITestdir object at 0xf6110a80>, timeout = 60,
mpi_procs = 2
734s max_retries = 5
734s args = ('mpirun', '-n', '2', '/usr/bin/python3.14', '-mpytest',
'--basetemp=/tmp/pytest-of-test/pytest-0/test_mpi_tmpdir0/runpytest-0', ...)
734s
734s def _run_pytester(self, *args, timeout=None, mpi_procs=2,
max_retries=5):
734s retries = 0
734s p = _to_pathlib(py.path.local.make_numbered_dir(
734s prefix="runpytest-", keep=None,
734s rootdir=_to_py_path(self._pytester.path)
734s ))
734s args = ("--basetemp=%s" % p,) + args
734s plugins = [x for x in self._pytester.plugins if
isinstance(x, str)]
734s if plugins:
734s args = ("-p", plugins[0]) + args
734s args = MPI_ARGS + (str(mpi_procs),) + PYTEST_ARGS + args
734s if timeout is None:
734s timeout = DEFAULT_TIMEOUT
734s while retries < max_retries:
734s try:
734s > return self._pytester.run(*args, timeout=timeout)
734s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
734s E _pytest.pytester.Pytester.TimeoutExpired: 60 second
timeout expired running: ('mpirun', '-n', '2', '/usr/bin/python3.14',
'-mpytest',
'--basetemp=/tmp/pytest-of-test/pytest-0/test_mpi_tmpdir0/runpytest-0',
'--with-mpi')
734s
734s /tmp/autopkgtest.jIYgeP/autopkgtest_tmp/tests/conftest.py:111:
TimeoutExpired