Gleam.br Wiki

GBR: ADR-0008 Persistência de Borda e Resiliência de Conexão (DETS & Backoff Exponencial) | Wiki

Documentação de engenharia e especificações técnicas da Gleam-BR.

GBR: ADR-0008 Persistência de Borda e Resiliência de Conexão (DETS & Backoff Exponencial)

  • *Status:* Proposto / Em Exploração
  • *Data:* 2026-05-01

*Contexto:* A versão atual do falcon_agent mantém o estado das conexões atreladas unicamente ao ciclo de vida da Thread leve do Erlang e gerencia retenções de pacotes (como o outbound_buffer do Yamux) apenas na memória RAM (Volatility Risk). O teste real (corte da conexão do Gateway) demonstrou que: 1. o Agente não efetua uma tentativa de reconexão automática contínua; e 2. as métricas geradas durante um período de desconexão longa seriam acumuladas até exaurir a RAM do hospedeiro, ou seriam totalmente descartadas.

*Decisão:*

  1. *Backoff Exponencial para o Dialer P2P:* A rotina principal de inicialização da malha (gbr_p2p.dial) no Agente deverá ser abstraída por uma Máquina de Estados (Ator de Supervisão) que entra num laço de Reconnect. Se o link físico cair (tcp_closed), o Ator aguarda 5s, depois 10s, 30s, etc., para tentar reiniciar o túnel TCP, sem causar inanição de CPU (spin loop).
  2. *"Caixa Preta" via DETS (Disk Erlang Term Storage):* Em contraste com o gbr_ets (em RAM), as métricas coletadas pelo db_worker ou pelo novo coletor de OS, enquanto a conexão P2P estiver ociosa ou morta, devem ser persistidas instantaneamente no disco local utilizando a biblioteca dets do Erlang.
  3. *Mecânica de Flush (Burst):* Assim que a conexão Yamux reestabelece a assinatura com sucesso, o Ator responsável pela Caixa Preta lê os blocos históricos do dets e empurra-os (utilizando a janela de fluxo existente do Yamux para garantir o Backpressure) em direção ao servidor QuestDB.

*Consequências:*

  • *Positivas:* Tolera quedas de backbone duradouras (como fins de semana inteiros) no cliente corporativo sem perda de nenhum data point; o agente é matematicamente protegido contra estouros de memória OOM (Out Of Memory).
  • *Negativas/Riscos:* As escritas no dets são substancialmente mais lentas que as do ets. Arquivos dets possuem limitação severa de 2GB pelo motor Erlang. A biblioteca requer a programação rigorosa da rotação de logs (Log Rotation) circular, devendo eliminar métricas antiquadas assim que os ~1.5GB de disco de retenção sejam atingidos para prevenir corrupção estrutural da Caixa Preta.