🐛(summary) properly detect if task will be retried

In previous version, webhook may not be called in case of failure,
because the task wouldn't be actually retried.
We know check the exception raised against the auto_retry for
config.
Analytics capture also happens in case of definitive failure.
This commit is contained in:
Florent Chehab
2026-07-24 10:02:39 +02:00
parent ded93bf24f
commit dff5aa9575
+27 -23
View File
@@ -577,12 +577,6 @@ def task_retry_handler_transcript(request=None, reason=None, einfo=None, **kwarg
metadata_manager.retry(request.id)
@signals.task_failure.connect(sender=process_audio_transcribe_v2_task)
def task_failure_handler_transcript(task_id, exception=None, **kwargs):
"""Signal handler called when task execution fails permanently."""
metadata_manager.capture(task_id, settings.posthog_transcript_failure)
@signals.task_failure.connect(sender=process_audio_transcribe_v2_task)
def handle_transcribe_v2_failed(
sender,
@@ -596,21 +590,29 @@ def handle_transcribe_v2_failed(
):
"""Handle the failure of transcribe_v2_task.
This function is triggered when the transcribe_v2_task fails.
It sends a webhook failure payload to notify the client of the failure.
Tracks the failure event in analytics and, if the task
will not be retried, sends a failure webhook to the client.
"""
n_retries_left = sender.max_retries - sender.request.retries - 1
if n_retries_left > 0:
autoretry_for = sender.autoretry_for
retries_remaining = sender.max_retries - sender.request.retries - 1
will_retry = retries_remaining > 0 and isinstance(exception, tuple(autoretry_for))
if will_retry:
logger.info(
"Transcribe task %s failed, %s retries left.",
task_id,
n_retries_left,
retries_remaining,
)
else:
logger.warn(
logger.error(
"Transcribe task %s failed, no more retries left, sending failure webhook.",
task_id,
)
metadata_manager.capture(
task_id,
settings.posthog_transcript_failure,
)
call_webhook_v2_task.apply_async(
args=[
TranscribeWebhookFailurePayload(
@@ -683,12 +685,6 @@ def task_retry_handler_summary(request=None, reason=None, einfo=None, **kwargs):
metadata_manager.retry(request.id)
@signals.task_failure.connect(sender=summarize_v2_task)
def task_failure_handler_summary(task_id, exception=None, **kwargs):
"""Signal handler called when task execution fails permanently."""
metadata_manager.capture(task_id, settings.posthog_summary_failure)
@signals.task_failure.connect(sender=summarize_v2_task)
def handle_summarize_v2_failed(
sender,
@@ -702,21 +698,29 @@ def handle_summarize_v2_failed(
):
"""Handle the failure of summarize_v2_task.
This function is triggered when the summarize_v2_task fails.
It sends a webhook failure payload to notify the client of the failure.
Tracks the failure event in analytics and, if the task
will not be retried, sends a failure webhook to the client.
"""
n_retries_left = sender.max_retries - sender.request.retries - 1
if n_retries_left > 0:
autoretry_for = sender.autoretry_for
retries_remaining = sender.max_retries - sender.request.retries - 1
will_retry = retries_remaining > 0 and isinstance(exception, tuple(autoretry_for))
if will_retry:
logger.info(
"Summary task %s failed, %s retries left.",
task_id,
n_retries_left,
retries_remaining,
)
else:
logger.warn(
"Summary task %s failed, no more retries left, sending failure webhook.",
task_id,
)
metadata_manager.capture(
task_id,
settings.posthog_summary_failure,
)
call_webhook_v2_task.apply_async(
args=[
SummarizeWebhookFailurePayload(