diff --git a/synapse/storage/databases/main/purge_events.py b/synapse/storage/databases/main/purge_events.py
index c94d5f9f81..2353c120e9 100644
--- a/synapse/storage/databases/main/purge_events.py
+++ b/synapse/storage/databases/main/purge_events.py
@@ -322,12 +322,7 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
)
def _purge_room_txn(self, txn: LoggingTransaction, room_id: str) -> List[int]:
- # We *immediately* delete the room from the rooms table. This ensures
- # that we don't race when persisting events (as that transaction checks
- # that the room exists).
- txn.execute("DELETE FROM rooms WHERE room_id = ?", (room_id,))
-
- # Next, we fetch all the state groups that should be deleted, before
+ # First, fetch all the state groups that should be deleted, before
# we delete that information.
txn.execute(
"""
@@ -387,7 +382,7 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
(room_id,),
)
- # and finally, the tables with an index on room_id (or no useful index)
+ # next, the tables with an index on room_id (or no useful index)
for table in (
"current_state_events",
"destination_rooms",
@@ -395,8 +390,13 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
"event_forward_extremities",
"event_push_actions",
"event_search",
+ "partial_state_events",
"events",
+ "federation_inbound_events_staging",
"group_rooms",
+ "local_current_membership",
+ "partial_state_rooms_servers",
+ "partial_state_rooms",
"receipts_graph",
"receipts_linearized",
"room_aliases",
@@ -416,8 +416,9 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
"group_summary_rooms",
"room_account_data",
"room_tags",
- "local_current_membership",
- "federation_inbound_events_staging",
+ # "rooms" happens last, to keep the foreign keys in the other tables
+ # happy
+ "rooms",
):
logger.info("[purge] removing %s from %s", room_id, table)
txn.execute("DELETE FROM %s WHERE room_id=?" % (table,), (room_id,))
|