Skip to content

[DEBT] Cron sync-integrations sem isolamento de tempo por integração #254

Description

@clickmatos

Qual é a dívida?

src/app/api/cron/sync-integrations/route.ts roda um único loop sequencial sobre todas as integrações ativas/com erro (Datadog + GitHub Projects), dentro de uma única invocação com maxDuration = 300. Não há isolamento de tempo por integração nem por organização.

Por que é dívida?

Um board GitHub Projects grande no primeiro sync (o próprio dry-run do PR #170 levou ~17s para 198 itens — um board maior escala proporcionalmente) pode consumir boa parte do orçamento de 5 minutos. Como o loop é sequencial, isso atrasa — ou, se o total estourar maxDuration, corta — o sync de organizações que vêm depois na mesma lista naquele ciclo. Não há retry isolado por integração dentro do mesmo ciclo.

Achado por gabriel-gomes-clickbus na revisão do PR #170.

Como chegou aqui?

O GitHub Projects foi anexado ao mesmo loop que já existia para o Datadog (sync-integrations/route.ts:63-92), reaproveitando a estrutura existente em vez de introduzir isolamento — razoável para o primeiro provider adicional, mas o padrão não escala para N integrações por organização.

Plano de migração

  • Medir o tempo real de sync por integração em produção antes de desenhar a solução (evitar otimizar o caso errado)
  • Considerar: checar tempo restante do orçamento entre integrações e parar o loop cedo, retomando de onde parou no próximo ciclo de cron
  • Considerar: paralelizar por organização (dentro do limite de conexões do Supabase) em vez de um loop sequencial puro
  • Garantir que uma integração lenta/travada não impede outras de rodar no mesmo ciclo

Deadline / gatilho pra pagar

Antes de qualquer organização ter mais de um board grande de GitHub Projects, ou antes do número de integrações ativas crescer o suficiente para o loop se aproximar de 300s.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: tech-debtCódigo sub-ótimo conhecido, workaround, ou cleanup pendente

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions