KamoCRM

O conversaţie încărcată şi un mesaj trimite la prima încercare

FixMediaService
Shipped
27 septembrie 2026 la 06:14 UTC
Author
Kamo
Commit
279a389

Chat a eşuat în două moduri în care un membru îşi dă seama imediat: deschiderea unei conversaţii a arătat "Nu am putut încărca mesajele" până când Retry a fost presat, și un mesaj trimis uneori nu a ajuns. Ambele au fost MediaService răspunde 500 cu YugabyteDB SQLState 40001, "Repornire citit necesar" logat zilnic pe ambele capsule, și la fiecare 500 web BFF înregistrat în această săptămână se aliniază cu una. Yugabyte restartă o citire gratuită numai atunci când este prima declarație a tranzacției sale. ă istoric de încărcare verifică accesul la cea de-a treia declarație prin citirea rândul de membru al apelantului Rândul care deschiderea marcajelor conversație citit în aceeași clipă. Un trimis scrie mesajul şi apoi citeşte lista şi domeniul orgului în aceeaşi tranzacţie. Fie citit întâlnirea un rând scris un moment mai devreme a eșuat întreaga cerere; un moment mai târziu scrisul a stabilit, care este de ce Retry a lucrat întotdeauna. - Cererile ferestrei de chat (trimitere, istorie, citire, listă de chat, editare, chipuri, membri, chitanțe) transporta @RetryOnDbConflict, și lor catch-toate lăsa un conflict E o afacere nouă. Înghițit într-un 500 a fost invizibil pentru rejudecarea. În condiții de siguranță: tot ceea ce o anunță trimite este post-commit. - Mark-read nu mai rescrie rândul de membru atunci când indicatorul este deja acolo (ChatReadPointerRepository, un UPDATE păzit). Acesta a fost numit de mai multe ori pe deschis, și fiecare rescriere a fost o șansă pentru propria încărcătură de istorie a membrului sau trimite să nu. Chitanţa de citire Încă mai iese ca înainte. - O trimitere poate transporta un clientMessageId (ChatSendLedger, Redis): o rejudecare a unui trimis care deja comis este raspuns cu raspunsul care trimite, si unul inca in zbor cu 409 SEND IN PROGRESS, astfel încât clientul poate încerca din nou fără a posta vreodată un mesaj de două ori. Eşecuri deschise. Un clichet *************** deține fiecare handler de chat @Tractional la Reîncercăm şi reluăm o captură care lasă conflictul să iasă. MediaControllerDbConflictTest replays eșecul producției printr-un proxy real: încercarea conflictuală se întoarce, o secundă tranzacție se angajează o dată, și nimic nu este anunțat pentru încercarea care a eșuat. 1384 teste trec.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing