Compare commits

...

5 Commits

Author SHA1 Message Date
Travis Ralston
a6cbc11321 Highlight exactly where the remote server drops the disinvite event 2019-03-05 23:44:02 -07:00
Travis Ralston
88df3a43e1 Attempt 2 at fixing
Attempt 1 didn't work because the remote server isn't expecting to
receive a `leave` negotiation. Instead, we should try sending the
event over a transaction so that the remote can deal with it as it
would any other leave event.
2019-03-05 23:41:22 -07:00
Travis Ralston
89b5876a00 Revert "Attempt at fix 1"
This reverts commit 668206155.

This didn't work because of course it didn't. See Attempt 2 for details.
2019-03-05 23:40:49 -07:00
Travis Ralston
b93bdb8e4e Attempt 1 at fixing
The event isn't being sent to the remote homeserver, so try sending
something to notify of the disinvite.
2019-03-05 23:40:49 -07:00
Travis Ralston
77cee5d880 Add some debugging to narrow down what is going on 2019-03-05 23:40:36 -07:00
4 changed files with 18 additions and 0 deletions

View File

@@ -195,6 +195,7 @@ class FederationServer(FederationBase):
)
continue
# TODO: Somehow trick the following into accepting disinvite events.
try:
room_version = yield self.store.get_room_version(room_id)
format_ver = room_version_to_event_format(room_version)

View File

@@ -22,6 +22,7 @@ from prometheus_client import Counter
from twisted.internet import defer
import synapse.metrics
from synapse.api.constants import EventTypes, Membership
from synapse.api.errors import (
FederationDeniedError,
HttpResponseException,
@@ -36,6 +37,7 @@ from synapse.metrics import (
sent_transactions_counter,
)
from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.types import UserID
from synapse.util import logcontext
from synapse.util.metrics import measure_func
from synapse.util.retryutils import NotRetryingDestination, get_retry_limiter
@@ -202,6 +204,17 @@ class TransactionQueue(object):
destinations = yield self.state.get_current_hosts_in_room(
event.room_id, latest_event_ids=event.prev_event_ids(),
)
# Special case leaves: We could be disinviting the host or
# unbanning them, so send the event to the host if they are
# not already in the list. The event affects their membership,
# so they have a moderate right to know what's going on.
if event.type == EventTypes.Member and (event.membership ==
Membership.LEAVE):
target_user = UserID.from_string(event.state_key)
if target_user.domain not in destinations:
destinations = set(destinations)
destinations.add(target_user.domain)
except Exception:
logger.exception(
"Failed to calculate hosts in room for event: %s",

View File

@@ -452,6 +452,9 @@ class RoomMemberHandler(object):
)
is_host_in_room = yield self._is_host_in_room(current_state_ids)
logger.info("Is host in room? %s" % is_host_in_room)
logger.info("effective_membership_state %s" % effective_membership_state)
logger.info("remote_room_hosts %s" % remote_room_hosts)
if effective_membership_state == Membership.JOIN:
if requester.is_guest:

View File

@@ -1386,6 +1386,7 @@ class SyncHandler(object):
mem_change_events_by_room_id = {}
for event in rooms_changed:
logger.warn("Membership %s" % event.room_id)
mem_change_events_by_room_id.setdefault(event.room_id, []).append(event)
newly_joined_rooms = []