forked from MirrorHub/synapse
Replace UPDATE with UPSERT on device_max_stream_id table (#6363)
This commit is contained in:
parent
53b6559a89
commit
657d614f6a
2 changed files with 16 additions and 2 deletions
1
changelog.d/6363.bugfix
Normal file
1
changelog.d/6363.bugfix
Normal 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.
|
|
@ -358,8 +358,21 @@ class DeviceInboxStore(DeviceInboxWorkerStore, DeviceInboxBackgroundUpdateStore)
|
||||||
def _add_messages_to_local_device_inbox_txn(
|
def _add_messages_to_local_device_inbox_txn(
|
||||||
self, txn, stream_id, messages_by_user_then_device
|
self, txn, stream_id, messages_by_user_then_device
|
||||||
):
|
):
|
||||||
sql = "UPDATE device_max_stream_id" " SET stream_id = ?" " WHERE stream_id < ?"
|
# Compatible method of performing an upsert
|
||||||
txn.execute(sql, (stream_id, stream_id))
|
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,))
|
||||||
|
|
||||||
local_by_user_then_device = {}
|
local_by_user_then_device = {}
|
||||||
for user_id, messages_by_device in messages_by_user_then_device.items():
|
for user_id, messages_by_device in messages_by_user_then_device.items():
|
||||||
|
|
Loading…
Reference in a new issue