From 3962bd023ea6ecec76f94ad3a7ecc073fc8ad994 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Fri, 18 Apr 2025 09:27:57 +0200
Subject: [PATCH] Modify db migration to delete orphaned processes

---
 ...c38adde1a18e_update_wf_in_process_table.py | 44 ++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

diff --git a/gso/migrations/versions/2025-04-10_c38adde1a18e_update_wf_in_process_table.py b/gso/migrations/versions/2025-04-10_c38adde1a18e_update_wf_in_process_table.py
index d2dc29f82..005d1f182 100644
--- a/gso/migrations/versions/2025-04-10_c38adde1a18e_update_wf_in_process_table.py
+++ b/gso/migrations/versions/2025-04-10_c38adde1a18e_update_wf_in_process_table.py
@@ -1,4 +1,4 @@
-"""Update wf in process table and delete old workflows
+"""Update workflows in process table and delete old processes and workflows
 
 Revision ID: c38adde1a18e
 Revises: 9fbb3c4411ea
@@ -85,7 +85,49 @@ WHERE pr.pid = ps.pid
     for mapping in update_mappings:
         conn.execute(sa.text(sql_template), mapping)
 
+    # Delete input states referencing to orphaned workflows.
+    conn.execute(
+        sa.text(
+            """
+DELETE FROM input_states
+WHERE  input_states.pid IN (SELECT p.pid
+                            FROM   processes p
+                                   JOIN workflows w
+                                     ON p.workflow_id = w.workflow_id
+                                   JOIN processes_subscriptions ps
+                                     ON ps.pid = p.pid
+                                   JOIN subscriptions s
+                                     ON s.subscription_id = ps.subscription_id
+                                   JOIN products pro
+                                     ON s.product_id = pro.product_id
+                            WHERE  w."name" = 'validate_prefix_list'
+                                   AND pro."name" != 'GÉANT IP');
+            """
+        )
+    )
+
+    # Delete processes refering to orphaned workflows.
+    conn.execute(
+        sa.text(
+            """
+DELETE FROM processes
+WHERE  processes.pid IN (SELECT p.pid
+                         FROM   processes p
+                                JOIN workflows w
+                                  ON p.workflow_id = w.workflow_id
+                                JOIN processes_subscriptions ps
+                                  ON ps.pid = p.pid
+                                JOIN subscriptions s
+                                  ON s.subscription_id = ps.subscription_id
+                                JOIN products pro
+                                  ON s.product_id = pro.product_id
+                         WHERE  w."name" = 'validate_prefix_list'
+                                AND pro."name" != 'GÉANT IP');
+            """
+        )
+    )
 
+    # Delete workflows for products that no longer exist.
     conn.execute(
         sa.text(
             """
-- 
GitLab