diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2019-12-10 16:22:29 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-10 16:22:29 +0000 |
commit | 40eda849338b6e47a5804b4cf7000e9d2417c4d8 (patch) | |
tree | 257c215f3409efccab2fc626b183a77fabc4c582 /synapse | |
parent | Refactor get_events_from_store_or_dest to return a dict (#6501) (diff) | |
download | synapse-40eda849338b6e47a5804b4cf7000e9d2417c4d8.tar.xz |
Fix race which caused deleted devices to reappear (#6514)
Stop the `update_client_ips` background job from recreating deleted devices.
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/storage/data_stores/main/client_ips.py | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/synapse/storage/data_stores/main/client_ips.py b/synapse/storage/data_stores/main/client_ips.py index 320c5b0f07..add3037b69 100644 --- a/synapse/storage/data_stores/main/client_ips.py +++ b/synapse/storage/data_stores/main/client_ips.py @@ -451,16 +451,18 @@ class ClientIpStore(ClientIpBackgroundUpdateStore): # Technically an access token might not be associated with # a device so we need to check. if device_id: - self.db.simple_upsert_txn( + # this is always an update rather than an upsert: the row should + # already exist, and if it doesn't, that may be because it has been + # deleted, and we don't want to re-create it. + self.db.simple_update_txn( txn, table="devices", keyvalues={"user_id": user_id, "device_id": device_id}, - values={ + updatevalues={ "user_agent": user_agent, "last_seen": last_seen, "ip": ip, }, - lock=False, ) except Exception as e: # Failed to upsert, log and continue |