Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Race condition with replication means that publishing room aliases lacks read-after-write consistency between workers #14210

Open
matrixbot opened this issue Dec 20, 2023 · 0 comments

Comments

@matrixbot
Copy link
Collaborator

matrixbot commented Dec 20, 2023

This issue has been migrated from #14210.


Consider the following sequence of events:

  1. Alice creates a room without any aliases.
  2. Alice lists aliases for that room.
  3. Alice sets an alias for that room.
  4. Alice lists aliases for that room.

If the alias writes occur on a separate worker to the reads, this is vulnerable to a classic worker cache invalidation race:

  • (2) succeeds because the reader has no cached alias information for the room. It queries the database (which is written before (1) completes) and caches the result.
  • (3) succeeds on the writer, which fires off a message telling readers to invalidate their caches.
  • ⚠️ If request (4) arrives before the reader has received and processed the invalidation, the reader will return the (now stale) data in its cache. This means Alice has failed to read her own write.

I don't think actual humans edit and then immediately list aliases that often, so I suggest we don't worry about fixing this. (i.e. I think this only manifests as test flakes). But I wanted to write this up as a reference. (It would be nice to have a catalogue of known races like this).

History:

See issues labeled with https://github.com/matrix-org/synapse/labels/Z-Read-After-Write

And previous related history specifically around aliases:

@matrixbot matrixbot changed the title Dummy issue Race condition with replication means that publishing room aliases lacks read-after-write consistency between workers Dec 21, 2023
@matrixbot matrixbot reopened this Dec 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant