forked from MirrorHub/synapse
Fix bug where we sent remote presence states to remote servers (#9850)
This commit is contained in:
parent
495b214f4f
commit
db70435de7
3 changed files with 13 additions and 3 deletions
1
changelog.d/9850.feature
Normal file
1
changelog.d/9850.feature
Normal file
|
@ -0,0 +1 @@
|
|||
Add experimental support for handling presence on a worker.
|
|
@ -539,6 +539,10 @@ class FederationSender(AbstractFederationSender):
|
|||
# No-op if presence is disabled.
|
||||
return
|
||||
|
||||
# Ensure we only send out presence states for local users.
|
||||
for state in states:
|
||||
assert self.is_mine_id(state.user_id)
|
||||
|
||||
for destination in destinations:
|
||||
if destination == self.server_name:
|
||||
continue
|
||||
|
|
|
@ -125,6 +125,7 @@ class BasePresenceHandler(abc.ABC):
|
|||
self.store = hs.get_datastore()
|
||||
self.presence_router = hs.get_presence_router()
|
||||
self.state = hs.get_state_handler()
|
||||
self.is_mine_id = hs.is_mine_id
|
||||
|
||||
self._federation = None
|
||||
if hs.should_send_federation() or not hs.config.worker_app:
|
||||
|
@ -261,7 +262,8 @@ class BasePresenceHandler(abc.ABC):
|
|||
self, states: List[UserPresenceState]
|
||||
):
|
||||
"""If this instance is a federation sender, send the states to all
|
||||
destinations that are interested.
|
||||
destinations that are interested. Filters out any states for remote
|
||||
users.
|
||||
"""
|
||||
|
||||
if not self._send_federation:
|
||||
|
@ -270,6 +272,11 @@ class BasePresenceHandler(abc.ABC):
|
|||
# If this worker sends federation we must have a FederationSender.
|
||||
assert self._federation
|
||||
|
||||
states = [s for s in states if self.is_mine_id(s.user_id)]
|
||||
|
||||
if not states:
|
||||
return
|
||||
|
||||
hosts_and_states = await get_interested_remotes(
|
||||
self.store,
|
||||
self.presence_router,
|
||||
|
@ -292,7 +299,6 @@ class WorkerPresenceHandler(BasePresenceHandler):
|
|||
def __init__(self, hs):
|
||||
super().__init__(hs)
|
||||
self.hs = hs
|
||||
self.is_mine_id = hs.is_mine_id
|
||||
|
||||
self._presence_enabled = hs.config.use_presence
|
||||
|
||||
|
@ -492,7 +498,6 @@ class PresenceHandler(BasePresenceHandler):
|
|||
def __init__(self, hs: "HomeServer"):
|
||||
super().__init__(hs)
|
||||
self.hs = hs
|
||||
self.is_mine_id = hs.is_mine_id
|
||||
self.server_name = hs.hostname
|
||||
self.wheel_timer = WheelTimer()
|
||||
self.notifier = hs.get_notifier()
|
||||
|
|
Loading…
Reference in a new issue