This repository has been 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
Set thread_id column to non-null for event_push_{actions,actions_staging,summary} #15350
Merged
Merged
Changes from 1 commit
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
a64e13f
Force ensure there are no non-null thread_id values for event_push_{a…
clokep e18e710
Clean-up dead code.
clokep 6b9cb54
Newsfragment
clokep aae261b
Review comments.
clokep a12c4d6
Merge remote-tracking branch 'origin/develop' into clokep/thread-clea…
clokep 473219d
Indexes are being created on the renamed tables.
clokep File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
synapse/storage/schema/main/delta/74/02thread_notifications_backfill.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* Copyright 2023 The Matrix.org Foundation C.I.C | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
-- Force the background updates from 06thread_notifications.sql to run in the | ||
-- foreground as code will now require those to be "done". | ||
|
||
DELETE FROM background_updates WHERE update_name = 'event_push_backfill_thread_id'; | ||
|
||
-- Overwrite any null thread_id values. | ||
UPDATE event_push_actions_staging SET thread_id = 'main' WHERE thread_id IS NULL; | ||
UPDATE event_push_actions SET thread_id = 'main' WHERE thread_id IS NULL; | ||
UPDATE event_push_summary SET thread_id = 'main' WHERE thread_id IS NULL; | ||
|
||
-- Drop the background updates to calculate the indexes used to find null thread_ids. | ||
DELETE FROM background_updates WHERE update_name = 'event_push_actions_thread_id_null'; | ||
DELETE FROM background_updates WHERE update_name = 'event_push_summary_thread_id_null'; |
23 changes: 23 additions & 0 deletions
23
synapse/storage/schema/main/delta/74/03thread_notifications_not_null.sql.postgres
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* Copyright 2022 The Matrix.org Foundation C.I.C | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
-- Drop the indexes used to find null thread_ids. | ||
DROP INDEX IF EXISTS event_push_actions_thread_id_null; | ||
DROP INDEX IF EXISTS event_push_summary_thread_id_null; | ||
|
||
-- The thread_id columns can now be made non-nullable. | ||
ALTER TABLE event_push_actions_staging ALTER COLUMN thread_id SET NOT NULL; | ||
ALTER TABLE event_push_actions ALTER COLUMN thread_id SET NOT NULL; | ||
ALTER TABLE event_push_summary ALTER COLUMN thread_id SET NOT NULL; |
108 changes: 108 additions & 0 deletions
108
synapse/storage/schema/main/delta/74/03thread_notifications_not_null.sql.sqlite
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
/* Copyright 2022 The Matrix.org Foundation C.I.C | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
clokep marked this conversation as resolved.
Show resolved
Hide resolved
|
||
-- The thread_id columns can now be made non-nullable. | ||
-- | ||
-- SQLite doesn't support modifying columns to an existing table, so it must | ||
-- be recreated. | ||
|
||
-- Create the new tables. | ||
CREATE TABLE event_push_actions_staging_new ( | ||
event_id TEXT NOT NULL, | ||
user_id TEXT NOT NULL, | ||
actions TEXT NOT NULL, | ||
notif SMALLINT NOT NULL, | ||
highlight SMALLINT NOT NULL, | ||
unread SMALLINT, | ||
thread_id TEXT NOT NULL, | ||
inserted_ts BIGINT | ||
); | ||
|
||
CREATE TABLE event_push_actions_new ( | ||
room_id TEXT NOT NULL, | ||
event_id TEXT NOT NULL, | ||
user_id TEXT NOT NULL, | ||
profile_tag VARCHAR(32), | ||
actions TEXT NOT NULL, | ||
topological_ordering BIGINT, | ||
stream_ordering BIGINT, | ||
notif SMALLINT, | ||
highlight SMALLINT, | ||
unread SMALLINT, | ||
thread_id TEXT NOT NULL, | ||
CONSTRAINT event_id_user_id_profile_tag_uniqueness UNIQUE (room_id, event_id, user_id, profile_tag) | ||
); | ||
|
||
CREATE TABLE event_push_summary_new ( | ||
user_id TEXT NOT NULL, | ||
room_id TEXT NOT NULL, | ||
notif_count BIGINT NOT NULL, | ||
stream_ordering BIGINT NOT NULL, | ||
unread_count BIGINT, | ||
last_receipt_stream_ordering BIGINT, | ||
thread_id TEXT NOT NULL | ||
); | ||
|
||
-- Swap the indexes. | ||
DROP INDEX IF EXISTS event_push_actions_staging_id; | ||
CREATE INDEX event_push_actions_staging_id ON event_push_actions_staging_new(event_id); | ||
|
||
DROP INDEX IF EXISTS event_push_actions_highlights_index; | ||
DROP INDEX IF EXISTS event_push_actions_rm_tokens; | ||
DROP INDEX IF EXISTS event_push_actions_room_id_user_id; | ||
DROP INDEX IF EXISTS event_push_actions_stream_ordering; | ||
DROP INDEX IF EXISTS event_push_actions_u_highlight; | ||
CREATE INDEX event_push_actions_highlights_index ON event_push_actions_new (user_id, room_id, topological_ordering, stream_ordering); | ||
CREATE INDEX event_push_actions_rm_tokens on event_push_actions_new( user_id, room_id, topological_ordering, stream_ordering ); | ||
CREATE INDEX event_push_actions_room_id_user_id on event_push_actions_new(room_id, user_id); | ||
CREATE INDEX event_push_actions_stream_ordering on event_push_actions_new( stream_ordering, user_id ); | ||
CREATE INDEX event_push_actions_u_highlight ON event_push_actions_new (user_id, stream_ordering); | ||
-- Note we drop the event_push_actions_thread_id_null index by not re-creating it. | ||
|
||
DROP INDEX IF EXISTS event_push_summary_unique_index2; | ||
CREATE UNIQUE INDEX event_push_summary_unique_index2 ON event_push_summary_new (user_id, room_id, thread_id) ; | ||
-- Note we drop the event_push_summary_thread_id_null index by not re-creating it. | ||
|
||
-- Copy the data. | ||
INSERT INTO event_push_actions_staging_new (event_id, user_id, actions, notif, highlight, unread, thread_id, inserted_ts) | ||
SELECT event_id, user_id, actions, notif, highlight, unread, thread_id, inserted_ts | ||
FROM event_push_actions_staging; | ||
|
||
INSERT INTO event_push_actions_new (room_id, event_id, user_id, profile_tag, actions, topological_ordering, stream_ordering, notif, highlight, unread, thread_id) | ||
SELECT room_id, event_id, user_id, profile_tag, actions, topological_ordering, stream_ordering, notif, highlight, unread, thread_id | ||
FROM event_push_actions; | ||
|
||
INSERT INTO event_push_summary_new (user_id, room_id, notif_count, stream_ordering, unread_count, last_receipt_stream_ordering, thread_id) | ||
SELECT user_id, room_id, notif_count, stream_ordering, unread_count, last_receipt_stream_ordering, thread_id | ||
FROM event_push_summary; | ||
clokep marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
-- Drop the old tables. | ||
DROP TABLE event_push_actions_staging; | ||
DROP TABLE event_push_actions; | ||
DROP TABLE event_push_summary; | ||
|
||
-- Rename the tables. | ||
ALTER TABLE event_push_actions_staging_new RENAME TO event_push_actions_staging; | ||
ALTER TABLE event_push_actions_new RENAME TO event_push_actions; | ||
ALTER TABLE event_push_summary_new RENAME TO event_push_summary; | ||
|
||
-- Re-run background updates from 72/02event_push_actions_index.sql and | ||
-- 72/06thread_notifications.sql. | ||
INSERT INTO background_updates (ordering, update_name, progress_json) VALUES | ||
(7403, 'event_push_summary_unique_index2', '{}') | ||
ON CONFLICT (update_name) DO UPDATE SET progress_json = '{}'; | ||
INSERT INTO background_updates (ordering, update_name, progress_json) VALUES | ||
(7403, 'event_push_actions_stream_highlight_index', '{}') | ||
ON CONFLICT (update_name) DO UPDATE SET progress_json = '{}'; |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@erikjohnston I doubt you remember, but does this sound like what we were looking to do in #14225 / #14222? I think it is, but would be curious if you have concerns!