From 5e16aa9dccf533b1d781c6dab54fb0b4ddbdf9f2 Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Mon, 26 Jan 2026 19:26:59 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5(backend)=20remove=20usage=20of=20a?= =?UTF-8?q?tomic=20transaction=20for=20item=20creation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We used atomic transaction in the ItemViewset when a new item is created (perform_create and children actions). This code can be removed seen we decided to use UUID for the item path. The race condition possible when multiple items are created does not exists anymore, we don't need to know previously created item to guess the next path. --- CHANGELOG.md | 4 ++++ src/backend/core/api/viewsets.py | 12 +++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3e11c65..44bcf7dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to - 🏗️ (ds_proxy) introduce how to use ds_proxy with Drive +### Changed + +- 🔥(backend) remove usage of atomic transaction for item creation + ## [v0.11.1] - 2026-01-13 ### Fixed diff --git a/src/backend/core/api/viewsets.py b/src/backend/core/api/viewsets.py index fd357256..e9431035 100644 --- a/src/backend/core/api/viewsets.py +++ b/src/backend/core/api/viewsets.py @@ -572,7 +572,6 @@ class ItemViewSet( return drf.response.Response(serializer.data) - @transaction.atomic def perform_create(self, serializer): """Set the current user as creator and owner of the newly created object.""" obj = models.Item.objects.create_child( @@ -911,12 +910,11 @@ class ItemViewSet( ) ) - with transaction.atomic(): - child_item = models.Item.objects.create_child( - creator=request.user, - parent=item, - **serializer.validated_data, - ) + child_item = models.Item.objects.create_child( + creator=request.user, + parent=item, + **serializer.validated_data, + ) # Set the created instance to the serializer serializer.instance = child_item