From f7764d94bce607b05c6d373a0afe9c782675bf5d Mon Sep 17 00:00:00 2001 From: Jean Aurambault Date: Thu, 22 Aug 2024 18:03:07 -0700 Subject: [PATCH] Fix concurrency issue by isolating putBase in a separate transaction The putBase operation is now executed in an isolated transaction to ensure it is retryable without impacting the parent transaction. This prevents concurrency issues that were previously causing conflicts in the parent transaction during import. --- .../service/blobstorage/database/DatabaseBlobStorage.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/blobstorage/database/DatabaseBlobStorage.java b/webapp/src/main/java/com/box/l10n/mojito/service/blobstorage/database/DatabaseBlobStorage.java index 313d397eea..0b2f550959 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/blobstorage/database/DatabaseBlobStorage.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/blobstorage/database/DatabaseBlobStorage.java @@ -8,9 +8,12 @@ import java.time.ZonedDateTime; import java.util.List; import java.util.Optional; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.PageRequest; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; /** * Implementation that use the database to store the blobs. @@ -60,6 +63,7 @@ public void put(String name, byte[] content, Retention retention) { }); } + @Transactional(propagation = Propagation.REQUIRES_NEW) void putBase(String name, byte[] content, Retention retention) { MBlob mBlob = mBlobRepository