This repository was archived by the owner on Apr 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
This repository was archived by the owner on Apr 26, 2024. It is now read-only.
Drop state_events
and rejections
tables #11496
Copy link
Copy link
Open
Labels
A-DatabaseDB stuff like queries, migrations, new/remove columns, indexes, unexpected entries in the dbDB stuff like queries, migrations, new/remove columns, indexes, unexpected entries in the dbT-TaskRefactoring, removal, replacement, enabling or disabling functionality, other engineering tasks.Refactoring, removal, replacement, enabling or disabling functionality, other engineering tasks.Z-Future-MaintenanceThings that can't yet be done, but will need cleaning up in a couple of months/releasesThings that can't yet be done, but will need cleaning up in a couple of months/releases
Description
Both state_events
and rejections
are tables which add a single piece of data to a subset of events (state_key
and reason
, respectively).
I believe this would better handled with nullable columns in the events
table:
state_events
andrejections
are never read from without a join toevents
, so we can save a join whereever we read from them- it's not like adding the data to
events
is going to transform it from a small, cacheable table to something huge (so I don't expect much difference in the case where we don't join torejections
orstate_events
). In any case, when we look inevents
we normally want the rejection status too. - obviously, populating three tables (and maintaining two extra indexes) is extra work to do when storing events.
However, getting from here to there is not an easy task by any means, and will take quite a bit of work to do in a way that doesn't break backwards compatibility. Here are the tasks as far as I can see them:
- disambiguate any references to the
state_key
column, in preparation for adding new columns toevents
: Disambiguate queries onstate_key
#11497 - Add
state_key
andrejection_reason
columns toevents
, and populate them for all new events: Addstate_key
andrejection_reason
toevents
#11792 - Add a background update to populate
state_key
andrejection_reason
for all existing events: Bg update to populate newevents
table columns #13215 - Add some code which determines if the background update has completed, and if so, sets a flag which makes reads use the new columns instead of joining to the old tables.
- Add some more code which drops the old tables and stops populating them.
Each of those steps will require SCHEMA_VERSION and/or SCHEMA_COMPAT version updates to ensure that we never break compatibility with the previous Synapse release.
Metadata
Metadata
Assignees
Labels
A-DatabaseDB stuff like queries, migrations, new/remove columns, indexes, unexpected entries in the dbDB stuff like queries, migrations, new/remove columns, indexes, unexpected entries in the dbT-TaskRefactoring, removal, replacement, enabling or disabling functionality, other engineering tasks.Refactoring, removal, replacement, enabling or disabling functionality, other engineering tasks.Z-Future-MaintenanceThings that can't yet be done, but will need cleaning up in a couple of months/releasesThings that can't yet be done, but will need cleaning up in a couple of months/releases