Ignore AS users when fetching push rules
By ignoring AS users early on when fetching push rules for a room we can avoid needlessly hitting the DB and filling up the caches.
This commit is contained in:
parent
baf9e74a73
commit
0163466d72
|
@ -39,6 +39,14 @@ class ApplicationServiceStore(SQLBaseStore):
|
||||||
def get_app_services(self):
|
def get_app_services(self):
|
||||||
return self.services_cache
|
return self.services_cache
|
||||||
|
|
||||||
|
def get_if_app_services_interested_in_user(self, user_id):
|
||||||
|
"""Check if the user is one associated with an app service
|
||||||
|
"""
|
||||||
|
for service in self.services_cache:
|
||||||
|
if service.is_interested_in_user(user_id):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def get_app_service_by_user_id(self, user_id):
|
def get_app_service_by_user_id(self, user_id):
|
||||||
"""Retrieve an application service from their user ID.
|
"""Retrieve an application service from their user ID.
|
||||||
|
|
||||||
|
|
|
@ -156,12 +156,20 @@ class PushRuleStore(SQLBaseStore):
|
||||||
event=event,
|
event=event,
|
||||||
)
|
)
|
||||||
|
|
||||||
local_users_in_room = set(u for u in users_in_room if self.hs.is_mine_id(u))
|
# We ignore app service users for now. This is so that we don't fill
|
||||||
|
# up the `get_if_users_have_pushers` cache with AS entries that we
|
||||||
|
# know don't have pushers, nor even read receipts.
|
||||||
|
local_users_in_room = set(
|
||||||
|
u for u in users_in_room
|
||||||
|
if self.hs.is_mine_id(u)
|
||||||
|
and not self.get_if_app_services_interested_in_user(u)
|
||||||
|
)
|
||||||
|
|
||||||
# users in the room who have pushers need to get push rules run because
|
# users in the room who have pushers need to get push rules run because
|
||||||
# that's how their pushers work
|
# that's how their pushers work
|
||||||
if_users_with_pushers = yield self.get_if_users_have_pushers(
|
if_users_with_pushers = yield self.get_if_users_have_pushers(
|
||||||
local_users_in_room, on_invalidate=cache_context.invalidate,
|
local_users_in_room,
|
||||||
|
on_invalidate=cache_context.invalidate,
|
||||||
)
|
)
|
||||||
user_ids = set(
|
user_ids = set(
|
||||||
uid for uid, have_pusher in if_users_with_pushers.items() if have_pusher
|
uid for uid, have_pusher in if_users_with_pushers.items() if have_pusher
|
||||||
|
|
Loading…
Reference in New Issue