diff --git a/changelog.d/20240209_171518_roman_handle_after_transaction.md b/changelog.d/20240209_171518_roman_handle_after_transaction.md index 8461dd14f670..c5451b252927 100644 --- a/changelog.d/20240209_171518_roman_handle_after_transaction.md +++ b/changelog.d/20240209_171518_roman_handle_after_transaction.md @@ -3,4 +3,5 @@ - Side effects of data changes, such as the sending of webhooks, are no longer triggered until after the changes have been committed to the database - () + (, + ) diff --git a/cvat/apps/events/event.py b/cvat/apps/events/event.py index 361bd19984a2..9751368ae086 100644 --- a/cvat/apps/events/event.py +++ b/cvat/apps/events/event.py @@ -6,6 +6,8 @@ from datetime import datetime, timezone from typing import Optional +from django.db import transaction + from cvat.apps.engine.log import vlogger def event_scope(action, resource): @@ -39,6 +41,7 @@ def record_server_event( scope: str, request_id: Optional[str], payload: Optional[dict] = None, + on_commit: bool = False, **kwargs, ) -> None: payload = payload or {} @@ -59,7 +62,12 @@ def record_server_event( **kwargs, } - vlogger.info(JSONRenderer().render(data).decode('UTF-8')) + rendered_data = JSONRenderer().render(data).decode('UTF-8') + + if on_commit: + transaction.on_commit(lambda: vlogger.info(rendered_data), robust=True) + else: + vlogger.info(rendered_data) class EventScopeChoice: diff --git a/cvat/apps/events/handlers.py b/cvat/apps/events/handlers.py index eb74fa110280..cda8fd4bb7a5 100644 --- a/cvat/apps/events/handlers.py +++ b/cvat/apps/events/handlers.py @@ -281,6 +281,7 @@ def handle_create(scope, instance, **kwargs): record_server_event( scope=scope, request_id=request_id(), + on_commit=True, obj_id=getattr(instance, 'id', None), obj_name=_get_object_name(instance), org_id=oid, @@ -313,6 +314,7 @@ def handle_update(scope, instance, old_instance, **kwargs): record_server_event( scope=scope, request_id=request_id(), + on_commit=True, obj_name=prop, obj_id=getattr(instance, f'{prop}_id', None), obj_val=str(change["new_value"]), @@ -364,6 +366,7 @@ def handle_delete(scope, instance, store_in_deletion_cache=False, **kwargs): record_server_event( scope=scope, request_id=request_id(), + on_commit=True, obj_id=getattr(instance, 'id', None), obj_name=_get_object_name(instance), org_id=oid, @@ -405,6 +408,7 @@ def filter_shape_data(shape): record_server_event( scope=event_scope(action, "tags"), request_id=request_id(), + on_commit=True, count=len(tags), org_id=oid, org_slug=oslug, @@ -427,6 +431,7 @@ def filter_shape_data(shape): record_server_event( scope=scope, request_id=request_id(), + on_commit=True, obj_name=shape_type, count=len(shapes), org_id=oid, @@ -455,6 +460,7 @@ def filter_shape_data(shape): record_server_event( scope=scope, request_id=request_id(), + on_commit=True, obj_name=track_type, count=len(tracks), org_id=oid,