Skip to content

Commit f7ebf1c

Browse files
committed
fix(api): skip scan tasks when provider was deleted
`perform_scan_task` and `perform_scheduled_scan_task` now short-circuit with a warning and return None when the target provider no longer exists, instead of letting `handle_provider_deletion` raise `ProviderDeletedException`. This prevents a queued message for a deleted provider from being recorded as FAILURE in the task results, generating Sentry noise, and (in deployments that shut down the worker after each scan task) burning a fresh container on every redelivery.
1 parent c1cfda5 commit f7ebf1c

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

api/src/backend/tasks/tasks.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,17 @@ def perform_scan_task(
274274
Returns:
275275
dict: The result of the scan execution, typically including the status and results of the performed checks.
276276
"""
277+
with rls_transaction(tenant_id):
278+
if not Provider.objects.filter(pk=provider_id).exists():
279+
logger.warning(
280+
"scan-perform skipped: provider %s no longer exists "
281+
"(tenant=%s, scan=%s)",
282+
provider_id,
283+
tenant_id,
284+
scan_id,
285+
)
286+
return None
287+
277288
result = perform_prowler_scan(
278289
tenant_id=tenant_id,
279290
scan_id=scan_id,
@@ -310,6 +321,15 @@ def perform_scheduled_scan_task(self, tenant_id: str, provider_id: str):
310321
task_id = self.request.id
311322

312323
with rls_transaction(tenant_id):
324+
if not Provider.objects.filter(pk=provider_id).exists():
325+
logger.warning(
326+
"scheduled scan-perform skipped: provider %s no longer exists "
327+
"(tenant=%s)",
328+
provider_id,
329+
tenant_id,
330+
)
331+
return None
332+
313333
periodic_task_instance = PeriodicTask.objects.get(
314334
name=f"scan-perform-scheduled-{provider_id}"
315335
)

0 commit comments

Comments
 (0)