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

Use get_joined_users_from_context instead of manually looking up hosts #1069

Merged
merged 1 commit into from
Sep 5, 2016
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
19 changes: 11 additions & 8 deletions synapse/handlers/federation.py
Original file line number Diff line number Diff line change
Expand Up @@ -832,11 +832,13 @@ def on_send_join_request(self, origin, pdu):

new_pdu = event

message_handler = self.hs.get_handlers().message_handler
destinations = yield message_handler.get_joined_hosts_for_room_from_state(
context
users_in_room = yield self.store.get_joined_users_from_context(event, context)

destinations = set(
get_domain_from_id(user_id) for user_id in users_in_room
if not self.hs.is_mine_id(user_id)
)
destinations = set(destinations)

destinations.discard(origin)

logger.debug(
Expand Down Expand Up @@ -1055,11 +1057,12 @@ def on_send_leave_request(self, origin, pdu):

new_pdu = event

message_handler = self.hs.get_handlers().message_handler
destinations = yield message_handler.get_joined_hosts_for_room_from_state(
context
users_in_room = yield self.store.get_joined_users_from_context(event, context)

destinations = set(
get_domain_from_id(user_id) for user_id in users_in_room
if not self.hs.is_mine_id(user_id)
)
destinations = set(destinations)
destinations.discard(origin)

logger.debug(
Expand Down
44 changes: 6 additions & 38 deletions synapse/handlers/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
from synapse.util.caches.snapshot_cache import SnapshotCache
from synapse.util.logcontext import preserve_fn, preserve_context_over_deferred
from synapse.util.metrics import measure_func
from synapse.util.caches.descriptors import cachedInlineCallbacks
from synapse.visibility import filter_events_for_client

from ._base import BaseHandler
Expand Down Expand Up @@ -945,7 +944,12 @@ def is_inviter_member_event(e):
event_stream_id, max_stream_id
)

destinations = yield self.get_joined_hosts_for_room_from_state(context)
users_in_room = yield self.store.get_joined_users_from_context(event, context)

destinations = [
get_domain_from_id(user_id) for user_id in users_in_room
if not self.hs.is_mine_id(user_id)
]

@defer.inlineCallbacks
def _notify():
Expand All @@ -963,39 +967,3 @@ def _notify():
preserve_fn(federation_handler.handle_new_event)(
event, destinations=destinations,
)

def get_joined_hosts_for_room_from_state(self, context):
state_group = context.state_group
if not state_group:
# If state_group is None it means it has yet to be assigned a
# state group, i.e. we need to make sure that calls with a state_group
# of None don't hit previous cached calls with a None state_group.
# To do this we set the state_group to a new object as object() != object()
state_group = object()

return self._get_joined_hosts_for_room_from_state(
state_group, context.current_state_ids
)

@cachedInlineCallbacks(num_args=1, cache_context=True)
def _get_joined_hosts_for_room_from_state(self, state_group, current_state_ids,
cache_context):

# Don't bother getting state for people on the same HS
current_state = yield self.store.get_events([
e_id for key, e_id in current_state_ids.items()
if key[0] == EventTypes.Member and not self.hs.is_mine_id(key[1])
])

destinations = set()
for e in current_state.itervalues():
try:
if e.type == EventTypes.Member:
if e.content["membership"] == Membership.JOIN:
destinations.add(get_domain_from_id(e.state_key))
except SynapseError:
logger.warn(
"Failed to get destination from event %s", e.event_id
)

defer.returnValue(destinations)