Repository navigation
Flaky test test_asyncio_repl_is_ok in test_repl #119909
Copy link
Copy link
Closed
Labels
testsTests in the Lib/test dirTests in the Lib/test dirtopic-asynciotopic-replRelated to the interactive shellRelated to the interactive shelltype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or errortype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
Description
The test fails because the running the asyncio repl exits with:
Fatal Python error: _enter_buffered_busy: could not acquire lock for <_io.BufferedWriter name='<stderr>'> at interpreter shutdown, possibly due to daemon threads
I'm not sure if this is just a flaky test (i.e, _enter_buffered_busy failures are expected), or if it's a bug in the underlying repl.
The exit code -6 means the process crashes due to an abort(), I think.
Example: https://github.com/python/cpython/actions/runs/9331095550/job/25685390386?pr=119908
Test Output
======================================================================
FAIL: test_asyncio_repl_is_ok (test.test_repl.TestInteractiveInterpreter.test_asyncio_repl_is_ok)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/runner/work/cpython/cpython-ro-srcdir/Lib/test/test_repl.py", line 199, in test_asyncio_repl_is_ok
assert_python_ok("-m", "asyncio")
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/home/runner/work/cpython/cpython-ro-srcdir/Lib/test/support/script_helper.py", line 180, in assert_python_ok
return _assert_python(True, *args, **env_vars)
File "/home/runner/work/cpython/cpython-ro-srcdir/Lib/test/support/script_helper.py", line 165, in _assert_python
res.fail(cmd_line)
~~~~~~~~^^^^^^^^^^
File "/home/runner/work/cpython/cpython-ro-srcdir/Lib/test/support/script_helper.py", line 75, in fail
raise AssertionError("Process return code is %d\n"
...<13 lines>...
err))
AssertionError: Process return code is -6
command line: ['/home/runner/work/cpython/cpython-builddir/hypovenv/bin/python', '-X', 'faulthandler', '-I', '-m', 'asyncio']
stdout:
---
---
stderr:
---
asyncio REPL 3.14.0a0 (remotes/pull/119908/merge-dirty:43e023a, Jun 1 2024, 14:47:23) [GCC 11.4.0] on linux
Use "await" directly instead of "asyncio.run()".
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
Exception in thread Interactive thread:
Traceback (most recent call last):
File "/home/runner/work/cpython/cpython-ro-srcdir/Lib/asyncio/__main__.py", line 109, in run
raise OSError(errno.ENOTTY, "tty required", "stdin")
OSError: [Errno 25] tty required: 'stdin'
During handling of the above exception, another exception occurred:
exiting asyncio REPL...
Traceback (most recent call last):
Fatal Python error: _enter_buffered_busy: could not acquire lock for <_io.BufferedWriter name='<stderr>'> at interpreter shutdown, possibly due to daemon threads
Python runtime state: finalizing (tstate=0x000055910f31bbf0)
Current thread 0x00007fa49bcdb740 (most recent call first):
<no Python frame>
---
----------------------------------------------------------------------
Ran 8 tests in 3.[354](https://github.com/python/cpython/actions/runs/9331095550/job/25685390386?pr=119908#step:22:355)s
FAILED (failures=1)
test test_repl failed
Linked PRs
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
testsTests in the Lib/test dirTests in the Lib/test dirtopic-asynciotopic-replRelated to the interactive shellRelated to the interactive shelltype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or errortype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
Projects
- StatusShow more project fieldsDone
Activity
[-]Flaky test [/-][+]Flaky test `test_asyncio_repl_is_ok`[/+][-]Flaky test `test_asyncio_repl_is_ok`[/-][+]Flaky test `test_asyncio_repl_is_ok` in `test_repl`[/+]gvanrossum commentedon Jun 1, 2024
Maybe @ambv or @pablogsal has a clue?
Eclips4 commentedon Jun 1, 2024
It's look related to the 2237946
ambv commentedon Jun 3, 2024
The REPL fails to start because of stdin is not a tty:
I'm fixing that case to revert to the classic REPL in this scenario.
ambv commentedon Jun 4, 2024
I will need a better way to reproduce this. Inside
asyncio/__main__.pythe raisedOSErrorin my code example is being handled by anexcept:block that indeed runs the old REPL in the case of a missing TTY. So there's nothing to fix there. I can force this path locally withnohup ./python.exe -m asyncioand it does what's expected.So to see the exception bubble up as in the failing test, this must be a combination of this code running from a secondary daemon thread at interpreter shutdown.
dev-lang/python: skip test_repl for now
Eclips4 commentedon Jun 30, 2024
Can we skip it for now? I've seen it very often when when I running the test suite in "hunt refleaks" mode
vstinner commentedon Jul 2, 2024
When _enter_buffered_busy hangs, I also get a different error message if stdin is not a TTY:
NameError: name 'exit_message' is not defined.@ambv added
console.interact(banner="", exitmsg=exit_message)line in commit 2237946 one month ago.gh-119909: Fix ``NameError`` in ``asyncio`` REPL (#121341)
pythongh-119909: Fix ``NameError`` in ``asyncio`` REPL (pythonGH-121341)
[3.13] gh-119909: Fix ``NameError`` in ``asyncio`` REPL (GH-121341) (#…
vstinner commentedon Jul 6, 2024
Fixed by change 1143894: I can no longer reproduce the bug.
pythongh-119909: Fix ``NameError`` in ``asyncio`` REPL (python#121341)
pythongh-119909: Fix ``NameError`` in ``asyncio`` REPL (python#121341)