diff options
author | Sean Quah <8349537+squahtx@users.noreply.github.com> | 2021-10-12 11:24:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-12 11:24:05 +0100 |
commit | b8b905c4ea8a0d922d34d469f7d220f53def1b53 (patch) | |
tree | a3d209e24324f9eed6f491afe321ff4482d0678e /synapse/storage | |
parent | Fix opentracing and Prometheus metrics for replication requests (#10996) (diff) | |
download | synapse-b8b905c4ea8a0d922d34d469f7d220f53def1b53.tar.xz |
Fix inconsistent behavior of `get_last_client_by_ip` (#10970)
Make `get_last_client_by_ip` return the same dictionary structure regardless of whether the data has been persisted to the database. This change will allow slightly cleaner type hints to be applied later on.
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/databases/main/client_ips.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/synapse/storage/databases/main/client_ips.py b/synapse/storage/databases/main/client_ips.py index c77acc7c84..6c1ef09049 100644 --- a/synapse/storage/databases/main/client_ips.py +++ b/synapse/storage/databases/main/client_ips.py @@ -538,15 +538,20 @@ class ClientIpStore(ClientIpWorkerStore): """ ret = await super().get_last_client_ip_by_device(user_id, device_id) - # Update what is retrieved from the database with data which is pending insertion. + # Update what is retrieved from the database with data which is pending + # insertion, as if it has already been stored in the database. for key in self._batch_row_update: - uid, access_token, ip = key + uid, _access_token, ip = key if uid == user_id: user_agent, did, last_seen = self._batch_row_update[key] + + if did is None: + # These updates don't make it to the `devices` table + continue + if not device_id or did == device_id: - ret[(user_id, device_id)] = { + ret[(user_id, did)] = { "user_id": user_id, - "access_token": access_token, "ip": ip, "user_agent": user_agent, "device_id": did, |