@@ -2305,10 +2305,14 @@ async def clear_partial_state_room(self, room_id: str) -> bool:
2305
2305
still contains events with partial state.
2306
2306
"""
2307
2307
try :
2308
- await self .db_pool .runInteraction (
2309
- "clear_partial_state_room" , self ._clear_partial_state_room_txn , room_id
2310
- )
2311
- return True
2308
+ async with self ._un_partial_stated_rooms_stream_id_gen .get_next () as un_partial_state_room_stream_id :
2309
+ await self .db_pool .runInteraction (
2310
+ "clear_partial_state_room" ,
2311
+ self ._clear_partial_state_room_txn ,
2312
+ room_id ,
2313
+ un_partial_state_room_stream_id ,
2314
+ )
2315
+ return True
2312
2316
except self .db_pool .engine .module .IntegrityError as e :
2313
2317
# Assume that any `IntegrityError`s are due to partial state events.
2314
2318
logger .info (
@@ -2319,7 +2323,10 @@ async def clear_partial_state_room(self, room_id: str) -> bool:
2319
2323
return False
2320
2324
2321
2325
def _clear_partial_state_room_txn (
2322
- self , txn : LoggingTransaction , room_id : str
2326
+ self ,
2327
+ txn : LoggingTransaction ,
2328
+ room_id : str ,
2329
+ un_partial_state_room_stream_id : int ,
2323
2330
) -> None :
2324
2331
DatabasePool .simple_delete_txn (
2325
2332
txn ,
@@ -2336,6 +2343,16 @@ def _clear_partial_state_room_txn(
2336
2343
txn , self .get_partial_state_servers_at_join , (room_id ,)
2337
2344
)
2338
2345
2346
+ DatabasePool .simple_insert_txn (
2347
+ txn ,
2348
+ "un_partial_state_room_stream" ,
2349
+ {
2350
+ "stream_id" : un_partial_state_room_stream_id ,
2351
+ "instance_name" : self ._instance_name ,
2352
+ "room_id" : room_id ,
2353
+ },
2354
+ )
2355
+
2339
2356
# We now delete anything from `device_lists_remote_pending` with a
2340
2357
# stream ID less than the minimum
2341
2358
# `partial_state_rooms.device_lists_stream_id`, as we no longer need them.
0 commit comments