diff options
author | Andrew Morgan <andrew@amorgan.xyz> | 2019-11-18 17:47:41 +0000 |
---|---|---|
committer | Andrew Morgan <andrew@amorgan.xyz> | 2019-11-18 17:47:41 +0000 |
commit | 1d9b29190bac5905ac63ac428030c3897a9663a4 (patch) | |
tree | a40a028200b43f34bcccc863ec4c9b90ce5b9a8a | |
parent | Replace UPDATE with UPSERT on device_max_stream_id table (#6363) (diff) | |
download | synapse-1d9b29190bac5905ac63ac428030c3897a9663a4.tar.xz |
Switch INSERT + UPDATE to UPSERT
-rw-r--r-- | synapse/storage/data_stores/main/deviceinbox.py | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/synapse/storage/data_stores/main/deviceinbox.py b/synapse/storage/data_stores/main/deviceinbox.py index 96cd0fb77a..6393c4f6de 100644 --- a/synapse/storage/data_stores/main/deviceinbox.py +++ b/synapse/storage/data_stores/main/deviceinbox.py @@ -359,20 +359,14 @@ class DeviceInboxStore(DeviceInboxWorkerStore, DeviceInboxBackgroundUpdateStore) self, txn, stream_id, messages_by_user_then_device ): # Compatible method of performing an upsert - sql = "SELECT stream_id FROM device_max_stream_id" - - txn.execute(sql) - rows = txn.fetchone() - if rows: - db_stream_id = rows[0] - if db_stream_id < stream_id: - # Insert the new stream_id - sql = "UPDATE device_max_stream_id SET stream_id = ?" - else: - # No rows, perform an insert - sql = "INSERT INTO device_max_stream_id (stream_id) VALUES (?)" - - txn.execute(sql, (stream_id,)) + sql = """ + INSERT INTO device_max_stream_id + (stream_id) VALUES (?) + ON CONFLICT DO UPDATE device_max_stream_id + SET stream_id = ? + WHERE stream_id < ? + """ + txn.execute(sql, (stream_id, stream_id)) local_by_user_then_device = {} for user_id, messages_by_device in messages_by_user_then_device.items(): |