diff options
author | Erik Johnston <erik@matrix.org> | 2015-05-13 14:39:05 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-05-13 14:39:05 +0100 |
commit | 6edff11a888d2c3f7a6749599fcb9d4974a76bbb (patch) | |
tree | 9277bb0a290e9c23b659eb3c2c99d667bc66dce5 /synapse/storage/_base.py | |
parent | Temp turn off checking for rejections and redactions (diff) | |
download | synapse-6edff11a888d2c3f7a6749599fcb9d4974a76bbb.tar.xz |
Don't fetch redaction and rejection stuff for each event, so we can use index only scan
Diffstat (limited to 'synapse/storage/_base.py')
-rw-r--r-- | synapse/storage/_base.py | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py index 0279400a83..a6fc4d6ea4 100644 --- a/synapse/storage/_base.py +++ b/synapse/storage/_base.py @@ -918,10 +918,10 @@ class SQLBaseStore(object): start_time = update_counter("event_cache", start_time) sql = ( - "SELECT e.internal_metadata, e.json, r.event_id, rej.reason " + "SELECT e.internal_metadata, e.json, r.redacts, rej.event_id " "FROM event_json as e " + "LEFT JOIN rejections as rej USING (event_id) " "LEFT JOIN redactions as r ON e.event_id = r.redacts " - "LEFT JOIN rejections as rej on rej.event_id = e.event_id " "WHERE e.event_id = ? " "LIMIT 1 " ) @@ -967,6 +967,14 @@ class SQLBaseStore(object): internal_metadata = json.loads(internal_metadata) start_time = update_counter("decode_internal", start_time) + if rejected_reason: + rejected_reason = self._simple_select_one_onecol_txn( + txn, + table="rejections", + keyvalues={"event_id": rejected_reason}, + retcol="reason", + ) + ev = FrozenEvent( d, internal_metadata_dict=internal_metadata, @@ -977,12 +985,19 @@ class SQLBaseStore(object): if check_redacted and redacted: ev = prune_event(ev) - ev.unsigned["redacted_by"] = redacted + redaction_id = self._simple_select_one_onecol_txn( + txn, + table="redactions", + keyvalues={"redacts": ev.event_id}, + retcol="event_id", + ) + + ev.unsigned["redacted_by"] = redaction_id # Get the redaction event. because = self._get_event_txn( txn, - redacted, + redaction_id, check_redacted=False ) |