Skip to content

[RACE] save_graph não é atômico — perda de dados em concorrência #6

Description

@pizanao

Descrição

WorkflowViewSet.save_graph() faz delete de TODAS as arestas e recria em seguida. Requisições concorrentes podem causar perda de dados.

Edge.objects.filter(workflow=workflow).delete()
# ← janela de race condition aqui
Edge.objects.bulk_create(new_edges)

Impacto

  • Arestas podem sumir se duas requisições concurrentes dispararem saves
  • Inconsistência entre frontend e banco

Correção sugerida

  1. Envolver em transação atômica transaction.atomic()
  2. Usar update_or_create com diffing em vez de delete+recreate
  3. Adicionar optimistic locking com version field

Referência

  • views.py: `WorkflowViewSet.save_graph()`

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