- Shipped
- 27 settembre 2026 alle ore 06:14 UTC
- Author
- Kamo
- Commit
- 279a389
Chat non ha avuto successo in due modi un membro nota subito: apertura di una conversazione mostrato "Non caricare messaggi" fino a quando Retry è stato premuto, e un messaggio inviato a volte non è mai arrivato. Entrambi erano MediaService che rispondeva a 500 con YugabyteDB SQLState 40001, "Riavviare letto richiesto" — registrato ogni giorno su entrambi i baccelli, e ogni 500 il web BFF ha registrato questa settimana fila con uno. Yugabyte riavvia una lettura gratuita solo quando si tratta della dichiarazione FIRST della sua transazione. The controllo del carico di storia accesso sulla sua terza dichiarazione leggendo la fila di adesione del chiamante — la riga che apre i segni di conversazione leggere nello stesso istante. Un invio scrive il messaggio e poi legge il roster e il dominio dell'org nella stessa transazione. Leggete l'incontro di una fila scritto un momento prima fallito l'intera richiesta; un momento dopo la scrittura si era stabilita, che è perché Retry ha sempre lavorato. - Le richieste della finestra di chat (invia, storia, testo, elenco chat, modifica, volti, membri, ricevute) portare @RetryOnDbConflict, e loro catch-alls lasciare un conflitto fuori Il consulente puo' riesaminarlo in una nuova transazione. Inghiottito in un 500 era invisibile alla riprovazione. Sicuro: tutto ciò che un invio annuncia è dopo-commesso. - Mark-read non riscrive più la riga di appartenenza quando il puntatore è già lì (ChatReadPointerRepository, un UPDATE sorvegliato). È stato chiamato più volte per aperto, e ogni riscrittura era una possibilità per il carico di storia del membro o inviare a fallire. La ricevuta di lettura esce ancora come prima. - Un invio può portare un clienteMessageId (ChatSendLedger, Redis): una rettiva di un invio che già si risponde con la risposta di quell'invio, e uno ancora in volo con 409 SEND IN PROGRESS, così il cliente può riprovare senza mai inviare un messaggio due volte. Non si apre. Un ratchet... tiene ogni gestore di chat @Transactional al suo posto. riprovare, e il tentativo di una cattura che lascia il conflitto fuori. MediaControllerDbConflictTest replays il fallimento di produzione attraverso un vero proxy: il tentativo contrastato torna indietro, un secondo transazione commette una volta, e nulla viene annunciato per il tentativo che ha fallito. Passo 1384 test.
