Tie together matches_user_in_member_list and get_users_in_room caches (#8676)

* Tie together matches_user_in_member_list and get_users_in_room

* changelog

* Remove type to fix mypy

* Add `on_invalidate` to the function signature in the hopes that may make things work well

* Remove **kwargs

* Update 8676.bugfix
release-v1.22.1
Will Hunt 2020-10-29 16:58:16 +00:00 committed by Erik Johnston
parent fedfdfd750
commit b37aa1643b
2 changed files with 7 additions and 4 deletions

1
changelog.d/8676.bugfix Normal file
View File

@ -0,0 +1 @@
Fix a bug where an appservice may not be forwarded events for a room it was recently invited to. Broken in v1.22.0.

View File

@ -19,7 +19,7 @@ from typing import TYPE_CHECKING, Iterable, List, Match, Optional
from synapse.api.constants import EventTypes from synapse.api.constants import EventTypes
from synapse.events import EventBase from synapse.events import EventBase
from synapse.types import GroupID, JsonDict, UserID, get_domain_from_id from synapse.types import GroupID, JsonDict, UserID, get_domain_from_id
from synapse.util.caches.descriptors import cached from synapse.util.caches.descriptors import _CacheContext, cached
if TYPE_CHECKING: if TYPE_CHECKING:
from synapse.appservice.api import ApplicationServiceApi from synapse.appservice.api import ApplicationServiceApi
@ -164,9 +164,9 @@ class ApplicationService:
does_match = await self.matches_user_in_member_list(event.room_id, store) does_match = await self.matches_user_in_member_list(event.room_id, store)
return does_match return does_match
@cached(num_args=1) @cached(num_args=1, cache_context=True)
async def matches_user_in_member_list( async def matches_user_in_member_list(
self, room_id: str, store: "DataStore" self, room_id: str, store: "DataStore", cache_context: _CacheContext,
) -> bool: ) -> bool:
"""Check if this service is interested a room based upon it's membership """Check if this service is interested a room based upon it's membership
@ -177,7 +177,9 @@ class ApplicationService:
Returns: Returns:
True if this service would like to know about this room. True if this service would like to know about this room.
""" """
member_list = await store.get_users_in_room(room_id) member_list = await store.get_users_in_room(
room_id, on_invalidate=cache_context.invalidate
)
# check joined member events # check joined member events
for user_id in member_list: for user_id in member_list: