changeset 787:3d44e13cf9c5 pg-next-1099 tip

DeleteResource: remove warning when multiple clients are trying to delete the same resoure at the same time
author Alain Mazy <am@orthanc.team>
date Mon, 08 Dec 2025 10:36:59 +0100
parents 7d3780b24210
children
files PostgreSQL/NEWS PostgreSQL/Plugins/SQL/PrepareIndex.sql
diffstat 2 files changed, 20 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/PostgreSQL/NEWS	Tue Dec 02 17:15:20 2025 +0100
+++ b/PostgreSQL/NEWS	Mon Dec 08 10:36:59 2025 +0100
@@ -1,3 +1,18 @@
+Pending changes in the mainline
+===============================
+
+Changes:
+* Small update of the "DeleteResource" function to avoid a warning when multiple
+  clients are trying to delete the same resource at the same time.
+  TODO: handle migration.
+  Warning:
+  test_concurrent_uploads_same_study (Concurrency.test_concurrency.TestConcurrency.test_concurrent_uploads_same_study) ... 2025-12-05 08:04:24.133 UTC [73] ERROR:  null value in column "resourcetype" of relation "deletedresources" violates not-null constraint
+  2025-12-05 08:04:24.133 UTC [73] DETAIL:  Failing row contains (null, null).
+  2025-12-05 08:04:24.133 UTC [73] CONTEXT:  SQL statement "INSERT INTO DeletedResources VALUES (deleted_resource_row.resourceType, deleted_resource_row.publicId)"
+	PL/pgSQL function deleteresource(bigint) line 85 at SQL statement
+  2025-12-05 08:04:24.133 UTC [73] STATEMENT:  SELECT * FROM DeleteResource($1)
+
+
 Release 10.0 (2025-12-02)
 =========================
 
--- a/PostgreSQL/Plugins/SQL/PrepareIndex.sql	Tue Dec 02 17:15:20 2025 +0100
+++ b/PostgreSQL/Plugins/SQL/PrepareIndex.sql	Mon Dec 08 10:36:59 2025 +0100
@@ -260,9 +260,11 @@
     -- delete the resource itself
     DELETE FROM Resources WHERE internalId=id RETURNING * INTO deleted_resource_row;
 
-    -- keep track of the deleted resources for C++ code
-    INSERT INTO DeletedResources VALUES (deleted_resource_row.resourceType, deleted_resource_row.publicId);
-  
+    IF FOUND THEN
+        -- keep track of the deleted resources for C++ code
+        INSERT INTO DeletedResources VALUES (deleted_resource_row.resourceType, deleted_resource_row.publicId);
+    END IF;
+
     -- If this resource still has siblings, keep track of the remaining parent
     -- (a parent that must not be deleted but whose LastUpdate must be updated)
     SELECT resourceType, publicId INTO remaining_ancestor_resource_type, remaining_anncestor_public_id