From 8a56b2273b65afe84d0d739244c7effd24bc36a0 Mon Sep 17 00:00:00 2001 From: Yulya Artyukhina Date: Mon, 11 Dec 2023 19:06:04 +0100 Subject: [PATCH] Fix telegram retrying task after alert group was deleted (#3546) # What this PR does ## Which issue(s) this PR fixes https://github.com/grafana/oncall-private/issues/2379 ## Checklist - [ ] Unit, integration, and e2e (if applicable) tests updated - [x] Documentation added (or `pr:no public docs` PR label added if not required) - [x] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not required) --------- Co-authored-by: Joey Orlando --- engine/apps/email/tests/test_inbound_email.py | 1 + engine/apps/telegram/tasks.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/engine/apps/email/tests/test_inbound_email.py b/engine/apps/email/tests/test_inbound_email.py index 64a4792c..91951139 100644 --- a/engine/apps/email/tests/test_inbound_email.py +++ b/engine/apps/email/tests/test_inbound_email.py @@ -1,4 +1,5 @@ import json + import pytest from django.urls import reverse from rest_framework import status diff --git a/engine/apps/telegram/tasks.py b/engine/apps/telegram/tasks.py index 1c160562..f2fbabb0 100644 --- a/engine/apps/telegram/tasks.py +++ b/engine/apps/telegram/tasks.py @@ -226,8 +226,19 @@ def on_alert_group_action_triggered_async(log_record_id): from .alert_group_representative import AlertGroupTelegramRepresentative logger.info(f"AlertGroupTelegramRepresentative ACTION SIGNAL, log record {log_record_id}") - - log_record = AlertGroupLogRecord.objects.get(pk=log_record_id) + # temporary solution to handle cases when alert group and related log records were deleted + try: + log_record = AlertGroupLogRecord.objects.get(pk=log_record_id) + except AlertGroupLogRecord.DoesNotExist as e: + retries_count = on_alert_group_action_triggered_async.request.retries + if retries_count >= 10: + logger.error( + f"AlertGroupTelegramRepresentative: was not able to get AlertGroupLogRecord, probably alert group " + f"was deleted. log record {log_record_id}, retries: {retries_count}" + ) + return + else: + raise e instance = AlertGroupTelegramRepresentative(log_record) if instance.is_applicable():