diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2022-09-09 07:08:41 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-09 07:08:41 -0400 |
commit | 3d9f82efcb9c337197c9f50a88ec3fb541ee08ff (patch) | |
tree | 9255500dcbe8fe57466605464c45dd1d107c4dee | |
parent | Add rust to CI (#13763) (diff) | |
download | synapse-3d9f82efcb9c337197c9f50a88ec3fb541ee08ff.tar.xz |
Use an upsert for `receipts_graph`. (#13752)
Instead of a delete, then insert. This was previously done for `receipts_linearized` in 2dc430d36ef793b38d6d79ec8db4ea60588df2ee (#7607).
-rw-r--r-- | changelog.d/13752.misc | 1 | ||||
-rw-r--r-- | synapse/storage/databases/main/receipts.py | 12 |
2 files changed, 5 insertions, 8 deletions
diff --git a/changelog.d/13752.misc b/changelog.d/13752.misc new file mode 100644 index 0000000000..7624861b9f --- /dev/null +++ b/changelog.d/13752.misc @@ -0,0 +1 @@ +User an additional database query when persisting receipts. diff --git a/synapse/storage/databases/main/receipts.py b/synapse/storage/databases/main/receipts.py index 124c70ad37..3838409519 100644 --- a/synapse/storage/databases/main/receipts.py +++ b/synapse/storage/databases/main/receipts.py @@ -812,7 +812,7 @@ class ReceiptsWorkerStore(SQLBaseStore): # FIXME: This shouldn't invalidate the whole cache txn.call_after(self._get_linearized_receipts_for_room.invalidate, (room_id,)) - self.db_pool.simple_delete_txn( + self.db_pool.simple_upsert_txn( txn, table="receipts_graph", keyvalues={ @@ -820,17 +820,13 @@ class ReceiptsWorkerStore(SQLBaseStore): "receipt_type": receipt_type, "user_id": user_id, }, - ) - self.db_pool.simple_insert_txn( - txn, - table="receipts_graph", values={ - "room_id": room_id, - "receipt_type": receipt_type, - "user_id": user_id, "event_ids": json_encoder.encode(event_ids), "data": json_encoder.encode(data), }, + # receipts_graph has a unique constraint on + # (user_id, room_id, receipt_type), so no need to lock + lock=False, ) |