Files
oak-gpui/crates
Antonio Scandurra 8dd249a7cd Hold room lock through the entirety of a room_transaction
Previously, when the host repeatedly sent `UpdateWorktree` messages,
new guests attempting to join a project would observe a severe slowdown
caused by a database serialization error (e.g., the coherence of the data
would get violated midway through `Database::join_project` due to worktree
entries being mutated as the user joined). Writing entries is pretty fast,
whereas reading all of them for a project can take more than 100ms.
Transactions that failed due to a serialization error are retried, but the guest
would keep retrying until the host finished writing because the guest's read
was slow.

This commit changes the semantics of `room_transaction` to acquire a room
lock before even starting the transaction and holding it all the way after
commit (storing it, as before, in the `RoomGuard`). This ensures that a fast
writer (the host) can't starve a slow reader (the guest), allowing the latter
to make progress by temporarily pausing writes by the former.
2023-02-22 16:04:29 +01:00
..
2023-02-16 16:47:43 -08:00
2023-02-15 15:00:44 +01:00
2023-01-25 15:09:57 -05:00
2023-02-13 14:12:43 -08:00
2023-02-14 18:05:42 -08:00
2023-02-08 21:26:27 -05:00
2023-02-17 22:00:39 -08:00