mirror of
https://github.com/element-hq/synapse
synced 2024-09-06 01:50:08 +00:00
Merge pull request #2238 from matrix-org/erikj/faster_push_rules
Speed up calculating push rules
This commit is contained in:
commit
ccd62415ac
1 changed files with 23 additions and 9 deletions
|
@ -200,6 +200,13 @@ class RulesForRoom(object):
|
||||||
# not update the cache with it.
|
# not update the cache with it.
|
||||||
self.sequence = 0
|
self.sequence = 0
|
||||||
|
|
||||||
|
# A cache of user_ids that we *know* aren't interesting, e.g. user_ids
|
||||||
|
# owned by AS's, or remote users, etc. (I.e. users we will never need to
|
||||||
|
# calculate push for)
|
||||||
|
# These never need to be invalidated as we will never set up push for
|
||||||
|
# them.
|
||||||
|
self.uninteresting_user_set = set()
|
||||||
|
|
||||||
# We need to be clever on the invalidating caches callbacks, as
|
# We need to be clever on the invalidating caches callbacks, as
|
||||||
# otherwise the invalidation callback holds a reference to the object,
|
# otherwise the invalidation callback holds a reference to the object,
|
||||||
# potentially causing it to leak.
|
# potentially causing it to leak.
|
||||||
|
@ -231,10 +238,24 @@ class RulesForRoom(object):
|
||||||
|
|
||||||
# Loop through to see which member events we've seen and have rules
|
# Loop through to see which member events we've seen and have rules
|
||||||
# for and which we need to fetch
|
# for and which we need to fetch
|
||||||
for key, event_id in current_state_ids.iteritems():
|
for key in current_state_ids:
|
||||||
if key[0] != EventTypes.Member:
|
typ, user_id = key
|
||||||
|
if typ != EventTypes.Member:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if user_id in self.uninteresting_user_set:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not self.is_mine_id(user_id):
|
||||||
|
self.uninteresting_user_set.add(user_id)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if self.store.get_if_app_services_interested_in_user(user_id):
|
||||||
|
self.uninteresting_user_set.add(user_id)
|
||||||
|
continue
|
||||||
|
|
||||||
|
event_id = current_state_ids[key]
|
||||||
|
|
||||||
res = self.member_map.get(event_id, None)
|
res = self.member_map.get(event_id, None)
|
||||||
if res:
|
if res:
|
||||||
user_id, state = res
|
user_id, state = res
|
||||||
|
@ -244,13 +265,6 @@ class RulesForRoom(object):
|
||||||
ret_rules_by_user[user_id] = rules
|
ret_rules_by_user[user_id] = rules
|
||||||
continue
|
continue
|
||||||
|
|
||||||
user_id = key[1]
|
|
||||||
if not self.is_mine_id(user_id):
|
|
||||||
continue
|
|
||||||
|
|
||||||
if self.store.get_if_app_services_interested_in_user(user_id):
|
|
||||||
continue
|
|
||||||
|
|
||||||
# If a user has left a room we remove their push rule. If they
|
# If a user has left a room we remove their push rule. If they
|
||||||
# joined then we readd it later in _update_rules_with_member_event_ids
|
# joined then we readd it later in _update_rules_with_member_event_ids
|
||||||
ret_rules_by_user.pop(user_id, None)
|
ret_rules_by_user.pop(user_id, None)
|
||||||
|
|
Loading…
Reference in a new issue