Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Fix providing a RoomStreamToken instance to _notify_app_services_ephemeral #11137

Merged
merged 9 commits into from
Nov 2, 2021
1 change: 1 addition & 0 deletions changelog.d/11137.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Partially address occasional bursts of old read receipt and presence data being sent to application services that have opted in to receiving them.
anoadragon453 marked this conversation as resolved.
Show resolved Hide resolved
7 changes: 3 additions & 4 deletions synapse/handlers/appservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ async def handle_room_events(events: Iterable[EventBase]) -> None:
def notify_interested_services_ephemeral(
self,
stream_key: str,
new_token: Optional[int],
new_token: int,
users: Optional[Collection[Union[str, UserID]]] = None,
) -> None:
"""This is called by the notifier in the background
Expand Down Expand Up @@ -224,14 +224,13 @@ async def _notify_interested_services_ephemeral(
self,
services: List[ApplicationService],
stream_key: str,
new_token: Optional[int],
new_token: int,
users: Collection[Union[str, UserID]],
) -> None:
logger.debug("Checking interested services for %s" % (stream_key))
with Measure(self.clock, "notify_interested_services_ephemeral"):
for service in services:
# Only handle typing if we have the latest token
richvdh marked this conversation as resolved.
Show resolved Hide resolved
if stream_key == "typing_key" and new_token is not None:
if stream_key == "typing_key":
events = await self._handle_typing(service, new_token)
if events:
self.scheduler.submit_ephemeral_events_for_as(service, events)
Expand Down
9 changes: 5 additions & 4 deletions synapse/notifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,11 +381,12 @@ def _notify_app_services_ephemeral(
users: Optional[Collection[Union[str, UserID]]] = None,
):
try:
stream_token = None
if isinstance(new_token, int):
stream_token = new_token
# Convert new_token from a RoomStreamToken to an int if necessary
if isinstance(new_token, RoomStreamToken):
new_token = new_token.stream
anoadragon453 marked this conversation as resolved.
Show resolved Hide resolved

self.appservice_handler.notify_interested_services_ephemeral(
stream_key, stream_token, users or []
stream_key, new_token, users or []
)
except Exception:
logger.exception("Error notifying application services of event")
Expand Down