[MERGE] sql_db: autodetect dead connections and discard them

lp bug: https://launchpad.net/bugs/905257 fixed

bzr revid: odo@openerp.com-20130215125313-448n5b0dluei8qm3
This commit is contained in:
Olivier Dony 2013-02-15 13:53:13 +01:00
commit b005d052d0
1 changed files with 10 additions and 2 deletions

View File

@ -3,7 +3,7 @@
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
# Copyright (C) 2010-2011 OpenERP s.a. (<http://openerp.com>).
# Copyright (C) 2010-2013 OpenERP s.a. (<http://openerp.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -398,8 +398,16 @@ class ConnectionPool(object):
def borrow(self, dsn):
self._debug('Borrow connection to %r', dsn)
# free leaked connections
# free dead and leaked connections
for i, (cnx, _) in tools.reverse_enumerate(self._connections):
try:
cnx.reset()
except psycopg2.OperationalError:
self._debug('Cannot reset connection at index %d: %r', i, cnx.dsn)
# psycopg2 2.4.4 and earlier do not allow closing a closed connection
if cnx.closed:
cnx.close()
if cnx.closed:
self._connections.pop(i)
self._debug('Removing closed connection at index %d: %r', i, cnx.dsn)