diff mbox series

[v2] hashserv: Re-enable connection pooling with psycopg 3 driver

Message ID 20240223132731.2164299-1-tobiasha@axis.com
State Accepted, archived
Commit 4fe05513b5314c201725e3f8ad54f58d70c56258
Headers show
Series [v2] hashserv: Re-enable connection pooling with psycopg 3 driver | expand

Commit Message

Tobias Hagelborn Feb. 23, 2024, 1:27 p.m. UTC
Re-enable connection pooling in case `postgresql+psygopg` driver
is used. Async connection pooling is supported in psycopg 3 [psycopg]
driver in SQLAlchemy. Allow the connection pool to grow to
arbitrary size.

Signed-off-by: Tobias Hagelborn <tobiasha@axis.com>
---

Added unlimited pool size.
Validated with local stress tests and real builds.

 lib/hashserv/sqlalchemy.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/lib/hashserv/sqlalchemy.py b/lib/hashserv/sqlalchemy.py
index fc3ae3d33..f7b0226a7 100644
--- a/lib/hashserv/sqlalchemy.py
+++ b/lib/hashserv/sqlalchemy.py
@@ -129,7 +129,11 @@  class DatabaseEngine(object):
             return inspect(conn).has_table(name)
 
         self.logger.info("Using database %s", self.url)
-        self.engine = create_async_engine(self.url, poolclass=NullPool)
+        if self.url.drivername == 'postgresql+psycopg':
+            # Psygopg 3 (psygopg) driver can handle async connection pooling
+            self.engine = create_async_engine(self.url, max_overflow=-1)
+        else:
+            self.engine = create_async_engine(self.url, poolclass=NullPool)
 
         async with self.engine.begin() as conn:
             # Create tables