KamoCRM

The roster, participants, history and send survive a database conflict too

FixMediaService
Shipped
September 27, 2026 at 4:25 PM UTC
Author
Kamo
Commit
e8d1d6a

Completes 279a389. After it shipped, production logged the same YugabyteDB 40001 "Restart read required" on Exec2Exec's roster (09-27 16:00Z, and three times earlier that morning on the roster and the participant list): Exec2Exec conversations are chats, but their transactions live in Exec2ExecService rather than the controllers 279a389 covered, so a conflict there still reached the member as a 500. Every public @Transactional Exec2ExecService operation now carries @RetryOnDbConflict — the page of history, the send, the roster, participants, the unread counts, joining on open, the greeting. The controller calls them through the proxy and none of them catches the conflict, so each is re-run in a new transaction. Safe: announcements (the session frame, the fan-out, the push) are all after-commit, so a rolled-back attempt told nobody anything. ChatDbConflictRetryRatchetTest now holds Exec2ExecService to the same rule.

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