@@ -91,9 +91,14 @@ def __init__(self, hs: "HomeServer"):
91
91
self ._query_appservices_for_keys = (
92
92
hs .config .experimental .msc3984_appservice_key_query
93
93
)
94
+ self ._task_scheduler = hs .get_task_scheduler ()
94
95
95
96
self .device_list_updater = DeviceListWorkerUpdater (hs )
96
97
98
+ self ._task_scheduler .register_action (
99
+ self ._delete_device_messages , DELETE_DEVICE_MSGS_TASK_NAME
100
+ )
101
+
97
102
@trace
98
103
async def get_devices_by_user (self , user_id : str ) -> List [JsonDict ]:
99
104
"""
@@ -383,6 +388,32 @@ async def handle_room_un_partial_stated(self, room_id: str) -> None:
383
388
"Trying handling device list state for partial join: not supported on workers."
384
389
)
385
390
391
+ DEVICE_MSGS_DELETE_BATCH_LIMIT = 100
392
+
393
+ async def _delete_device_messages (
394
+ self ,
395
+ task : ScheduledTask ,
396
+ ) -> Tuple [TaskStatus , Optional [JsonMapping ], Optional [str ]]:
397
+ """Scheduler task to delete device messages in batch of `DEVICE_MSGS_DELETE_BATCH_LIMIT`."""
398
+ assert task .params is not None
399
+ user_id = task .params ["user_id" ]
400
+ device_id = task .params ["device_id" ]
401
+ up_to_stream_id = task .params ["up_to_stream_id" ]
402
+
403
+ res = await self .store .delete_messages_for_device (
404
+ user_id = user_id ,
405
+ device_id = device_id ,
406
+ up_to_stream_id = up_to_stream_id ,
407
+ limit = DeviceHandler .DEVICE_MSGS_DELETE_BATCH_LIMIT ,
408
+ )
409
+
410
+ if res < DeviceHandler .DEVICE_MSGS_DELETE_BATCH_LIMIT :
411
+ return TaskStatus .COMPLETE , None , None
412
+ else :
413
+ # There is probably still device messages to be deleted, let's keep the task active and it will be run
414
+ # again in a subsequent scheduler loop run (probably the next one, if not too many tasks are running).
415
+ return TaskStatus .ACTIVE , None , None
416
+
386
417
387
418
class DeviceHandler (DeviceWorkerHandler ):
388
419
device_list_updater : "DeviceListUpdater"
@@ -394,7 +425,6 @@ def __init__(self, hs: "HomeServer"):
394
425
self ._account_data_handler = hs .get_account_data_handler ()
395
426
self ._storage_controllers = hs .get_storage_controllers ()
396
427
self .db_pool = hs .get_datastores ().main .db_pool
397
- self ._task_scheduler = hs .get_task_scheduler ()
398
428
399
429
self .device_list_updater = DeviceListUpdater (hs , self )
400
430
@@ -428,10 +458,6 @@ def __init__(self, hs: "HomeServer"):
428
458
self ._delete_stale_devices ,
429
459
)
430
460
431
- self ._task_scheduler .register_action (
432
- self ._delete_device_messages , DELETE_DEVICE_MSGS_TASK_NAME
433
- )
434
-
435
461
def _check_device_name_length (self , name : Optional [str ]) -> None :
436
462
"""
437
463
Checks whether a device name is longer than the maximum allowed length.
@@ -590,32 +616,6 @@ async def delete_devices(self, user_id: str, device_ids: List[str]) -> None:
590
616
591
617
await self .notify_device_update (user_id , device_ids )
592
618
593
- DEVICE_MSGS_DELETE_BATCH_LIMIT = 100
594
-
595
- async def _delete_device_messages (
596
- self ,
597
- task : ScheduledTask ,
598
- ) -> Tuple [TaskStatus , Optional [JsonMapping ], Optional [str ]]:
599
- """Scheduler task to delete device messages in batch of `DEVICE_MSGS_DELETE_BATCH_LIMIT`."""
600
- assert task .params is not None
601
- user_id = task .params ["user_id" ]
602
- device_id = task .params ["device_id" ]
603
- up_to_stream_id = task .params ["up_to_stream_id" ]
604
-
605
- res = await self .store .delete_messages_for_device (
606
- user_id = user_id ,
607
- device_id = device_id ,
608
- up_to_stream_id = up_to_stream_id ,
609
- limit = DeviceHandler .DEVICE_MSGS_DELETE_BATCH_LIMIT ,
610
- )
611
-
612
- if res < DeviceHandler .DEVICE_MSGS_DELETE_BATCH_LIMIT :
613
- return TaskStatus .COMPLETE , None , None
614
- else :
615
- # There is probably still device messages to be deleted, let's keep the task active and it will be run
616
- # again in a subsequent scheduler loop run (probably the next one, if not too many tasks are running).
617
- return TaskStatus .ACTIVE , None , None
618
-
619
619
async def update_device (self , user_id : str , device_id : str , content : dict ) -> None :
620
620
"""Update the given device
621
621
0 commit comments