[12/Aug/2017:16:53:59] Caught exception
Traceback (most recent call last):
File "/code/coverart_redirect/server.py", line 64, in __call__
with closing(self.engine.connect()) as conn:
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1221, in connect
return self.Connection(self, **kwargs)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 531, in __init__
self.__connection = connection or engine.raw_connection()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1276, in raw_connection
return self.pool.unique_connection()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool.py", line 119, in unique_connection
return _ConnectionFairy(self).checkout()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool.py", line 304, in __init__
rec = self._connection_record = pool.get()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool.py", line 161, in get
return self.do_get()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/pool.py", line 631, in do_get
raise exc.TimeoutError("QueuePool limit of size %d overflow %d reached, connection timed out, timeout %d" % (self.size(), self.overflow(), self._timeout))
TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30
SQLAlchemy invalidates the connection, we could check and handle that.
For read only queries, it could be just a loop with delay, so code will handle short disconnections.
For reference: http://docs.sqlalchemy.org/en/latest/core/pooling.html#dealing-with-disconnects