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.
This commit is contained in:
jobrauer
2020-06-17 11:14:49 +02:00
parent 34aa4d42c8
commit 8a5bf3a579
2 changed files with 3 additions and 3 deletions

View File

@@ -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

View File

@@ -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),
)