From 8a5bf3a579ca5234ec782385db3d9d461767a398 Mon Sep 17 00:00:00 2001 From: jobrauer Date: Jul 13 2020 05:55:45 +0000 Subject: Move ComponentBuildTrace creation from before_commit to before_flush Since ComponentBuildTrace(s) get created with db_session.commit() call, is is not possible to commit more items in bulk if they already have been flushed. Current unit-tests' setup can be significantly sped up if items can be quickly flushed on the fly and bulk-commited only once at the end. Moreover in general it seems more appropriate/safer to handle this in before_flush as any implicit or accidental flush could cause new build traces not to be created at all. As flush is implicitly called before every commit anyway, this change shouldn't pose any harm. --- diff --git a/module_build_service/common/models.py b/module_build_service/common/models.py index 5a733fa..398f1df 100644 --- a/module_build_service/common/models.py +++ b/module_build_service/common/models.py @@ -1302,7 +1302,7 @@ class LogMessage(MBSBase): ) -def session_before_commit_handlers(session): +def session_before_flush_handlers(session, flush_context, instances): # new and updated items for item in set(session.new) | set(session.dirty): # handlers for component builds diff --git a/module_build_service/scheduler/db_session.py b/module_build_service/scheduler/db_session.py index 580aed4..b91e373 100644 --- a/module_build_service/scheduler/db_session.py +++ b/module_build_service/scheduler/db_session.py @@ -8,7 +8,7 @@ from sqlalchemy.orm import scoped_session, sessionmaker from module_build_service.common.config import conf from module_build_service.common.models import ( - session_before_commit_handlers, send_message_after_module_build_state_change + session_before_flush_handlers, send_message_after_module_build_state_change ) __all__ = ("db_session",) @@ -19,7 +19,7 @@ def _setup_event_listeners(db_session): Starts listening for events related to the database session. """ event_hooks = ( - ("before_commit", session_before_commit_handlers), + ("before_flush", session_before_flush_handlers), ("after_commit", send_message_after_module_build_state_change), )