Skip to content

Commit 1d1ef00

Browse files
committed
removed confusion
1 parent d06f6c2 commit 1d1ef00

File tree

3 files changed

+35
-98
lines changed

3 files changed

+35
-98
lines changed

packages/service-library/src/servicelib/db_async_engine.py

Lines changed: 0 additions & 96 deletions
This file was deleted.

packages/service-library/src/servicelib/db_asyncpg_utils.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import contextlib
12
import logging
23
import time
4+
from collections.abc import AsyncIterator
35
from datetime import timedelta
46

57
from models_library.healthchecks import IsNonResponsive, IsResponsive, LivenessResult
@@ -8,6 +10,7 @@
810
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
911
from tenacity import retry
1012

13+
from .logging_utils import log_context
1114
from .retry_policies import PostgresRetryPolicyUponInitialization
1215

1316
_logger = logging.getLogger(__name__)
@@ -64,3 +67,34 @@ async def check_postgres_liveness(engine: AsyncEngine) -> LivenessResult:
6467
return IsResponsive(elapsed=timedelta(seconds=elapsed_time))
6568
except SQLAlchemyError as err:
6669
return IsNonResponsive(reason=f"{err}")
70+
71+
72+
@contextlib.asynccontextmanager
73+
async def with_async_pg_engine(
74+
settings: PostgresSettings,
75+
) -> AsyncIterator[AsyncEngine]:
76+
"""
77+
Creates an asyncpg engine and ensures it is properly closed after use.
78+
"""
79+
try:
80+
with log_context(
81+
_logger,
82+
logging.DEBUG,
83+
f"connection to db {settings.dsn_with_async_sqlalchemy}",
84+
):
85+
server_settings = None
86+
if settings.POSTGRES_CLIENT_NAME:
87+
assert isinstance(settings.POSTGRES_CLIENT_NAME, str)
88+
89+
engine = create_async_engine(
90+
settings.dsn_with_async_sqlalchemy,
91+
pool_size=settings.POSTGRES_MINSIZE,
92+
max_overflow=settings.POSTGRES_MAXSIZE - settings.POSTGRES_MINSIZE,
93+
connect_args={"server_settings": server_settings},
94+
pool_pre_ping=True, # https://docs.sqlalchemy.org/en/14/core/pooling.html#dealing-with-disconnects
95+
future=True, # this uses sqlalchemy 2.0 API, shall be removed when sqlalchemy 2.0 is released
96+
)
97+
yield engine
98+
finally:
99+
with log_context(_logger, logging.DEBUG, f"db disconnect of {engine}"):
100+
await engine.dispose()

services/storage/src/simcore_service_storage/modules/db/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import logging
22

33
from fastapi import FastAPI
4-
from servicelib.db_async_engine import close_db_connection
5-
from servicelib.fastapi.db_asyncpg_engine import connect_to_db
4+
from servicelib.fastapi.db_asyncpg_engine import close_db_connection, connect_to_db
65
from servicelib.retry_policies import PostgresRetryPolicyUponInitialization
76
from sqlalchemy.ext.asyncio import AsyncEngine
87
from tenacity import retry

0 commit comments

Comments
 (0)