KamoCRM

Uma conversação carrega e uma mensagem envia na primeira tentativa

FixMediaService
Enviado
27 de setembro de 2026 às 06:14 UTC
Autor
Kamo
Confirmação
279a389

O chat tem falhado de duas maneiras que um membro nota ao mesmo tempo: abrindo uma conversa mostrada "Não foi possível carregar mensagens" até que o Retry foi pressionado, e uma mensagem enviada às vezes nunca chegou. Ambos eram MediaService respondendo 500 com YugabyteDB SQLState 40001, "Reiniciar leitura necessária" — Registrado diariamente em ambos os pods, e cada 500 o Web BFF gravado esta semana se alinha com um. Yugabyte reinicia uma leitura gratuita somente quando é a PRIMEIRA instrução de sua transação. A histórico carga verifica o acesso à sua terceira declaração através da leitura da linha de membros do linha que abrindo as marcas de conversa ler no mesmo instante. Um envio escreve a mensagem e em seguida, lê o roster e o domínio do org na mesma transação. Leia uma linha de reunião escreveu um momento antes falhou todo o pedido; um momento depois a escrita tinha resolvido, que é Porque é que o Retry sempre funcionou. - Pedidos da janela de chat (enviar, histórico, leitura de marcas, lista de bate-papo, editar, rostos, membros, recibos) transporte @RetryOnDbConflito, e seus catch-alls deixar sair um conflito Para que o conselheiro possa voltar a executá-lo numa nova transacção. Engolidos em um 500 era invisível ao retry. Seguro: tudo o que um envio anuncia é pós-compromisso. - Mark-read não reescreve mais a linha de membros quando o ponteiro já está lá (Repositório ChatReadPointer, uma atualização guardada). Foi chamado várias vezes por aberto, e cada reescrita era uma chance para o próprio histórico do membro carregar ou enviar para falhar. O recibo de leitura Ainda sai como antes. - Um envio pode transportar um clienteMessageId (ChatSendLedger, Redis): uma repetição de um envio que já compromissado é respondido com a resposta desse envio, e um ainda em voo com 409 SEND IN PROGRESS, para que o cliente possa tentar novamente sem postar uma mensagem duas vezes. Falhas abertas. Uma ratchet ************* *** prende todos os manipuladores de chat @Transactional para o Tente novamente, e tente novamente uma captura que deixe o conflito sair. MediaControllerDbConflitoTest replays a falha de produção por meio de um proxy real: a tentativa conflitu transaction commits uma vez, e nada é anunciado para a tentativa que falhou. 1384 testes passam.

Todas as alterações

Como o que você vê o transporte?

Comece com o plano gratuito e leia esta página novamente daqui a um mês, para saber mais sobre o que está disponível para você.

Comece grátis para sempreVer preços