diff --git a/changelog.d/11912.misc b/changelog.d/11912.misc
new file mode 100644
index 0000000000..805588c2e9
--- /dev/null
+++ b/changelog.d/11912.misc
@@ -0,0 +1 @@
+Various refactors to the application service notifier code.
\ No newline at end of file
diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py
index b2a5cd9a65..8d845fe951 100644
--- a/synapse/storage/databases/main/devices.py
+++ b/synapse/storage/databases/main/devices.py
@@ -1496,13 +1496,23 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
)
async def add_device_change_to_streams(
- self, user_id: str, device_ids: Collection[str], hosts: List[str]
- ) -> int:
+ self, user_id: str, device_ids: Collection[str], hosts: Collection[str]
+ ) -> Optional[int]:
"""Persist that a user's devices have been updated, and which hosts
(if any) should be poked.
+
+ Args:
+ user_id: The ID of the user whose device changed.
+ device_ids: The IDs of any changed devices. If empty, this function will
+ return None.
+ hosts: The remote destinations that should be notified of the change.
+
+ Returns:
+ The maximum stream ID of device list updates that were added to the database, or
+ None if no updates were added.
"""
if not device_ids:
- return
+ return None
async with self._device_list_id_gen.get_next_mult(
len(device_ids)
@@ -1573,11 +1583,11 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
self,
txn: LoggingTransaction,
user_id: str,
- device_ids: Collection[str],
- hosts: List[str],
+ device_ids: Iterable[str],
+ hosts: Collection[str],
stream_ids: List[str],
context: Dict[str, str],
- ):
+ ) -> None:
for host in hosts:
txn.call_after(
self._device_list_federation_stream_cache.entity_has_changed,
|