Skip to content

Commit 65c4a2e

Browse files
dancebmanisandro
andauthored
Further improvements for db pooling (#18)
* Convert pooling ENV to integer * Add ENV to enable db pooling --------- Co-authored-by: Sandro Mani <manisandro@gmail.com>
1 parent 97b7bb8 commit 65c4a2e

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Environment variables
2424
| `TENANT_HEADER` | `<empty>` | The name of the HTTP header which contains the tenant name for multi-tenant setups. |
2525
| `TENANT_PATH_PREFIX` | `@service_prefix@/@tenant@` | URL path prefix for all QWC services for multi-tenant setups. |
2626
| `TENANT_ACCESS_COOKIE_PATH` | `<tenant_path_prefix>` | Path for which the access cookie is valid for multi-tenant setups. |
27+
| `ENABLE_POOLING` | `False` | Enable db connection pooling. Defaults are used, if the following ENV are not set. |
2728
| `POOL_SIZE` | `5` | Maximum number of possible data base connections. |
2829
| `MAX_OVERFLOW` | `10` | Additional connections beyond pool_size during peak load. |
2930
| `POOL_TIMEOUT` | `30` | Time (in seconds) to wait for a connection to become available. |

qwc_services_core/database.py

+17-12
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,26 @@ def db_engine(self, conn_str):
1818
see https://docs.sqlalchemy.org/en/latest/core/engines.html#postgresql
1919
"""
2020

21-
db_pool_size = os.environ.get('POOL_SIZE', 5)
22-
db_max_overflow = os.environ.get('MAX_OVERFLOW', 10)
23-
db_pool_timeout = os.environ.get('POOL_TIMEOUT', 30)
24-
db_pool_recycle = os.environ.get('POOL_RECYCLE', -1)
21+
db_enable_pooling = os.environ.get('ENABLE_POOLING', 'False').lower() in ('t', 'true')
22+
db_pool_size = int(os.environ.get('POOL_SIZE', 5))
23+
db_max_overflow = int(os.environ.get('MAX_OVERFLOW', 10))
24+
db_pool_timeout = int(os.environ.get('POOL_TIMEOUT', 30))
25+
db_pool_recycle = int(os.environ.get('POOL_RECYCLE', -1))
2526

2627
engine = self.engines.get(conn_str)
2728
if not engine:
28-
engine = create_engine(
29-
conn_str,
30-
poolclass=QueuePool,
31-
pool_size=db_pool_size,
32-
max_overflow=db_max_overflow,
33-
pool_timeout=db_pool_timeout,
34-
pool_recycle=db_pool_recycle,
35-
pool_pre_ping=True, echo=False)
29+
if db_enable_pooling:
30+
engine = create_engine(
31+
conn_str,
32+
poolclass=QueuePool,
33+
pool_size=db_pool_size,
34+
max_overflow=db_max_overflow,
35+
pool_timeout=db_pool_timeout,
36+
pool_recycle=db_pool_recycle,
37+
pool_pre_ping=True, echo=False)
38+
else:
39+
engine = create_engine(
40+
conn_str, pool_pre_ping=True, echo=False)
3641
self.engines[conn_str] = engine
3742
return engine
3843

0 commit comments

Comments
 (0)