diff options
author | Erik Johnston <erik@matrix.org> | 2015-08-18 10:49:23 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-08-18 10:49:23 +0100 |
commit | cfc503681f3febbd80faeda0da4134b98bcbcbbc (patch) | |
tree | 8da84c50706d7c4593b805dd0d1fe48bad727551 | |
parent | Add index receipts_linearized_room_stream (diff) | |
download | synapse-cfc503681f3febbd80faeda0da4134b98bcbcbbc.tar.xz |
Comments
-rw-r--r-- | synapse/storage/receipts.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/synapse/storage/receipts.py b/synapse/storage/receipts.py index 46c06e42b1..0ed9f45ecd 100644 --- a/synapse/storage/receipts.py +++ b/synapse/storage/receipts.py @@ -158,15 +158,25 @@ class ReceiptsStore(SQLBaseStore): results = {} for row in txn_results: - results.setdefault(row["room_id"], { + # We want a single event per room, since we want to batch the + # receipts by room, event and type. + room_event = results.setdefault(row["room_id"], { "type": "m.receipt", "room_id": row["room_id"], "content": {}, - })["content"].setdefault( + }) + + # The content is of the form: + # {"$foo:bar": { "read": { "@user:host": <receipt> }, .. }, .. } + event_id = room_event["content"].setdefault( row["event_id"], {} - ).setdefault( + ) + + receipt_type = event_id.setdefault( row["receipt_type"], {} - )[row["user_id"]] = json.loads(row["data"]) + ) + + receipt_type[row["user_id"]] = json.loads(row["data"]) results = { room_id: [results[room_id]] if room_id in results else [] |