Skip to content

Commit 795b63c

Browse files
authored
fix: disable_unhealthy_flow_schedules and _check_for_updates #989
# fix: disable_unhealthy_flow_schedules and _check_for_updates ## disable_unhealthy_flow_schedules No Prefect foi identificado um comportamento intermitente na desativação de schedules. Devido a uma **race condition entre o scheduler e a API**, quando o scheduler ainda está processando ticks no momento da mutation, o schedule pode não ser efetivamente desativado na primeira chamada — mesmo retornando `success`. Isso fazia com que flows considerados não saudáveis continuassem gerando novas execuções, exigindo nova tentativa manual para efetivar a desativação. --- Foi implementada uma segunda tentativa imediata de desativação do schedule para cada flow validado como unhealthy: ```python for _ in range(2): # Existe um bug onde o Flow não desativa com apenas uma query self.set_flow_schedule(flow_id=flow.id, active=False) ``` Essa abordagem mitiga a race condition do scheduler e garante que o schedule seja efetivamente desativado, tornando o processo determinístico e evitando a necessidade de reexecução manual. ## check_for_updates Foi identificado um erro na função check_for_updates. Algumas tables não possuem o atributo last_updated_at, o que gerava exceção durante a comparação e interrompia o fluxo normal da execução. Também foi ajustada a função check_for_updates para tratar casos onde table.last_updated_at não está presente, evitando que a ausência desse atributo gere exceção e quebre a execução. Agora, nesses casos, a função trata o erro de forma segura e retorna False, preservando a estabilidade do processo.
1 parent 0fbf0f7 commit 795b63c

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

backend/apps/core/management/commands/_disable_unhealthy_flow_schedules/service.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ def disable_unhealthy_flow_schedules(self) -> None:
7676

7777
if flows_to_disable:
7878
for flow in flows_to_disable:
79-
self.set_flow_schedule(flow_id=flow.id, active=False)
79+
for _ in range(2): # Existe um bug onde o Flow não desativa com apenas uma query
80+
self.set_flow_schedule(flow_id=flow.id, active=False)
8081

8182
message_parts = [
8283
self.format_flows("🚨 Flows em alerta", flows),

backend/apps/user_notifications/management/commands/send_notification.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@
1414

1515
def check_for_updates(subscription: TableUpdateSubscription) -> TableUpdateSubscription | bool:
1616
table = subscription.table
17-
18-
if subscription.updated_at < table.last_updated_at:
19-
return subscription
20-
return False
17+
try:
18+
if subscription.updated_at < table.last_updated_at:
19+
return subscription
20+
return False
21+
except Exception:
22+
print(f"Tabela: {table.dataset.name}{table.name} está com erro")
23+
return False
2124

2225

2326
def send_update_notification_email(user: Account, subscriptions: list, date_today: dj_timezone):

0 commit comments

Comments
 (0)