Skip to content

Tasks Celery não idempotentes — risco de duplicação de side effects #1

Description

@pizanao

Descrição

A task `execute_workflow` em `tasks.py` não tem guarda de idempotência. Se a task for re-executada (timeout do Celery, retry), efeitos colaterais podem se duplicar.

@shared_task
def execute_workflow(run_id, workflow_id):
    # ← sem verificação de status antes de executar
    # ← pode rodar novamente mesmo se PENDING → RUNNING

Impacto

  • Mensagens duplicadas via handler_email / handler_telegram
  • Execução paralela do mesmo workflow pode corromper estado

Correção sugerida

  1. Adicionar guard early-return: `if Run.objects.get(id=run_id).status != PENDING: return`
  2. Usar SELECT FOR UPDATE para lock da run antes de executar
  3. Implementar idempotency key no Celery task signature

Referência

  • tasks.py: `execute_workflow()`

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions