@ -322,12 +322,7 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
)
)
def _purge_room_txn ( self , txn : LoggingTransaction , room_id : str ) - > List [ int ] :
def _purge_room_txn ( self , txn : LoggingTransaction , room_id : str ) - > List [ int ] :
# We *immediately* delete the room from the rooms table. This ensures
# First, fetch all the state groups that should be deleted, before
# 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
# we delete that information.
# we delete that information.
txn . execute (
txn . execute (
"""
"""
@ -387,7 +382,7 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
( room_id , ) ,
( 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 (
for table in (
" current_state_events " ,
" current_state_events " ,
" destination_rooms " ,
" destination_rooms " ,
@ -395,8 +390,13 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
" event_forward_extremities " ,
" event_forward_extremities " ,
" event_push_actions " ,
" event_push_actions " ,
" event_search " ,
" event_search " ,
" partial_state_events " ,
" events " ,
" events " ,
" federation_inbound_events_staging " ,
" group_rooms " ,
" group_rooms " ,
" local_current_membership " ,
" partial_state_rooms_servers " ,
" partial_state_rooms " ,
" receipts_graph " ,
" receipts_graph " ,
" receipts_linearized " ,
" receipts_linearized " ,
" room_aliases " ,
" room_aliases " ,
@ -416,8 +416,9 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore):
" group_summary_rooms " ,
" group_summary_rooms " ,
" room_account_data " ,
" room_account_data " ,
" room_tags " ,
" room_tags " ,
" local_current_membership " ,
# "rooms" happens last, to keep the foreign keys in the other tables
" federation_inbound_events_staging " ,
# happy
" rooms " ,
) :
) :
logger . info ( " [purge] removing %s from %s " , room_id , table )
logger . info ( " [purge] removing %s from %s " , room_id , table )
txn . execute ( " DELETE FROM %s WHERE room_id=? " % ( table , ) , ( room_id , ) )
txn . execute ( " DELETE FROM %s WHERE room_id=? " % ( table , ) , ( room_id , ) )