Repository navigation
Flaky test test_asyncio_repl_is_ok in test_repl #119909
Description
Activity
- addedtype-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
on Jun 1, 2024 - changed the title
[-]Flaky test `test_asyncio_repl_is_ok`[/-][+]Flaky test `test_asyncio_repl_is_ok` in `test_repl`[/+]on Jun 1, 2024 - addedtopic-replRelated to the interactive shellRelated to the interactive shell
on Jun 1, 2024 Maybe @ambv or @pablogsal has a clue?
It's look related to the 2237946
The REPL fails to start because of stdin is not a tty:
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'I'm fixing that case to revert to the classic REPL in this scenario.
Reacted by Kirill PodoprigoraI 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.
- added a commit that references this issue
on Jun 18, 2024 Can we skip it for now? I've seen it very often when when I running the test suite in "hunt refleaks" mode
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.asyncio REPL 3.14.0a0 (heads/unicode_native-dirty:f3857d87958, Jul 1 2024, 17:40:44) [GCC 14.1.1 20240620 (Red Hat 14.1.1-6)] 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/vstinner/python/main/Lib/asyncio/__main__.py", line 110, in run raise OSError(errno.ENOTTY, "tty required", "stdin") OSError: [Errno 25] tty required: 'stdin' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/vstinner/python/main/Lib/threading.py", line 1039, in _bootstrap_inner self.run() ~~~~~~~~^^ exiting asyncio REPL... File "/home/vstinner/python/main/Lib/asyncio/__main__.py", line 120, in run console.interact(banner="", exitmsg=exit_message) ^^^^^^^^^^^^ NameError: name 'exit_message' is not defined 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=0x0000000000988b28) Current thread 0x00007fab8fda4740 (most recent call first): <no Python frame>@ambv added
console.interact(banner="", exitmsg=exit_message)line in commit 2237946 one month ago.- added a commit that references this issue
on Jul 6, 2024 Fixed by change 1143894: I can no longer reproduce the bug.
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
The test fails because the running the asyncio repl exits with:
I'm not sure if this is just a flaky test (i.e,
_enter_buffered_busyfailures are expected), or if it's a bug in the underlying repl.The exit code
-6means the process crashes due to anabort(), I think.Example: https://github.com/python/cpython/actions/runs/9331095550/job/25685390386?pr=119908
Test Output
Linked PRs
NameErrorinasyncioREPL #121341NameErrorinasyncioREPL (GH-121341) #121447