Skip to content
This repository was archived by the owner on Nov 25, 2024. It is now read-only.

Commit 3a2eadc

Browse files
authored
Speed up purging rooms (#3381)
[skip CI]
1 parent 7bbec19 commit 3a2eadc

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

roomserver/storage/postgres/purge_statements.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ const purgePreviousEventsSQL = "" +
4141
" SELECT ARRAY_AGG(event_nid) FROM roomserver_events WHERE room_nid = $1" +
4242
")"
4343

44+
// This removes the majority of prev events and is way faster than the above.
45+
// The above query is still needed to delete the remaining prev events.
46+
const purgePreviousEvents2SQL = "" +
47+
"DELETE FROM roomserver_previous_events rpe WHERE EXISTS(SELECT event_id FROM roomserver_events re WHERE room_nid = $1 AND re.event_id = rpe.previous_event_id)"
48+
4449
const purgePublishedSQL = "" +
4550
"DELETE FROM roomserver_published WHERE room_id = $1"
4651

@@ -69,6 +74,7 @@ type purgeStatements struct {
6974
purgeInvitesStmt *sql.Stmt
7075
purgeMembershipsStmt *sql.Stmt
7176
purgePreviousEventsStmt *sql.Stmt
77+
purgePreviousEvents2Stmt *sql.Stmt
7278
purgePublishedStmt *sql.Stmt
7379
purgeRedactionStmt *sql.Stmt
7480
purgeRoomAliasesStmt *sql.Stmt
@@ -87,6 +93,7 @@ func PreparePurgeStatements(db *sql.DB) (*purgeStatements, error) {
8793
{&s.purgeMembershipsStmt, purgeMembershipsSQL},
8894
{&s.purgePublishedStmt, purgePublishedSQL},
8995
{&s.purgePreviousEventsStmt, purgePreviousEventsSQL},
96+
{&s.purgePreviousEvents2Stmt, purgePreviousEvents2SQL},
9097
{&s.purgeRedactionStmt, purgeRedactionsSQL},
9198
{&s.purgeRoomAliasesStmt, purgeRoomAliasesSQL},
9299
{&s.purgeRoomStmt, purgeRoomSQL},
@@ -117,7 +124,8 @@ func (s *purgeStatements) PurgeRoom(
117124
s.purgeStateSnapshotEntriesStmt,
118125
s.purgeInvitesStmt,
119126
s.purgeMembershipsStmt,
120-
s.purgePreviousEventsStmt,
127+
s.purgePreviousEvents2Stmt, // Fast purge the majority of events
128+
s.purgePreviousEventsStmt, // Slow purge the remaining events
121129
s.purgeEventJSONStmt,
122130
s.purgeRedactionStmt,
123131
s.purgeEventsStmt,

roomserver/storage/sqlite3/purge_statements.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ const purgePreviousEventsSQL = "" +
4141
" SELECT event_nid FROM roomserver_events WHERE room_nid = $1" +
4242
")"
4343

44+
// This removes the majority of prev events and is way faster than the above.
45+
// The above query is still needed to delete the remaining prev events.
46+
const purgePreviousEvents2SQL = "" +
47+
"DELETE FROM roomserver_previous_events AS rpe WHERE EXISTS(SELECT event_id FROM roomserver_events AS re WHERE room_nid = $1 AND re.event_id = rpe.previous_event_id)"
48+
4449
const purgePublishedSQL = "" +
4550
"DELETE FROM roomserver_published WHERE room_id = $1"
4651

@@ -64,6 +69,7 @@ type purgeStatements struct {
6469
purgeInvitesStmt *sql.Stmt
6570
purgeMembershipsStmt *sql.Stmt
6671
purgePreviousEventsStmt *sql.Stmt
72+
purgePreviousEvents2Stmt *sql.Stmt
6773
purgePublishedStmt *sql.Stmt
6874
purgeRedactionStmt *sql.Stmt
6975
purgeRoomAliasesStmt *sql.Stmt
@@ -81,6 +87,7 @@ func PreparePurgeStatements(db *sql.DB, stateSnapshot *stateSnapshotStatements)
8187
{&s.purgeMembershipsStmt, purgeMembershipsSQL},
8288
{&s.purgePublishedStmt, purgePublishedSQL},
8389
{&s.purgePreviousEventsStmt, purgePreviousEventsSQL},
90+
{&s.purgePreviousEvents2Stmt, purgePreviousEvents2SQL},
8491
{&s.purgeRedactionStmt, purgeRedactionsSQL},
8592
{&s.purgeRoomAliasesStmt, purgeRoomAliasesSQL},
8693
{&s.purgeRoomStmt, purgeRoomSQL},
@@ -114,7 +121,8 @@ func (s *purgeStatements) PurgeRoom(
114121
s.purgeStateSnapshotEntriesStmt,
115122
s.purgeInvitesStmt,
116123
s.purgeMembershipsStmt,
117-
s.purgePreviousEventsStmt,
124+
s.purgePreviousEvents2Stmt, // Fast purge the majority of events
125+
s.purgePreviousEventsStmt, // Slow purge the remaining events
118126
s.purgeEventJSONStmt,
119127
s.purgeRedactionStmt,
120128
s.purgeEventsStmt,

0 commit comments

Comments
 (0)