2 files changed, 8 insertions, 3 deletions
diff --git a/synapse/handlers/register.py b/synapse/handlers/register.py
index bb1df1e60f..7e9d065f50 100644
--- a/synapse/handlers/register.py
+++ b/synapse/handlers/register.py
@@ -946,6 +946,8 @@ class RegistrationHandler:
if not device_ids:
return
+ logger.info("Pruning %d stale devices for %s", len(device_ids), user_id)
+
# Now spawn a background loop that deletes said devices.
async def _prune_too_many_devices_loop() -> None:
if user_id in self._currently_pruning_devices_for_users:
diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py
index 7647cda2c6..f61b7bc96e 100644
--- a/synapse/storage/databases/main/devices.py
+++ b/synapse/storage/databases/main/devices.py
@@ -1638,19 +1638,22 @@ class DeviceBackgroundUpdateStore(SQLBaseStore):
"""
rows = await self.db_pool.execute(
- "check_too_many_devices_for_user_last_seen", None, sql, (user_id,)
+ "check_too_many_devices_for_user_last_seen",
+ None,
+ sql,
+ user_id,
)
if rows:
max_last_seen = max(rows[0][0], max_last_seen)
# Fetch the devices to delete.
sql = """
- SELECT DISTINCT device_id FROM devices
+ SELECT device_id FROM devices
LEFT JOIN e2e_device_keys_json USING (user_id, device_id)
WHERE
user_id = ?
AND NOT hidden
- AND last_seen < ?
+ AND last_seen <= ?
AND key_json IS NULL
ORDER BY last_seen
"""
|