fix: unclosed sessions (#1734)

* resolve session leak

* cleanup session management functions
This commit is contained in:
Hayden
2022-10-17 14:11:40 -08:00
committed by GitHub
parent a3904c45d8
commit e516a2e801
12 changed files with 132 additions and 90 deletions

View File

@@ -3,7 +3,7 @@ from typing import Optional
from pydantic import UUID4
from mealie.db.db_setup import create_session
from mealie.db.db_setup import session_context
from mealie.repos.all_repositories import get_repositories
from mealie.schema.response.pagination import PaginationQuery
from mealie.services.event_bus_service.event_bus_service import EventBusService
@@ -31,10 +31,11 @@ def post_group_webhooks(start_dt: Optional[datetime] = None, group_id: Optional[
if group_id is None:
# publish the webhook event to each group's event bus
session = create_session()
repos = get_repositories(session)
groups_data = repos.groups.page_all(PaginationQuery(page=1, per_page=-1))
group_ids = [group.id for group in groups_data.items]
with session_context() as session:
repos = get_repositories(session)
groups_data = repos.groups.page_all(PaginationQuery(page=1, per_page=-1))
group_ids = [group.id for group in groups_data.items]
else:
group_ids = [group_id]

View File

@@ -3,7 +3,7 @@ from pathlib import Path
from mealie.core import root_logger
from mealie.core.config import get_app_dirs
from mealie.db.db_setup import create_session
from mealie.db.db_setup import session_context
from mealie.db.models.group.exports import GroupDataExportsModel
ONE_DAY_AS_MINUTES = 1440
@@ -15,20 +15,19 @@ def purge_group_data_exports(max_minutes_old=ONE_DAY_AS_MINUTES):
logger.info("purging group data exports")
limit = datetime.datetime.now() - datetime.timedelta(minutes=max_minutes_old)
session = create_session()
results = session.query(GroupDataExportsModel).filter(GroupDataExportsModel.expires <= limit)
with session_context() as session:
results = session.query(GroupDataExportsModel).filter(GroupDataExportsModel.expires <= limit)
total_removed = 0
for result in results:
session.delete(result)
Path(result.path).unlink(missing_ok=True)
total_removed += 1
total_removed = 0
for result in results:
session.delete(result)
Path(result.path).unlink(missing_ok=True)
total_removed += 1
session.commit()
session.close()
session.commit()
logger.info(f"finished purging group data exports. {total_removed} exports removed from group data")
logger.info(f"finished purging group data exports. {total_removed} exports removed from group data")
def purge_excess_files() -> None:

View File

@@ -1,7 +1,7 @@
import datetime
from mealie.core import root_logger
from mealie.db.db_setup import create_session
from mealie.db.db_setup import session_context
from mealie.db.models.users.password_reset import PasswordResetModel
logger = root_logger.get_logger()
@@ -13,8 +13,9 @@ def purge_password_reset_tokens():
"""Purges all events after x days"""
logger.info("purging password reset tokens")
limit = datetime.datetime.now() - datetime.timedelta(days=MAX_DAYS_OLD)
session = create_session()
session.query(PasswordResetModel).filter(PasswordResetModel.created_at <= limit).delete()
session.commit()
session.close()
logger.info("password reset tokens purges")
with session_context() as session:
session.query(PasswordResetModel).filter(PasswordResetModel.created_at <= limit).delete()
session.commit()
session.close()
logger.info("password reset tokens purges")

View File

@@ -1,7 +1,7 @@
import datetime
from mealie.core import root_logger
from mealie.db.db_setup import create_session
from mealie.db.db_setup import session_context
from mealie.db.models.group import GroupInviteToken
logger = root_logger.get_logger()
@@ -13,8 +13,10 @@ def purge_group_registration():
"""Purges all events after x days"""
logger.info("purging expired registration tokens")
limit = datetime.datetime.now() - datetime.timedelta(days=MAX_DAYS_OLD)
session = create_session()
session.query(GroupInviteToken).filter(GroupInviteToken.created_at <= limit).delete()
session.commit()
session.close()
with session_context() as session:
session.query(GroupInviteToken).filter(GroupInviteToken.created_at <= limit).delete()
session.commit()
session.close()
logger.info("registration token purged")

View File

@@ -1,5 +1,5 @@
from mealie.core import root_logger
from mealie.db.db_setup import with_session
from mealie.db.db_setup import session_context
from mealie.repos.repository_factory import AllRepositories
from mealie.services.user_services.user_service import UserService
@@ -8,7 +8,7 @@ def locked_user_reset():
logger = root_logger.get_logger()
logger.info("resetting locked users")
with with_session() as session:
with session_context() as session:
repos = AllRepositories(session)
user_service = UserService(repos)