agesys-dev team mailing list archive
-
agesys-dev team
-
Mailing list archive
-
Message #00078
[Bug 838120] Re: Queries crash on expired connection in pool.
stephen, thanks very much for the fix, when will 0.9.3 be released? and
i'm curious as i've been running 0.9.2 for awhile now and why this
wasn't available before; perhaps my app architecture is not optimal?
i run the following:
mysql -> oursql -> sqlalchemy -> tornado web -> supervisord
supervisord is a python utility that basically allows me to run a set of
tornado processes as daemons so i noticed that after 8 hours, the mysql
connection seems to go stale and my app doesn't respond.
i set the sqlalchemy connection parameter called pool_recycle=3600, but
i imagine 0.9.2 doesn't pass this down to the mysql layer.
perhaps my architecture is just completely wrong. anyway, thanks for
the excellent work, keep it up.
--
You received this bug notification because you are a member of Agesys
Team, which is subscribed to oursql.
https://bugs.launchpad.net/bugs/838120
Title:
Queries crash on expired connection in pool.
Status in oursql:
Fix Committed
Bug description:
I have a low traffic website that I maintain for my Universities ACM
student chapter. It wasn't visited in a while since it was the summer.
When I visited the site it had an error. However, when I refreshed it
worked fine. This has happened before. Upon investigating the stack
trace, it appears to be OurSQL trying to use a dead connection to the
MySQL database. This might only be a problem for a low traffic site,
but I thought I should report it any way. If you need any more
information I would be happy to oblige.
- Ubuntu 10.10
- mysqld Ver 5.1.49-1ubuntu8.1 for debian-linux-gnu on x86_64 ((Ubuntu))
- mysql Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (x86_64) using readline 6.1
- oursql.__version__ => '0.9.2'
crashing query:
(SQL Alchemy)
Session.query.filter(
func.timestampdiff(text('MINUTE'),
Session.last_update,
datetime.utcnow()) > self.timeout
).delete(False)
related model:
CREATE TABLE IF NOT EXISTS `session` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`sig` tinyblob,
`sigkey` tinyblob,
`micro` tinyblob,
`csrf` tinyblob,
`user_id` int(11) DEFAULT NULL,
`last_update` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ix_session_key` (`key`),
KEY `user_id` (`user_id`),
KEY `ix_session_last_update` (`last_update`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3179 ;
--
-- Dumping data for table `session`
--
## Note I slightly sanitized these rows to remove the sensitive
private session information.
INSERT INTO `session` (`id`, `key`, `sig`, `sigkey`, `micro`, `csrf`, `user_id`, `last_update`) VALUES
(3177, '36e7afddea1ee9d792a78311088ef6533262dc4e80b2db5b8d84c816712258d5', 0xd3529078bb69fcc88a8d2178fc2462f119d2ae3a279f998206486f21c3bd0d4c, 0x5040dae9187c9efbb16df682acd11c229ae7d655b5d55a9d4d88d63021f9e113, 0x0cad0f, NULL, NULL, '2011-08-31 13:22:26'),
(3178, '502874eee83fc787c5201e4d7e8788decd59850b0e04516885cc3d12da5a9d4d', 0x5a9d4d67cb057c3012a7a570374b26fb0ca712ee8b1b287bca49bdfeda0df206, 0x132a73ba9ad042b837a5a9d4d1546b5ff9fac5d20a63441d9505ce499805b6c0, 0xeca881, NULL, 1, '2011-08-31 13:42:02');
traceback:
[20110831-09:24AM] [forhireapp] [ERROR] Exception on / [GET]
Traceback (most recent call last):
File "/home/deploy/apps/hackerweb/env/lib/python2.7/site-packages/flask/app.py", line 876, in wsgi_app
rv = self.dispatch_request()
File "/home/deploy/apps/hackerweb/env/lib/python2.7/site-packages/flask/app.py", line 695, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "./lib/supersession.py", line 78, in catcher
session = self.getsession()
File "./lib/supersession.py", line 66, in getsession
self.clear_old_sessions()
File "./lib/supersession.py", line 36, in clear_old_sessions
).delete(False)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/orm/query.py", line 2143, in delete
result = session.execute(delete_stmt, params=self._params)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/orm/session.py", line 719, in execute
return self._connection_for_bind(engine, close_with_result=True).execute(
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/orm/session.py", line 660, in _connection_for_bind
return self.transaction._connection_for_bind(engine)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/orm/session.py", line 343, in _connection_for_bind
transaction = conn.begin()
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/engine/base.py", line 1017, in begin
self.__transaction = RootTransaction(self)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/engine/base.py", line 1554, in __init__
self.connection._begin_impl()
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/engine/base.py", line 1076, in _begin_impl
self._handle_dbapi_exception(e, None, None, None, None)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/engine/base.py", line 1074, in _begin_impl
self.engine.dialect.do_begin(self.connection)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.6-py2.7.egg/sqlalchemy/dialects/mysql/oursql.py", line 101, in do_begin
connection.cursor().execute('BEGIN', plain_query=True)
File "cursor.pyx", line 107, in oursql.Cursor.execute (oursqlx/oursql.c:15745)
File "cursor.pyx", line 70, in oursql.Cursor._new_query (oursqlx/oursql.c:15397)
File "query.pyx", line 137, in oursql._Query.__cinit__ (oursqlx/oursql.c:14254)
File "query.pyx", line 154, in oursql._Query._raise_error (oursqlx/oursql.c:14506)
File "connection.pyx", line 180, in oursql.Connection._raise_error (oursqlx/oursql.c:5440)
OperationalError: (OperationalError) (2006, 'MySQL server has gone away', None) None None
To manage notifications about this bug go to:
https://bugs.launchpad.net/oursql/+bug/838120/+subscriptions
References