summary refs log tree commit diff
path: root/docs/development/database_schema.md
diff options
context:
space:
mode:
authorEric Eastwood <erice@element.io>2022-09-09 16:28:05 -0500
committerEric Eastwood <erice@element.io>2022-09-09 16:28:05 -0500
commit50f0342594977a57793225d8f6b95e1225dfe308 (patch)
treebb8c94e3316a8623780d37a98e1f55aa2bc19c4a /docs/development/database_schema.md
parentMerge branch 'develop' into madlittlemods/11850-migrate-to-opentelemetry (diff)
parentConcurrently collect room unread counts for push badges (#13765) (diff)
downloadsynapse-50f0342594977a57793225d8f6b95e1225dfe308.tar.xz
Merge branch 'develop' into madlittlemods/11850-migrate-to-opentelemetry
Conflicts:
	poetry.lock
	synapse/api/auth.py
	synapse/federation/federation_client.py
	synapse/logging/opentracing.py
	synapse/rest/client/keys.py
	synapse/rest/client/sendtodevice.py
	synapse/storage/schema/__init__.py
Diffstat (limited to 'docs/development/database_schema.md')
-rw-r--r--docs/development/database_schema.md24
1 files changed, 24 insertions, 0 deletions
diff --git a/docs/development/database_schema.md b/docs/development/database_schema.md

index d996a7caa2..e9b925ddd8 100644 --- a/docs/development/database_schema.md +++ b/docs/development/database_schema.md
@@ -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 default value is the **string** `"FALSE"` - which, when cast back to a boolean 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). +