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

Fix sending server up commands from workers #6811

Merged
merged 6 commits into from
Jan 30, 2020
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/6811.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix waking up other workers when remote server is detected to have come back online.
5 changes: 4 additions & 1 deletion synapse/federation/transport/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# limitations under the License.

import logging
from typing import Any, Dict

from six.moves import urllib

Expand Down Expand Up @@ -352,7 +353,9 @@ def get_public_rooms(
else:
path = _create_v1_path("/publicRooms")

args = {"include_all_networks": "true" if include_all_networks else "false"}
args = {
"include_all_networks": "true" if include_all_networks else "false"
} # type: Dict[str, Any]
anoadragon453 marked this conversation as resolved.
Show resolved Hide resolved
if third_party_instance_id:
args["third_party_instance_id"] = (third_party_instance_id,)
if limit:
Expand Down
26 changes: 15 additions & 11 deletions synapse/federation/transport/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import functools
import logging
import re
from typing import Optional, Tuple, Type

from twisted.internet.defer import maybeDeferred

Expand Down Expand Up @@ -267,6 +268,8 @@ class BaseFederationServlet(object):
returned.
"""

PATH = "" # Overridden in subclasses, the regex to match against the path.

REQUIRE_AUTH = True

PREFIX = FEDERATION_V1_PREFIX # Allows specifying the API version
Expand Down Expand Up @@ -347,9 +350,6 @@ async def new_func(request, *args, **kwargs):

return response

# Extra logic that functools.wraps() doesn't finish
new_func.__self__ = func.__self__

return new_func

def register(self, server):
Expand Down Expand Up @@ -824,7 +824,7 @@ async def on_POST(self, origin, content, query):
if not self.allow_access:
raise FederationDeniedError(origin)

limit = int(content.get("limit", 100))
limit = int(content.get("limit", 100)) # type: Optional[int]
anoadragon453 marked this conversation as resolved.
Show resolved Hide resolved
since_token = content.get("since", None)
search_filter = content.get("filter", None)

Expand Down Expand Up @@ -971,7 +971,7 @@ async def on_POST(self, origin, content, query, group_id, room_id, config_key):
if get_domain_from_id(requester_user_id) != origin:
raise SynapseError(403, "requester_user_id doesn't match origin")

result = await self.groups_handler.update_room_in_group(
result = await self.handler.update_room_in_group(
group_id, requester_user_id, room_id, config_key, content
)

Expand Down Expand Up @@ -1422,11 +1422,13 @@ async def on_GET(self, origin, content, query, room_id):
On3pidBindServlet,
FederationVersionServlet,
RoomComplexityServlet,
)
) # type: Tuple[Type[BaseFederationServlet], ...]

OPENID_SERVLET_CLASSES = (OpenIdUserInfo,)
OPENID_SERVLET_CLASSES = (
OpenIdUserInfo,
) # type: Tuple[Type[BaseFederationServlet], ...]

ROOM_LIST_CLASSES = (PublicRoomList,)
ROOM_LIST_CLASSES = (PublicRoomList,) # type: Tuple[Type[PublicRoomList], ...]

GROUP_SERVER_SERVLET_CLASSES = (
FederationGroupsProfileServlet,
Expand All @@ -1447,17 +1449,19 @@ async def on_GET(self, origin, content, query, room_id):
FederationGroupsAddRoomsServlet,
FederationGroupsAddRoomsConfigServlet,
FederationGroupsSettingJoinPolicyServlet,
)
) # type: Tuple[Type[BaseFederationServlet], ...]


GROUP_LOCAL_SERVLET_CLASSES = (
FederationGroupsLocalInviteServlet,
FederationGroupsRemoveLocalUserServlet,
FederationGroupsBulkPublicisedServlet,
)
) # type: Tuple[Type[BaseFederationServlet], ...]


GROUP_ATTESTATION_SERVLET_CLASSES = (FederationGroupsRenewAttestaionServlet,)
GROUP_ATTESTATION_SERVLET_CLASSES = (
FederationGroupsRenewAttestaionServlet,
) # type: Tuple[Type[BaseFederationServlet], ...]

DEFAULT_SERVLET_GROUPS = (
"federation",
Expand Down
4 changes: 4 additions & 0 deletions synapse/replication/tcp/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
Command,
FederationAckCommand,
InvalidateCacheCommand,
RemoteServerUpCommand,
RemovePusherCommand,
UserIpCommand,
UserSyncCommand,
Expand Down Expand Up @@ -210,6 +211,9 @@ def send_user_ip(self, user_id, access_token, ip, user_agent, device_id, last_se
cmd = UserIpCommand(user_id, access_token, ip, user_agent, device_id, last_seen)
self.send_command(cmd)

def send_remote_server_up(self, server: str):
self.send_command(RemoteServerUpCommand(server))

def await_sync(self, data):
"""Returns a deferred that is resolved when we receive a SYNC command
with given data.
Expand Down
12 changes: 11 additions & 1 deletion synapse/server.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import twisted.internet

import synapse.api.auth
import synapse.config.homeserver
import synapse.crypto.keyring
import synapse.federation.sender
import synapse.federation.transaction_queue
import synapse.federation.transport.client
import synapse.handlers
import synapse.handlers.auth
Expand All @@ -17,6 +17,7 @@ import synapse.handlers.room_member
import synapse.handlers.set_password
import synapse.http.client
import synapse.notifier
import synapse.replication.tcp.client
import synapse.rest.media.v1.media_repository
import synapse.server_notices.server_notices_manager
import synapse.server_notices.server_notices_sender
Expand All @@ -27,6 +28,9 @@ class HomeServer(object):
@property
def config(self) -> synapse.config.homeserver.HomeServerConfig:
pass
@property
def hostname(self) -> str:
pass
def get_auth(self) -> synapse.api.auth.Auth:
pass
def get_auth_handler(self) -> synapse.handlers.auth.AuthHandler:
Expand Down Expand Up @@ -97,3 +101,9 @@ class HomeServer(object):
pass
def get_reactor(self) -> twisted.internet.base.ReactorBase:
pass
def get_keyring(self) -> synapse.crypto.keyring.Keyring:
pass
def get_tcp_replication(
self,
) -> synapse.replication.tcp.client.ReplicationClientHandler:
pass
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ extras = all
commands = mypy \
synapse/api \
synapse/config/ \
synapse/federation/transport \
synapse/handlers/ui_auth \
synapse/logging/ \
synapse/module_api \
Expand Down