Clarify `(room_id, event_id)` global uniqueness (#13701)
Summarized from @richvdh's reply at https://github.com/matrix-org/synapse/pull/13589#discussion_r961116999pull/13713/head
parent
36b184b782
commit
877bdfa889
|
@ -0,0 +1 @@
|
||||||
|
Clarify `(room_id, event_id)` global uniqueness and how we should scope our database schemas.
|
|
@ -191,3 +191,27 @@ There are three separate aspects to this:
|
||||||
flavour will be accepted by SQLite 3.22, but will give a column whose
|
flavour will be accepted by SQLite 3.22, but will give a column whose
|
||||||
default value is the **string** `"FALSE"` - which, when cast back to a boolean
|
default value is the **string** `"FALSE"` - which, when cast back to a boolean
|
||||||
in Python, evaluates to `True`.
|
in Python, evaluates to `True`.
|
||||||
|
|
||||||
|
|
||||||
|
## `event_id` global uniqueness
|
||||||
|
|
||||||
|
In room versions `1` and `2` it's possible to end up with two events with the
|
||||||
|
same `event_id` (in the same or different rooms). After room version `3`, that
|
||||||
|
can only happen with a hash collision, which we basically hope will never
|
||||||
|
happen.
|
||||||
|
|
||||||
|
There are several places in Synapse and even Matrix APIs like [`GET
|
||||||
|
/_matrix/federation/v1/event/{eventId}`](https://spec.matrix.org/v1.1/server-server-api/#get_matrixfederationv1eventeventid)
|
||||||
|
where we assume that event IDs are globally unique.
|
||||||
|
|
||||||
|
But hash collisions are still possible, and by treating event IDs as room
|
||||||
|
scoped, we can reduce the possibility of a hash collision. When scoping
|
||||||
|
`event_id` in the database schema, it should be also accompanied by `room_id`
|
||||||
|
(`PRIMARY KEY (room_id, event_id)`) and lookups should be done through the pair
|
||||||
|
`(room_id, event_id)`.
|
||||||
|
|
||||||
|
There has been a lot of debate on this in places like
|
||||||
|
https://github.com/matrix-org/matrix-spec-proposals/issues/2779 and
|
||||||
|
[MSC2848](https://github.com/matrix-org/matrix-spec-proposals/pull/2848) which
|
||||||
|
has no resolution yet (as of 2022-09-01).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue