Open chmeldax opened 9 months ago
same issue, in my case, pool_recycle=3600, mysql wait_timeout is 28800
Logs/tracebacks
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/session.py", line 461, in execute
result = await greenlet_spawn(
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 201, in greenlet_spawn
result = context.throw(*sys.exc_info())
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
return self._execute_internal(
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2226, in _execute_internal
conn = self._connection_for_bind(bind)
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2095, in _connection_for_bind
return trans._connection_for_bind(engine, execution_options)
File "<string>", line 2, in _connection_for_bind
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go
ret_value = fn(self, *arg, **kw)
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1189, in _connection_for_bind
conn = bind.connect()
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3276, in connect
return self._connection_cls(self)
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 1362, in _checkout
with util.safe_reraise():
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 1300, in _checkout
result = pool._dialect._do_ping_w_event(
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 715, in _do_ping_w_event
return self.do_ping(dbapi_connection)
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 107, in do_ping
dbapi_connection.ping(False)
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 185, in ping
return self.await_(self._connection.ping(reconnect))
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 131, in await_only
return current.driver.switch(awaitable) # type: ignore[no-any-return]
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
File "/usr/local/lib/python3.10/site-packages/aiomysql/connection.py", line 493, in ping
await self._execute_command(COMMAND.COM_PING, "")
File "/usr/local/lib/python3.10/site-packages/aiomysql/connection.py", line 724, in _execute_command
self._write_bytes(prelude + sql[:chunk_size - 1])
File "/usr/local/lib/python3.10/site-packages/aiomysql/connection.py", line 669, in _write_bytes
return self._writer.write(data)
File "/usr/local/lib/python3.10/asyncio/streams.py", line 325, in write
self._transport.write(data)
File "uvloop/handles/stream.pyx", line 674, in uvloop.loop.UVStream.write
File "uvloop/handles/handle.pyx", line 159, in uvloop.loop.UVHandle._ensure_alive
RuntimeError: unable to perform operation on <TCPTransport closed=True reading=False 0x55a968d3bf20>; the handler is closed
SQLAlchemy
Version: 2.0.30
PyMySQL
Version: 1.1.0
aiomysql
Version: 0.2.0
uvloop
Version: 0.19.0
mariadb
10.3.5
Debian GNU/Linux 11 (bullseye)
and here is a related pr https://github.com/aio-libs/aiomysql/pull/982/files
try:
return self._writer.write(data)
except RuntimeError as e:
self.close()
Describe the bug
When using
aiomysql
withuvloop==0.17.0
, whenever MySQL closes a connection (due towait_timeout
), the subsequent pre-ping command fails with:This bug does not occur when
uvloop
is not used. Not sure whether to raise the issue withuvloop
instead.Might be related to https://github.com/aio-libs/aiomysql/issues/195?
To Reproduce
uvloop==0.17.0
anduvicorn==0.23.2
.pre_ping=True
andpool_recycle
not set.wait_timeout
.Expected behavior
The pre-ping request should succeed, and the HTTP request should succeed as well.
Logs/tracebacks
Python Version
aiomysql Version
PyMySQL Version
SQLAlchemy Version
OS
Ubuntu 20.04.4 LTS
Database type and version
Additional context
No response
Code of Conduct