-
Notifications
You must be signed in to change notification settings - Fork 0
/
pool.py
22 lines (20 loc) · 914 Bytes
/
pool.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#-*- coding: utf-8 -*-
from twisted.enterprise import adbapi
import psycopg2
class psycopgConnectionPool( adbapi.ConnectionPool ):
"""
Fail-tolerant psycopg2 connection pool
"""
def __init__( self, *connargs, **connkw ):
return adbapi.ConnectionPool.__init__( self, 'psycopg2', *connargs, **connkw )
def _runInteraction( self, interaction, *args, **kw ):
try:
return adbapi.ConnectionPool._runInteraction( self, interaction, *args, **kw )
except psycopg2.OperationalError, e:
if e[ 0 ] not in ( 2006, 2013 ):
raise
logger.err( "ConnectionPool got error %s, retrying operation" % ( e ) )
conn = self.connections.get( self.threadID() )
self.disconnect( conn )
# try the interaction again
return adbapi.ConnectionPool._runInteraction( self, interaction, *args, **kw )