Re: [Sqlalchemy-tickets] [sqlalchemy] #2536: ResourceClosedError can sometimes be raised instead of
Brought to you by:
zzzeek
From: sqlalchemy <mi...@zz...> - 2012-07-19 18:56:00
|
#2536: ResourceClosedError can sometimes be raised instead of more appropriate OperationalError ----------------------------------+------------------------------------ Reporter: jerdfelt | Owner: Type: defect | Status: new Priority: medium | Milestone: Component: access | Severity: no triage selected yet Resolution: | Keywords: Progress State: awaiting triage | ----------------------------------+------------------------------------ Comment (by jerdfelt): I have to say, your test cases has me confused for a bit. Your second test doesn't need table a anymore. It's entirely reproducible without it. I was initially confused why you used a different error (lock timeout versus deadlock) especially since it's not any faster as originally described (both wait 1 second). But when removing the a table, it results in a simpler test case. As an aside, setting innodb_lock_wait_timeout at runtime isn't reliable (which apparently is only possible when using a plugin and not built-in to the MySQL daemon). I had to manually change my.cnf and restart mysqld to run your test case. I was also confused why your test case does a select on a non-indexed column instead of using the in operator like my original test case, but it appears to be similar enough in that it appears to force a table scan and an attempt to lock the same row already locked in the other connection. If I change the bad test case to use this query: run_test("SELECT * FROM b WHERE b.id in (1, 2) FOR UPDATE") then it fails the same way as your example (but oddly, raises an exception correctly if it's just "WHERE b.id in (1) FOR UPDATE"). Anyway, it appears that your test case reproduces the same bug in MySQLdb since looking at the socket data shows a Lock wait timeout exceeded error that doesn't get raised. Thanks for the help. I can followup with the MySQLdb project if you don't have plans to yourself. -- Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2536#comment:5> sqlalchemy <http://www.sqlalchemy.org/> The Database Toolkit for Python |