diff options
author | Richard van der Hoff <richard@matrix.org> | 2019-11-18 12:05:36 +0000 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2019-11-18 12:05:36 +0000 |
commit | 870c00e278a8156cf67f8c916c39215ef2333b56 (patch) | |
tree | 6a3fb77c7d8b1c2f9d919e1aa3b91de8a61567ab /synapse/storage | |
parent | newsfile (diff) | |
parent | Replace UPDATE with UPSERT on device_max_stream_id table (#6363) (diff) | |
download | synapse-870c00e278a8156cf67f8c916c39215ef2333b56.tar.xz |
Merge remote-tracking branch 'origin/develop' into rav/event_auth/4
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/_base.py | 9 | ||||
-rw-r--r-- | synapse/storage/data_stores/main/deviceinbox.py | 17 |
2 files changed, 18 insertions, 8 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py index 1a2b7ebe25..ab596fa68d 100644 --- a/synapse/storage/_base.py +++ b/synapse/storage/_base.py @@ -361,14 +361,11 @@ class SQLBaseStore(object): expiration_ts, ) - self._simple_insert_txn( + self._simple_upsert_txn( txn, "account_validity", - values={ - "user_id": user_id, - "expiration_ts_ms": expiration_ts, - "email_sent": False, - }, + keyvalues={"user_id": user_id}, + values={"expiration_ts_ms": expiration_ts, "email_sent": False}, ) def start_profiling(self): diff --git a/synapse/storage/data_stores/main/deviceinbox.py b/synapse/storage/data_stores/main/deviceinbox.py index f04aad0743..96cd0fb77a 100644 --- a/synapse/storage/data_stores/main/deviceinbox.py +++ b/synapse/storage/data_stores/main/deviceinbox.py @@ -358,8 +358,21 @@ class DeviceInboxStore(DeviceInboxWorkerStore, DeviceInboxBackgroundUpdateStore) def _add_messages_to_local_device_inbox_txn( self, txn, stream_id, messages_by_user_then_device ): - sql = "UPDATE device_max_stream_id" " SET stream_id = ?" " WHERE stream_id < ?" - txn.execute(sql, (stream_id, stream_id)) + # 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,)) local_by_user_then_device = {} for user_id, messages_by_device in messages_by_user_then_device.items(): |