Skip to content

Commit e097682

Browse files
authored
Merge pull request #6 from informatics-isi-edu/postgres_pool_close_finally
Postgres pool close finally
2 parents 1e6aaf1 + 67c8a88 commit e097682

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

credenza/api/session/storage/backends/postgresql.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ def _get_conn(self):
9191
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED)
9292
return conn
9393

94-
def _put_conn(self, conn):
94+
def _put_conn(self, conn, close=False):
9595
if conn is not None:
9696
if self.trace:
97-
logger.debug(f"Returning connection to pool dsn={conn.dsn} status={conn.status}")
98-
self.pool.putconn(conn)
97+
logger.debug(f"Returning connection to pool dsn={conn.dsn} status={conn.status} close={close}")
98+
self.pool.putconn(conn, close=close)
9999

100100
def close(self):
101101
"""
@@ -111,13 +111,24 @@ def close(self):
111111
def _pooled_execute_stmt(self, sql, params, resultfunc=lambda cur: None):
112112
"""Execute and commit one statement on a pooled connection, returning result of resultfunc applied to cursor.
113113
"""
114-
conn = self._get_conn()
115-
with conn.cursor() as cur:
116-
cur.execute(sql, params)
117-
result = resultfunc(cur)
118-
conn.commit()
119-
self._put_conn(conn)
120-
return result
114+
conn = None
115+
error = 'unknown error'
116+
try:
117+
conn = self._get_conn()
118+
with conn.cursor() as cur:
119+
cur.execute(sql, params)
120+
result = resultfunc(cur)
121+
conn.commit()
122+
self._put_conn(conn)
123+
conn = None
124+
return result
125+
except Exception as e:
126+
error = e
127+
raise
128+
finally:
129+
if conn is not None:
130+
logger.warning(f"Closing pooled connection due to error={error}")
131+
self._put_conn(conn, close=True)
121132

122133
def setex(self, key: str, value: Union[str, bytes], ttl: int) -> None:
123134
expires_at = time.time() + ttl

0 commit comments

Comments
 (0)