From 2df16921215abb76923090d7308a83e292470d96 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Fri, 9 May 2025 16:17:22 +0200
Subject: [PATCH] Improve logging in the subscription validation task

Fix an issue where validation workflows would run out-of-order, or in duplicate.
---
 gso/cli/schedule.py                     |  1 -
 gso/schedules/validate_subscriptions.py | 33 +++++++++++++++++++------
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/gso/cli/schedule.py b/gso/cli/schedule.py
index 3446977d8..b0a29c056 100644
--- a/gso/cli/schedule.py
+++ b/gso/cli/schedule.py
@@ -16,7 +16,6 @@
 # limitations under the License.
 # <!-- vale on -->
 
-
 import logging
 from collections.abc import Callable
 
diff --git a/gso/schedules/validate_subscriptions.py b/gso/schedules/validate_subscriptions.py
index 7323b6086..db3573802 100644
--- a/gso/schedules/validate_subscriptions.py
+++ b/gso/schedules/validate_subscriptions.py
@@ -37,26 +37,43 @@ def validate_subscriptions() -> None:
         return
 
     for subscription in subscriptions:
-        validation_workflow = None
-
+        found_a_validation_workflow = False
         for workflow in subscription.product.workflows:
             if workflow.target == Target.SYSTEM and workflow.name.startswith("validate_"):
                 validation_workflow = workflow.name
-
-            if validation_workflow:
+                found_a_validation_workflow = True
                 validation_workflow_usable = (subscription.status in TARGET_DEFAULT_USABLE_MAP[Target.SYSTEM]) and (
-                    subscription.insync or (workflow in WF_USABLE_WHILE_OUT_OF_SYNC)
+                    subscription.insync or (validation_workflow in WF_USABLE_WHILE_OUT_OF_SYNC)
                 )
 
                 if validation_workflow_usable:
-                    json = [{"subscription_id": str(subscription.subscription_id)}]
+                    logger.info(
+                        "Found a usable validation workflow, scheduling task.",
+                        product=subscription.product.name,
+                        subscription_id=subscription.subscription_id,
+                        subscription_description=subscription.description,
+                        workflow=validation_workflow,
+                    )
 
+                    json = [{"subscription_id": str(subscription.subscription_id)}]
                     validate_func = get_execution_context()["validate"]
                     validate_func(validation_workflow, json=json)
 
-        if not validation_workflow:
+                else:
+                    logger.info(
+                        "Validation workflow is not usable on this subscription instance",
+                        product=subscription.product.name,
+                        subscription_id=subscription.subscription_id,
+                        subscription_description=subscription.description,
+                        status=subscription.status,
+                        insync=subscription.insync,
+                        workflow=validation_workflow,
+                    )
+
+        if not found_a_validation_workflow:
             logger.warning(
                 "SubscriptionTable has no validation workflow",
-                subscription=subscription,
                 product=subscription.product.name,
+                subscription_id=subscription.subscription_id,
+                subscription_description=subscription.description,
             )
-- 
GitLab