From b9761d6436efa9392317725afd57dd42fe84f6aa Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Sun, 19 Aug 2018 17:39:45 +0200 Subject: [PATCH] Fixed #397: broken federation import on big imports due to missing transaction logic --- api/funkwhale_api/federation/serializers.py | 4 +++- api/tests/federation/test_views.py | 7 +++++-- changes/changelog.d/397.bugfix | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 changes/changelog.d/397.bugfix diff --git a/api/funkwhale_api/federation/serializers.py b/api/funkwhale_api/federation/serializers.py index fc694c59..304253aa 100644 --- a/api/funkwhale_api/federation/serializers.py +++ b/api/funkwhale_api/federation/serializers.py @@ -796,6 +796,8 @@ class LibraryTrackActionSerializer(common_serializers.ActionSerializer): jobs.append(job) music_models.ImportJob.objects.bulk_create(jobs) - music_tasks.import_batch_run.delay(import_batch_id=batch.pk) + funkwhale_utils.on_commit( + music_tasks.import_batch_run.delay, import_batch_id=batch.pk + ) return {"batch": {"id": batch.pk}} diff --git a/api/tests/federation/test_views.py b/api/tests/federation/test_views.py index 3a67a9f2..4f1f471d 100644 --- a/api/tests/federation/test_views.py +++ b/api/tests/federation/test_views.py @@ -12,6 +12,7 @@ from funkwhale_api.federation import ( views, webfinger, ) +from funkwhale_api.music import tasks as music_tasks @pytest.mark.parametrize( @@ -398,7 +399,7 @@ def test_library_track_action_import(factories, superuser_api_client, mocker): lt2 = factories["federation.LibraryTrack"](library=lt1.library) lt3 = factories["federation.LibraryTrack"]() factories["federation.LibraryTrack"](library=lt3.library) - mocked_run = mocker.patch("funkwhale_api.music.tasks.import_batch_run.delay") + mocked_run = mocker.patch("funkwhale_api.common.utils.on_commit") payload = { "objects": "all", @@ -416,7 +417,9 @@ def test_library_track_action_import(factories, superuser_api_client, mocker): assert batch.jobs.count() == 2 for i, job in enumerate(batch.jobs.all()): assert job.library_track == imported_lts[i] - mocked_run.assert_called_once_with(import_batch_id=batch.pk) + mocked_run.assert_called_once_with( + music_tasks.import_batch_run.delay, import_batch_id=batch.pk + ) def test_local_actor_detail(factories, api_client): diff --git a/changes/changelog.d/397.bugfix b/changes/changelog.d/397.bugfix new file mode 100644 index 00000000..6eca3267 --- /dev/null +++ b/changes/changelog.d/397.bugfix @@ -0,0 +1 @@ +Fixed broken federation import on big imports due to missing transaction logic (#397) -- GitLab