Pular para conteúdo

Dados — consistência, isolamento e evolução

Esta página registra achados de código e oportunidades de validação. O modelo atual descreve o comportamento implementado; as ações abaixo são propostas, não mudanças aprovadas ou aplicadas aos bancos.

Prioridade Evidência / achado Consequência e próxima avaliação
Alta Produtores Java declaram outbox_events.eventId como ObjectId; Dispatcher Go declara string. Contrato comparado Validar a decodificação BSON com o codec usado pelo Dispatcher e um documento produzido pelo Java. A diferença de tipos não prova, isoladamente, falha de ambiente
Alta Checker consulta *:ratelimit:{id} e usa primeiro resultado. GET e DECR são separados. Implementação Identidade global do ID e isolamento de tenant precisam ser garantidos pelo contrato; avaliar colisão e admissão concorrente sem presumir que tenantId no Mongo autoriza esse acesso
Alta Broker realiza GET/verificação/INCR separadamente e não declara TTL no contador. Implementação Avaliar concorrência acima do limite e recuperação de saldo após interrupção antes da liberação; não equivale a incidente comprovado
Alta Inbox OpenAPI insere após o efeito e não consulta registro prévio. Não declara unique para eventId. Handler, repository O nome Inbox não garante deduplicação. Testar redelivery entre gravação da projeção, registro e ACK
Média Dispatcher confirma publicação antes de marcar SENT; claim/lease e retry permitem reentrega. Dreno Contratos consumidores precisam tolerar repetição; medir retenção de SENT e Inbox, sem TTL declarado
Média Registry declara unique para alias, não para tenantId. Reconciliação escreve uma chave por tenant. Índices, cache Verificar invariantes de múltiplos aliases para o mesmo tenant e ordenação da reconciliação; não afirmar duplicatas existentes
Média Cache Invalidator usa curingas/KEYS; monitor contém FLUSHALL. Serviço, script Avaliar custo de keyspace e impacto sobre quotas/locks antes de qualquer alteração operacional
Média Referências por IDs e snapshots não possuem foreign keys; várias coleções consultadas por referência não declaram índices secundários. Relacionamentos Planejar testes de exclusão/cascata e avaliar consultas com volume real; ausência de índice no código não comprova ausência física no banco
Média Gateway OpenAPI armazena gatewayId para fontes Gateway e Template; source é parâmetro de geração, não discriminador persistido. Modelo Avaliar identidade e colisão entre domínios e comportamento de eventos de exclusão
Média Snapshot de Templates exige dados publicados completos; upgrades dependem de proveniência e IDs estáveis. Versionamento Preservar rejeição de origens insuficientes e testes de concorrência/reentrada; não reparar documentos históricos por heurística
Média Arquivos são blobs externos mais metadados Mongo; registro global possui owner. Modelo Avaliar falhas entre upload, vinculação, publicação e limpeza; referência cruzada não garante atomicidade entre storage e Mongo

Limites de evidência para continuidade

  • A biblioteca tenant seleciona collections injetadas de IP Policy e Rate Limit; seus nomes físicos não são literais no código dos serviços. Documentar a biblioteca quando seu fonte estiver disponível.
  • Defaults de CacheUtil/CacheStore e formato interno de collections JobRunr pertencem às bibliotecas. Não derivar esses contratos de DTOs ou de nomes de classes.
  • Presença de getters calculados no codec POJO merece testes de BSON na evolução do modelo; não confundir propriedades de JSON com campos independentes.
  • Repositórios Gateway não definem schemas internos de Keycloak, Cloudflare, GCS/MinIO ou mappings/retention do Elasticsearch.
  • Nenhuma consulta a bancos corporativos foi necessária para esta documentação. Eventual comparação física de índices, retenção e dados órfãos deve usar evidências próprias desses ambientes.

Esses limites não substituem o inventário: todos os 23 serviços backend foram classificados, inclusive leitores de stores externos e componentes sem persistência própria.