diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index d8d5730b65..99655c8bb0 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -229,12 +229,6 @@ class FederationHandler(BaseHandler):
@log_function
@defer.inlineCallbacks
def do_invite_join(self, target_host, room_id, joinee, content, snapshot):
- hosts = yield self.store.get_joined_hosts_for_room(room_id)
- if self.hs.hostname in hosts:
- # We are already in the room.
- logger.debug("We're already in the room apparently")
- defer.returnValue(False)
-
pdu = yield self.replication_layer.make_join(
target_host,
room_id,
@@ -268,7 +262,7 @@ class FederationHandler(BaseHandler):
logger.debug("do_invite_join state: %s", state)
- is_new_state = yield self.state_handler.annotate_event_with_state(
+ yield self.state_handler.annotate_event_with_state(
event,
old_state=state
)
@@ -296,13 +290,13 @@ class FederationHandler(BaseHandler):
yield self.store.persist_event(
e,
backfilled=False,
- is_new_state=False
+ is_new_state=True
)
yield self.store.persist_event(
event,
backfilled=False,
- is_new_state=is_new_state
+ is_new_state=True
)
finally:
room_queue = self.room_queues[room_id]
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 3642fcfc6d..825957f721 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -24,6 +24,7 @@ from synapse.api.events.room import (
RoomTopicEvent, RoomNameEvent, RoomJoinRulesEvent,
)
from synapse.util import stringutils
+from synapse.util.async import run_on_reactor
from ._base import BaseHandler
import logging
@@ -432,9 +433,12 @@ class RoomMemberHandler(BaseHandler):
# that we are allowed to join when we decide whether or not we
# need to do the invite/join dance.
- hosts = yield self.store.get_joined_hosts_for_room(room_id)
+ is_host_in_room = yield self.auth.check_host_in_room(
+ event.room_id,
+ self.hs.hostname
+ )
- if self.hs.hostname in hosts:
+ if is_host_in_room:
should_do_dance = False
elif room_host:
should_do_dance = True
@@ -517,6 +521,8 @@ class RoomMemberHandler(BaseHandler):
@defer.inlineCallbacks
def _do_local_membership_update(self, event, membership, snapshot,
do_auth):
+ yield run_on_reactor()
+
# If we're inviting someone, then we should also send it to that
# HS.
target_user_id = event.state_key
|