[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:
commit
b005d052d0
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue