O contador do documento, e um número que não pode bifurcar

Featurekamo-shared-library
Navios
27 de agosto de 2026 às 23:21 UTC
Autor
Kamo
Enviar
c42a68f

Cada número de documento existente nesta plataforma é uma corrida de verificação-então-inserir com nenhuma restrição única por trás dele: números de cotações são COUNT(...)+1, assinatura números de fatura carregar cada linha para o org na memória e tomar .size() +1, empréstimo os números escolhem um valor aleatório e falham ao retornar nulo. Dois concomitantes os escritores leram a mesma figura e escreveram um número um maior. Uma factura número não pode ser corrigido após o facto — o cliente já tem o PDF — então esta série é cunhada sob uma fechadura de linha em vez disso. Uma tabela e não uma sequência: não há nenhuma SEQUÊNCIA CREADA em qualquer lugar neste plataforma, e declarar um @SequenceGenerator faria um exportável para KI's ddl-auto: atualização, que iria criá-lo COM 1 e distribuir ids abaixo 2^53 em um esquema unique rowid(). Uma sequência também não pode reiniciar por ano ou por locatário, que é a forma que uma série de faturas tem. findForUpdate é a única leitura no repositório — ele estende o Repositório, não JpaRepository, então não há nenhuma descoberta desbloqueadaById para alcançar por acidente. insertIfAbsent usa NO CONFLICT NÃO FAZER NADA em vez de SupressãoService's Linguagem de captura-violação. Esse idioma possui toda a sua transação; este é executado dentro da chamada, e uma violação única aborta um PostgreSQL/Yugabyte transação definitiva, para que a captura seria lido como manuseado enquanto a fatura O INSERT falhou. Falhas observadas, literalmente. RED (antes da existência das classes): pacote **************** não existe símbolo: classe DocumentCounterRepository / DocumentType / DocumentNumberService MUTATION (@ Lock( PESSIMÍSTICA ESCRITO) removido do findForUpdate), após a falsificação foi feito para modelar uma viagem real de leitura/escrita e para entregar cada leitor instância: **************************** Tamanho esperado: 32 mas foi: 7 em: ["INV-2026-0007", "INV-2026-0005, "INV-2026-0006, "INV-2026-0003", "INV-2026-0004, "INV-2026-0001", "INV-2026-0002"] **************************** [findForUpdate deve instruir o banco de dados para bloquear a linha] Esperando que o real não seja nulo GREEN após reversão: Testes executados: 43, Falhas: 0, Erros: 0, Pular: 0 Nota de honestidade registrada no javadoc do teste: com um Thread.yield() nu teste de concorrência permaneceu verde com o bloqueio removido, e permaneceu verde com ler latência sozinho. Ele só morde uma vez que as mãos falsas cada chamador seu próprio instância de entidade — que é o que dois contextos de persistência realmente fazem — e coloca latência na escrita. Nenhum banco de dados está envolvido nestes testes; o que eles provam é que o serviço encaminha sua leitura através de um localizador o banco de dados é dito para Trancar. A metade da base de dados é fixada pela afirmação de anotação e por UX DOCCOUNTER ORG TYPE YEAR.

Todas as alterações

Como o que vês no transporte?

Cada uma dessas atualizações pousa automaticamente em seu espaço de trabalho. Comece grátis e veja crescer semana após semana.

Começar Livre Para SempreVer Preços