diff options
author | Richard van der Hoff <richard@matrix.org> | 2018-10-08 13:44:58 +0100 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2018-10-08 13:46:52 +0100 |
commit | 495975e231bd429eb0114d9258423a5e202dcb2b (patch) | |
tree | f35d618bf6950888ffed9832dd0aa39e871da308 | |
parent | Merge pull request #3995 from matrix-org/rav/no_deextrem_outliers (diff) | |
download | synapse-495975e231bd429eb0114d9258423a5e202dcb2b.tar.xz |
Optimisation for filter_events_for_server
We're better off hashing just the event_id than the whole ((type, state_key), event_id) tuple - so use a dict instead of a set. Also, iteritems > items.
-rw-r--r-- | changelog.d/4017.misc | 1 | ||||
-rw-r--r-- | synapse/visibility.py | 13 |
2 files changed, 7 insertions, 7 deletions
diff --git a/changelog.d/4017.misc b/changelog.d/4017.misc new file mode 100644 index 0000000000..b1ceb06560 --- /dev/null +++ b/changelog.d/4017.misc @@ -0,0 +1 @@ +Optimisation for serving federation requests \ No newline at end of file diff --git a/synapse/visibility.py b/synapse/visibility.py index d4680863d3..c64ad2144c 100644 --- a/synapse/visibility.py +++ b/synapse/visibility.py @@ -324,14 +324,13 @@ def filter_events_for_server(store, server_name, events): # server's domain. # # event_to_state_ids contains lots of duplicates, so it turns out to be - # cheaper to build a complete set of unique - # ((type, state_key), event_id) tuples, and then filter out the ones we - # don't want. + # cheaper to build a complete event_id => (type, state_key) dict, and then + # filter out the ones we don't want # - state_key_to_event_id_set = { - e + event_id_to_state_key = { + event_id: key for key_to_eid in itervalues(event_to_state_ids) - for e in key_to_eid.items() + for key, event_id in iteritems(key_to_eid) } def include(typ, state_key): @@ -346,7 +345,7 @@ def filter_events_for_server(store, server_name, events): event_map = yield store.get_events([ e_id - for key, e_id in state_key_to_event_id_set + for e_id, key in iteritems(event_id_to_state_key) if include(key[0], key[1]) ]) |