Compare commits

...

3 Commits

Author SHA1 Message Date
Andrew Morgan
5f4b59d0ce Switch to using a delta file 2019-11-19 10:49:40 +00:00
Andrew Morgan
bc7a623980 Add changelog 2019-11-18 17:50:08 +00:00
Andrew Morgan
1d9b29190b Switch INSERT + UPDATE to UPSERT 2019-11-18 17:47:41 +00:00
3 changed files with 8 additions and 15 deletions

1
changelog.d/6375.bugfix Normal file
View File

@@ -0,0 +1 @@
Fix `to_device` stream ID getting reset every time Synapse restarts, which had the potential to cause unable to decrypt errors.

View File

@@ -358,21 +358,8 @@ class DeviceInboxStore(DeviceInboxWorkerStore, DeviceInboxBackgroundUpdateStore)
def _add_messages_to_local_device_inbox_txn(
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 = "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():

View File

@@ -0,0 +1,5 @@
INSERT INTO device_max_stream_id (stream_id)
SELECT 0
WHERE NOT EXISTS (
SELECT 1 FROM device_max_stream_id
);