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

Fix infinite loop in presence handler #5103

Merged
merged 1 commit into from
Apr 26, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/5103.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix bug where presence updates were sent to all servers in a room when a new server joined, rather than to just the new server.
5 changes: 5 additions & 0 deletions synapse/handlers/presence.py
Original file line number Diff line number Diff line change
Expand Up @@ -828,6 +828,11 @@ def _handle_state_delta(self, deltas):
if typ != EventTypes.Member:
continue

if event_id is None:
# state has been deleted, so this is not a join. We only care about
# joins.
continue

event = yield self.store.get_event(event_id)
if event.content.get("membership") != Membership.JOIN:
# We only care about joins
Expand Down
18 changes: 18 additions & 0 deletions synapse/storage/state_deltas.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,24 @@

class StateDeltasStore(SQLBaseStore):
def get_current_state_deltas(self, prev_stream_id):
"""Fetch a list of room state changes since the given stream id

Each entry in the result contains the following fields:
- stream_id (int)
- room_id (str)
- type (str): event type
- state_key (str):
- event_id (str|None): new event_id for this state key. None if the
state has been deleted.
- prev_event_id (str|None): previous event_id for this state key. None
if it's new state.

Args:
prev_stream_id (int): point to get changes since (exclusive)

Returns:
Deferred[list[dict]]: results
"""
prev_stream_id = int(prev_stream_id)
if not self._curr_state_delta_stream_cache.has_any_entity_changed(
prev_stream_id
Expand Down