summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndrew Morgan <andrew@amorgan.xyz>2019-11-18 17:47:41 +0000
committerAndrew Morgan <andrew@amorgan.xyz>2019-11-18 17:47:41 +0000
commit1d9b29190bac5905ac63ac428030c3897a9663a4 (patch)
treea40a028200b43f34bcccc863ec4c9b90ce5b9a8a
parentReplace UPDATE with UPSERT on device_max_stream_id table (#6363) (diff)
downloadsynapse-1d9b29190bac5905ac63ac428030c3897a9663a4.tar.xz
Switch INSERT + UPDATE to UPSERT
-rw-r--r--synapse/storage/data_stores/main/deviceinbox.py22
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():